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 CoordinateType =
typename PointType::CoordinateType;
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<CoordinateType
>(j);
60 oPt[i * iN + j][1] =
static_cast<CoordinateType
>(i);
61 oPt[i * iN + j][2] =
static_cast<CoordinateType
>(0.);
69template <
typename TMesh>
73 using MeshType = TMesh;
74 using CellType =
typename MeshType::CellType;
78 if (mesh->GetNumberOfPoints())
81 mesh->ClearFreePointAndCellIndexesLists();
85 constexpr int expectedNumPts = 25;
86 constexpr int expectedNumCells = 16;
87 const int simpleSquareCells[64] = { 0, 1, 6, 5, 1, 2, 7, 6, 2, 3, 8, 7, 3, 4, 9, 8,
88 5, 6, 11, 10, 6, 7, 12, 11, 7, 8, 13, 12, 8, 9, 14, 13,
89 10, 11, 16, 15, 11, 12, 17, 16, 12, 13, 18, 17, 13, 14, 19, 18,
90 15, 16, 21, 20, 16, 17, 22, 21, 17, 18, 23, 22, 18, 19, 24, 23 };
94 std::vector<PointType> pts = GeneratePointCoordinates<MeshType>(5);
96 for (
int i = 0; i < expectedNumPts; ++i)
98 mesh->SetPoint(i, pts[i]);
101 typename CellType::CellAutoPointer cellpointer;
102 QEPolygonCellType * poly;
104 for (
int i = 0; i < expectedNumCells; ++i)
106 poly =
new QEPolygonCellType(4);
107 cellpointer.TakeOwnership(poly);
108 cellpointer->SetPointId(0, simpleSquareCells[4 * i]);
109 cellpointer->SetPointId(1, simpleSquareCells[4 * i + 1]);
110 cellpointer->SetPointId(2, simpleSquareCells[4 * i + 2]);
111 cellpointer->SetPointId(3, simpleSquareCells[4 * i + 3]);
112 mesh->SetCell(i, cellpointer);
117template <
typename TMesh>
121 using MeshType = TMesh;
122 using CellType =
typename MeshType::CellType;
126 if (mesh->GetNumberOfPoints())
129 mesh->ClearFreePointAndCellIndexesLists();
133 constexpr int expectedNumPts = 25;
134 constexpr int expectedNumCells = 32;
135 const int simpleSquareCells[96] = { 0, 1, 6, 0, 6, 5, 1, 2, 7, 1, 7, 6, 2, 3, 8, 2, 8, 7, 3, 4,
136 9, 3, 9, 8, 5, 6, 11, 5, 11, 10, 6, 7, 12, 6, 12, 11, 7, 8, 13, 7,
137 13, 12, 8, 9, 14, 8, 14, 13, 10, 11, 16, 10, 16, 15, 11, 12, 17, 11, 17, 16,
138 12, 13, 18, 12, 18, 17, 13, 14, 19, 13, 19, 18, 15, 16, 21, 15, 21, 20, 16, 17,
139 22, 16, 22, 21, 17, 18, 23, 17, 23, 22, 18, 19, 24, 18, 24, 23 };
142 std::vector<PointType> pts = GeneratePointCoordinates<TMesh>(5);
144 for (
int i = 0; i < expectedNumPts; ++i)
146 mesh->SetPoint(i, pts[i]);
149 typename CellType::CellAutoPointer cellpointer;
150 QEPolygonCellType * poly;
152 for (
int i = 0; i < expectedNumCells; ++i)
154 poly =
new QEPolygonCellType(3);
155 cellpointer.TakeOwnership(poly);
156 cellpointer->SetPointId(0, simpleSquareCells[3 * i]);
157 cellpointer->SetPointId(1, simpleSquareCells[3 * i + 1]);
158 cellpointer->SetPointId(2, simpleSquareCells[3 * i + 2]);
159 mesh->SetCell(i, cellpointer);
164template <
typename TMesh>
168 using MeshType = TMesh;
169 using CellType =
typename MeshType::CellType;
173 if (mesh->GetNumberOfPoints())
176 mesh->ClearFreePointAndCellIndexesLists();
180 constexpr int expectedNumPts = 4;
181 constexpr int expectedNumCells = 4;
182 const int simpleSquareCells[12] = { 0, 1, 2, 1, 0, 3, 1, 3, 2, 2, 3, 0 };
185 std::vector<PointType> pts(4);
201 for (
int i = 0; i < expectedNumPts; ++i)
203 mesh->SetPoint(i, pts[i]);
206 typename CellType::CellAutoPointer cellpointer;
208 for (
int i = 0; i < expectedNumCells; ++i)
210 QEPolygonCellType * poly =
new QEPolygonCellType(3);
211 cellpointer.TakeOwnership(poly);
212 cellpointer->SetPointId(0, simpleSquareCells[3 * i]);
213 cellpointer->SetPointId(1, simpleSquareCells[3 * i + 1]);
214 cellpointer->SetPointId(2, simpleSquareCells[3 * i + 2]);
215 mesh->SetCell(i, cellpointer);
221template <
typename TMesh>
225 using MeshType = TMesh;
226 using CellType =
typename MeshType::CellType;
230 if (mesh->GetNumberOfPoints())
233 mesh->ClearFreePointAndCellIndexesLists();
237 constexpr int expectedNumPts = 3;
238 constexpr int expectedNumCells = 2;
239 const int simpleSquareCells[6] = { 0, 1, 2, 1, 0, 2 };
242 std::vector<PointType> pts(3);
255 for (
int i = 0; i < expectedNumPts; ++i)
257 mesh->SetPoint(i, pts[i]);
260 typename CellType::CellAutoPointer cellpointer;
261 for (
int i = 0; i < expectedNumCells; ++i)
263 QEPolygonCellType * 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