7 #include "imstkTriangleToTetMap.h" 8 #include "imstkTetrahedralMesh.h" 9 #include "imstkSurfaceMesh.h" 10 #include "imstkVecDataArray.h" 14 TriangleToTetMap::TriangleToTetMap()
16 setRequiredInputType<TetrahedralMesh>(0);
17 setRequiredInputType<SurfaceMesh>(1);
20 TriangleToTetMap::TriangleToTetMap(
21 std::shared_ptr<Geometry> parent,
22 std::shared_ptr<Geometry> child)
27 setRequiredInputType<TetrahedralMesh>(0);
28 setRequiredInputType<SurfaceMesh>(1);
36 m_triToTetMap.clear();
45 const std::array<Vec3i, 4> facePattern = {
46 Vec3i(0, 1, 2), Vec3i(0, 1, 3), Vec3i(0, 2, 3), Vec3i(1, 2, 3)
49 auto tetMesh = std::dynamic_pointer_cast<
TetrahedralMesh>(getParentGeometry());
50 auto surfMesh = std::dynamic_pointer_cast<
SurfaceMesh>(getChildGeometry());
52 std::shared_ptr<VecDataArray<int, 4>> tetIndicesPtr = tetMesh->getCells();
55 std::shared_ptr<VecDataArray<int, 3>> surfIndicesPtr = surfMesh->getCells();
59 std::unordered_map<TriCell, int> triToFaceId;
60 for (
int i = 0; i < surfIndices.size(); i++)
62 const Vec3i& tri = surfIndices[i];
73 triToFaceId[cell_a] = i;
79 for (
int i = 0; i < tetIndices.size(); i++)
81 const Vec4i& tet = tetIndices[i];
84 for (
int k = 0; k < 4; k++)
87 tet[facePattern[k][0]],
88 tet[facePattern[k][1]],
89 tet[facePattern[k][2]]);
92 auto iter = triToFaceId.find(cell_b);
93 if (iter != triToFaceId.end())
95 const int triId = iter->second;
96 triToTetMap[triId] = i;
105 auto citer = m_triToTetMap.find(triId);
106 return (citer != m_triToTetMap.end()) ? citer->second : -1;
Utility for triangle comparison.
void compute() override
Compute the map.
void setParentGeometry(std::shared_ptr< Geometry > parent)
Get/Set parent geometry.
int getParentTetId(const int triId) const
Get the tet id that contains the triangle.
void computeTriToTetMap(std::unordered_map< int, int > &triToTetMap)
Compute tet vertex id to surf vertex id map.
int getParentVertexId(const int childVertexId) const
Get the mapped/corresponding parent index, given a child index. returns -1 if no correspondence found...
Represents a set of tetrahedrons & vertices via an array of Vec3d double vertices & Vec4i integer ind...
void setChildGeometry(std::shared_ptr< Geometry > child)
Get/Set child geometry.
Represents a set of triangles & vertices via an array of Vec3d double vertices & Vec3i integer indice...
void compute() override
Compute the tetra-triangle mesh map.