#include "MeshEntity.h"
#include "MeshEntity.h"
/*
 * entity.cpp
 *
 *  Created on: May 9, 2017
 *      Author: vadims
 */

#include <set>
#include <iostream>
#include "MeshEntity.h"
#include <BRepBuilderAPI_MakeVertex.hxx>


MeshEntity::~MeshEntity()
{
}

MeshEntity::MeshEntity(TopoDS_Shape shape, std::string name, int id): TopoEntity(shape, name, id)
{
	ng_mesh = nullptr;
	ng_localh = nullptr;
}


MeshEntity::MeshEntity(std::string name, int id) : TopoEntity(TopoDS_Shape(BRepBuilderAPI_MakeVertex(gp_Pnt(0, 0, 0))), name, id)
{
	ng_mesh = nullptr;
	ng_localh = nullptr;
}


MeshEntity::MeshEntity(const MeshEntity& that) : TopoEntity(that)
{
	elements = that.elements;
	nodes = that.nodes;
}

MeshEntity::MeshEntity(const std::shared_ptr<MeshEntity> that) : TopoEntity(that)
{
	elements = that->elements;
	nodes = that->nodes;
}


void MeshEntity::addElement(std::shared_ptr<Element> el)
{
	elements.push_back(el);
}

void MeshEntity::addNode(std::shared_ptr<Node> nd)
{
	nodes.push_back(nd);
}

std::vector<std::shared_ptr<Element>> MeshEntity::getElements()
{
	return std::vector<std::shared_ptr<Element>>(elements.begin(), elements.end());
}

std::vector<std::shared_ptr<Node>> MeshEntity::getNodes()
{
	// Make unique.
	std::set<std::shared_ptr<Node>> res(nodes.begin(),nodes.end());
	return std::vector<std::shared_ptr<Node>>(res.begin(), res.end());
}


bool MeshEntity::hasNetgenMesh()
{
	if (ng_mesh == nullptr)
		return false;
	else
		return true;
}


void MeshEntity::setMeshParameters(std::shared_ptr<MeshParameters> mp )
{
	mesh_params = mp;
}

std::shared_ptr<MeshParameters> MeshEntity::getMeshParameters()
{
	return mesh_params;
}


NetgenMesh_ MeshEntity::getNetgenMesh()
{
	return ng_mesh;
}

NetgenLocalH* MeshEntity::getNetgenLocalH()
{
	return ng_localh;
}

void MeshEntity::setNetgenMesh(NetgenMesh_ m)
{
	ng_mesh = m;
}

void MeshEntity::setNetgenLocalH(NetgenLocalH* l)
{
	ng_localh = l;
}