XIAN-FEM-2026June/3D opticsfem-master/mesh/Mesh_Base.cpp

183 lines
3.5 KiB
C++

#include"Mesh_Base.h"
int Mesh_2D::GetNbrVertex()
{
return _mNbrVertex;
}
void Mesh_2D::GetVertex(int num, Eigen::Vector3d &vertex)
{
vertex(0) = _mVertex(num, 0);
vertex(1) = _mVertex(num, 1);
vertex(2) = _mVertex(num, 2);
}
int Mesh_2D::GetNbrEdge()
{
return _mNbrEdge;
}
int Mesh_2D::GetEdge(int numEdge, int numVertex)
{
return _mEdge(numEdge, numVertex);
}
int Mesh_2D::GetNbrTri()
{
return _mNbrTri;
}
int Mesh_2D::GetTri(int numTri, int numVertex)
{
return _mTri(numTri, numVertex);
}
int Mesh_2D::GetEdgeOfTri(int numTri, int numEdge)
{
return _mEdgeOfTri(numTri, numEdge);
}
int Mesh_2D::GetDomainOfTri(int numTri)
{
return _mDomainOfTri(numTri);
}
int Mesh_2D::GetNbrEdges()
{
return _mNbrEdges;
}
void Mesh_2D::GetCoonOfEdges(int numEdges, Eigen::Vector2i& coonOfEdges)
{
coonOfEdges(0) = _mCoonOfEdges(numEdges, 0);
coonOfEdges(1) = _mCoonOfEdges(numEdges, 1);
}
void Mesh_2D::GetNormOfEdges(int numEdgs, Eigen::Vector3d& normOfEdges)
{
normOfEdges(0) = _mNormOfEdges(numEdgs, 0);
normOfEdges(1) = _mNormOfEdges(numEdgs, 1);
normOfEdges(2) = _mNormOfEdges(numEdgs, 2);
}
int Mesh_2D::GetDomainOfEdges(int numEdges)
{
return _mDomainOfEdges(numEdges);
}
int Mesh_3D::GetNbrVertex()
{
return _mNbrVertex;
}
void Mesh_3D::GetVertex(int num, Eigen::Vector3d& vertex)
{
vertex(0) = _mVertex(num, 0);
vertex(1) = _mVertex(num, 1);
vertex(2) = _mVertex(num, 2);
}
int Mesh_3D::GetNbrEdge()
{
return _mNbrEdge;
}
int Mesh_3D::GetEdge(int numEdge, int numVertex)
{
return _mEdge(numEdge, numVertex);
}
int Mesh_3D::GetNbrTet()
{
return _mNbrTet;
}
int Mesh_3D::GetTet(int numTet, int numVertex)
{
return _mTet(numTet, numVertex);
}
int Mesh_3D::GetEdgeOfTet(int numTet, int numEdge)
{
return _mEdgeOfTet(numTet, numEdge);
}
int Mesh_3D::GetDomainOfTet(int numTet)
{
return _mDomainOfTet(numTet);
}
int Mesh_3D::GetNbrPrism()
{
return _mNbrPrim;
}
int Mesh_3D::GetPrism(int numPrism, int numVertex)
{
return _mPrism(numPrism, numVertex);
}
int Mesh_3D::GetEdgeOfPrism(int numPrism, int numEdge)
{
return _mEdgeOfPrism(numPrism, numEdge);
}
int Mesh_3D::GetDomainOfPrism(int numPrism)
{
return _mDomainOfPrism(numPrism);
}
int Mesh_3D::GetNbrTri()
{
return _mNbrTri;
}
int Mesh_3D::GetTri(int numTri, int numVertex)
{
return _mTri(numTri, numVertex);
}
int Mesh_3D::GetDomainOfTri(int numTri)
{
return _mDomainOfTri(numTri);
}
void Mesh_3D::GetCoonOfTri(int numTri, Eigen::Vector3i& connOfTri)
{
connOfTri(0) = _mConnOfTri(numTri, 0);
connOfTri(1) = _mConnOfTri(numTri, 1);
connOfTri(2) = 0;
}
int Mesh_3D::GetNbrQuad()
{
return _mNbrQuad;
}
int Mesh_3D::GetQuad(int numQuad, int numVertex)
{
return _mQuad(numQuad, numVertex);
}
int Mesh_3D::GetDomainOfQuad(int numQuad)
{
return _mDomainOfQuad(numQuad);
}
void Mesh_3D::GetCoonOfQuad(int numQuad, Eigen::Vector2i& coonOfQuad)
{
coonOfQuad(0) = _mConnOfQuad(numQuad, 0);
coonOfQuad(1) = _mConnOfQuad(numQuad, 1);
}
void Mesh_3D::GetNormOfFace(int domain, Eigen::Vector3d& norm)
{
if (domain >= 0 && domain < _mNormOfFace.rows())
{
norm(0) = _mNormOfFace(domain, 0);
norm(1) = _mNormOfFace(domain, 1);
norm(2) = _mNormOfFace(domain, 2);
}
else
{
norm = Eigen::Vector3d::Zero();
}
}
void Mesh_3D::GetTriIndicesOfDomain(int domain, Eigen::VectorXi& triIndices)
{
int count = 0;
for (int i = 0; i < _mNbrTri; i++)
{
if (_mDomainOfTri(i) == domain)
count++;
}
triIndices = Eigen::VectorXi(count);
int idx = 0;
for (int i = 0; i < _mNbrTri; i++)
{
if (_mDomainOfTri(i) == domain)
triIndices(idx++) = i;
}
}