#pragma once

#include <vector>

#include "mesh/MeshEntity.h"
#include "MeshParameters.h"
#include "Mesh.h"
#include "NetgenWrapper/NetgenWrapper.h"

class MeshingData
{
public:
	MeshingData();
	~MeshingData();
	void addMeshEntity(std::shared_ptr<MeshEntity> te);
	bool isMeshed(std::shared_ptr<TopoEntity>);
	std::shared_ptr<MeshParameters> getParameters(std::shared_ptr<TopoEntity >);
	void setMesh(std::shared_ptr<Mesh> m);
	void setMesh(std::shared_ptr<TopoEntity >, NetgenMesh_);
	void setLocalH(std::shared_ptr<TopoEntity >, NetgenLocalH*);
	void setParameters(std::shared_ptr<TopoEntity >, std::shared_ptr<MeshParameters>);
	NetgenMesh_ getMesh(std::shared_ptr<TopoEntity > te);
	NetgenLocalH* getLocalH(std::shared_ptr<TopoEntity > te);
	std::shared_ptr<TopoEntity> getTopoEntity(TopoDS_Shape sh);
	std::shared_ptr<TopoEntity> getTopoEntity(std::string nm);

private:

	std::vector<std::shared_ptr<MeshEntity>> entity_vec;
	std::shared_ptr<Mesh> mesh;

};
