18#ifndef itkQuadEdgeMeshEulerOperatorsTestHelper_h
19#define itkQuadEdgeMeshEulerOperatorsTestHelper_h
26template <
typename TMesh>
38 check->SetExpectedNumberOfPoints(NumVertices);
39 check->SetExpectedNumberOfEdges(NumFaces);
40 check->SetExpectedNumberOfFaces(NumEdges);
41 check->SetExpectedNumberOfBoundaries(NumBorders);
42 check->SetExpectedGenus(Genus);
43 return (check->ValidateEulerCharacteristic());
47template <
typename TMesh>
48std::vector<typename TMesh::PointType>
52 using CoordRepType =
typename PointType::CoordRepType;
53 std::vector<PointType> oPt(iN * iN);
55 for (
unsigned int i = 0; i < iN; ++i)
57 for (
unsigned int j = 0; j < iN; ++j)
59 oPt[i * iN + j][0] =
static_cast<CoordRepType
>(j);
60 oPt[i * iN + j][1] =
static_cast<CoordRepType
>(i);
61 oPt[i * iN + j][2] =
static_cast<CoordRepType
>(0.);
69template <
typename TMesh>
73 using MeshType = TMesh;
74 using CellType =
typename MeshType::CellType;
78 if (mesh->GetNumberOfPoints())
81 mesh->ClearFreePointAndCellIndexesLists();
85 int expectedNumPts = 25;
86 int expectedNumCells = 16;
87 int simpleSquareCells[64] = { 0, 1, 6, 5, 1, 2, 7, 6, 2, 3, 8, 7, 3, 4, 9, 8, 5, 6, 11, 10, 6, 7,
88 12, 11, 7, 8, 13, 12, 8, 9, 14, 13, 10, 11, 16, 15, 11, 12, 17, 16, 12, 13, 18, 17,
89 13, 14, 19, 18, 15, 16, 21, 20, 16, 17, 22, 21, 17, 18, 23, 22, 18, 19, 24, 23 };
93 std::vector<PointType> pts = GeneratePointCoordinates<MeshType>(5);
95 for (
int i = 0; i < expectedNumPts; ++i)
97 mesh->SetPoint(i, pts[i]);
100 typename CellType::CellAutoPointer cellpointer;
101 QEPolygonCellType * poly;
103 for (
int i = 0; i < expectedNumCells; ++i)
105 poly =
new QEPolygonCellType(4);
106 cellpointer.TakeOwnership(poly);
107 cellpointer->SetPointId(0, simpleSquareCells[4 * i]);
108 cellpointer->SetPointId(1, simpleSquareCells[4 * i + 1]);
109 cellpointer->SetPointId(2, simpleSquareCells[4 * i + 2]);
110 cellpointer->SetPointId(3, simpleSquareCells[4 * i + 3]);
111 mesh->SetCell(i, cellpointer);
116template <
typename TMesh>
120 using MeshType = TMesh;
121 using CellType =
typename MeshType::CellType;
125 if (mesh->GetNumberOfPoints())
128 mesh->ClearFreePointAndCellIndexesLists();
132 int expectedNumPts = 25;
133 int expectedNumCells = 32;
134 int simpleSquareCells[96] = { 0, 1, 6, 0, 6, 5, 1, 2, 7, 1, 7, 6, 2, 3, 8, 2, 8, 7, 3, 4,
135 9, 3, 9, 8, 5, 6, 11, 5, 11, 10, 6, 7, 12, 6, 12, 11, 7, 8, 13, 7,
136 13, 12, 8, 9, 14, 8, 14, 13, 10, 11, 16, 10, 16, 15, 11, 12, 17, 11, 17, 16,
137 12, 13, 18, 12, 18, 17, 13, 14, 19, 13, 19, 18, 15, 16, 21, 15, 21, 20, 16, 17,
138 22, 16, 22, 21, 17, 18, 23, 17, 23, 22, 18, 19, 24, 18, 24, 23 };
141 std::vector<PointType> pts = GeneratePointCoordinates<TMesh>(5);
143 for (
int i = 0; i < expectedNumPts; ++i)
145 mesh->SetPoint(i, pts[i]);
148 typename CellType::CellAutoPointer cellpointer;
149 QEPolygonCellType * poly;
151 for (
int i = 0; i < expectedNumCells; ++i)
153 poly =
new QEPolygonCellType(3);
154 cellpointer.TakeOwnership(poly);
155 cellpointer->SetPointId(0, simpleSquareCells[3 * i]);
156 cellpointer->SetPointId(1, simpleSquareCells[3 * i + 1]);
157 cellpointer->SetPointId(2, simpleSquareCells[3 * i + 2]);
158 mesh->SetCell(i, cellpointer);
163template <
typename TMesh>
167 using MeshType = TMesh;
168 using CellType =
typename MeshType::CellType;
172 if (mesh->GetNumberOfPoints())
175 mesh->ClearFreePointAndCellIndexesLists();
179 int expectedNumPts = 4;
180 int expectedNumCells = 4;
181 int simpleSquareCells[12] = { 0, 1, 2, 1, 0, 3, 1, 3, 2, 2, 3, 0 };
184 std::vector<PointType> pts(4);
199 for (i = 0; i < expectedNumPts; ++i)
201 mesh->SetPoint(i, pts[i]);
204 typename CellType::CellAutoPointer cellpointer;
205 QEPolygonCellType * poly;
207 for (i = 0; i < expectedNumCells; ++i)
209 poly =
new QEPolygonCellType(3);
210 cellpointer.TakeOwnership(poly);
211 cellpointer->SetPointId(0, simpleSquareCells[3 * i]);
212 cellpointer->SetPointId(1, simpleSquareCells[3 * i + 1]);
213 cellpointer->SetPointId(2, simpleSquareCells[3 * i + 2]);
214 mesh->SetCell(i, cellpointer);
220template <
typename TMesh>
224 using MeshType = TMesh;
225 using CellType =
typename MeshType::CellType;
229 if (mesh->GetNumberOfPoints())
232 mesh->ClearFreePointAndCellIndexesLists();
236 int expectedNumPts = 3;
237 int expectedNumCells = 2;
238 int simpleSquareCells[6] = { 0, 1, 2, 1, 0, 2 };
241 std::vector<PointType> pts(3);
253 for (i = 0; i < expectedNumPts; ++i)
255 mesh->SetPoint(i, pts[i]);
258 typename CellType::CellAutoPointer cellpointer;
259 QEPolygonCellType * poly;
261 for (i = 0; i < expectedNumCells; ++i)
263 poly =
new QEPolygonCellType(3);
264 cellpointer.TakeOwnership(poly);
265 cellpointer->SetPointId(0, simpleSquareCells[3 * i]);
266 cellpointer->SetPointId(1, simpleSquareCells[3 * i + 1]);
267 cellpointer->SetPointId(2, simpleSquareCells[3 * i + 2]);
268 mesh->SetCell(i, cellpointer);
Make some basic checks in order to verify that the considered mesh is not degenerated and correctly r...
SmartPointer< Self > Pointer
void CreateSamosa(typename TMesh::Pointer mesh)
bool AssertTopologicalInvariants(TMesh *mesh, IdentifierType NumVertices, IdentifierType NumFaces, IdentifierType NumEdges, IdentifierType NumBorders, IdentifierType Genus)
void CreateSquareQuadMesh(typename TMesh::Pointer mesh)
std::vector< typename TMesh::PointType > GeneratePointCoordinates(const unsigned int iN)
void CreateTetraedronMesh(typename TMesh::Pointer mesh)
unsigned long IdentifierType
void CreateSquareTriangularMesh(typename TMesh::Pointer mesh)
ImageBaseType::PointType PointType