int
main(int, char *[])
{
using PixelType = float;
using CellType = MeshType::CellType;
MeshType::Pointer mesh = MeshType::New();
point0[0] = -1;
point0[1] = -1;
point0[2] = -1;
point1[0] = 1;
point1[1] = 1;
point1[2] = -1;
point2[0] = 1;
point2[1] = -1;
point2[2] = 1;
point3[0] = -1;
point3[1] = 1;
point3[2] = 1;
mesh->SetPoint(0, point0);
mesh->SetPoint(1, point1);
mesh->SetPoint(2, point2);
mesh->SetPoint(3, point3);
CellType::CellAutoPointer cellpointer;
cellpointer.TakeOwnership(new TetrahedronType);
cellpointer->SetPointId(0, 0);
cellpointer->SetPointId(1, 1);
cellpointer->SetPointId(2, 2);
cellpointer->SetPointId(3, 3);
mesh->SetCell(0, cellpointer);
cellpointer.TakeOwnership(new TriangleType);
cellpointer->SetPointId(0, 0);
cellpointer->SetPointId(1, 1);
cellpointer->SetPointId(2, 2);
mesh->SetCell(1, cellpointer);
cellpointer.TakeOwnership(new TriangleType);
cellpointer->SetPointId(0, 0);
cellpointer->SetPointId(1, 2);
cellpointer->SetPointId(2, 3);
mesh->SetCell(2, cellpointer);
cellpointer.TakeOwnership(new TriangleType);
cellpointer->SetPointId(0, 0);
cellpointer->SetPointId(1, 3);
cellpointer->SetPointId(2, 1);
mesh->SetCell(3, cellpointer);
cellpointer.TakeOwnership(new TriangleType);
cellpointer->SetPointId(0, 3);
cellpointer->SetPointId(1, 2);
cellpointer->SetPointId(2, 1);
mesh->SetCell(4, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 0);
cellpointer->SetPointId(1, 1);
mesh->SetCell(5, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 1);
cellpointer->SetPointId(1, 2);
mesh->SetCell(6, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 2);
cellpointer->SetPointId(1, 0);
mesh->SetCell(7, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 1);
cellpointer->SetPointId(1, 3);
mesh->SetCell(8, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 3);
cellpointer->SetPointId(1, 2);
mesh->SetCell(9, cellpointer);
cellpointer.TakeOwnership(new LineType);
cellpointer->SetPointId(0, 3);
cellpointer->SetPointId(1, 0);
mesh->SetCell(10, cellpointer);
cellpointer.TakeOwnership(new VertexType);
cellpointer->SetPointId(0, 0);
mesh->SetCell(11, cellpointer);
cellpointer.TakeOwnership(new VertexType);
cellpointer->SetPointId(0, 1);
mesh->SetCell(12, cellpointer);
cellpointer.TakeOwnership(new VertexType);
cellpointer->SetPointId(0, 2);
mesh->SetCell(13, cellpointer);
cellpointer.TakeOwnership(new VertexType);
cellpointer->SetPointId(0, 3);
mesh->SetCell(14, cellpointer);
std::cout << "# Points= " << mesh->GetNumberOfPoints() << std::endl;
std::cout << "# Cell = " << mesh->GetNumberOfCells() << std::endl;
using PointIterator = MeshType::PointsContainer::ConstIterator;
PointIterator pointIterator = mesh->GetPoints()->
Begin();
PointIterator pointEnd = mesh->GetPoints()->End();
while (pointIterator != pointEnd)
{
std::cout << pointIterator.Value() << std::endl;
++pointIterator;
}
using CellIterator = MeshType::CellsContainer::ConstIterator;
CellIterator cellIterator = mesh->GetCells()->Begin();
CellIterator cellEnd = mesh->GetCells()->End();
while (cellIterator != cellEnd)
{
CellType * cell = cellIterator.Value();
std::cout << cell->GetNumberOfPoints() << std::endl;
++cellIterator;
}
cellIterator = mesh->GetCells()->Begin();
cellEnd = mesh->GetCells()->End();
while (cellIterator != cellEnd)
{
CellType * cell = cellIterator.Value();
std::cout << "cell with " << cell->GetNumberOfPoints();
std::cout << " points " << std::endl;
using PointIdIterator = CellType::PointIdIterator;
PointIdIterator pointIditer = cell->PointIdsBegin();
PointIdIterator pointIdend = cell->PointIdsEnd();
while (pointIditer != pointIdend)
{
std::cout << *pointIditer << std::endl;
++pointIditer;
}
++cellIterator;
}
MeshType::CellIdentifier cellId = 0;
int dimension = 0;
MeshType::CellFeatureIdentifier featureId = 0;
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 11);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 12);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 13);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 14);
cellId = 0;
dimension = 1;
featureId = 0;
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 5);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 6);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 7);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 8);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 9);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 10);
cellId = 0;
dimension = 2;
featureId = 0;
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 1);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 2);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 3);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 4);
cellId = 0;
MeshType::CellFeatureCount n0;
MeshType::CellFeatureCount n1;
MeshType::CellFeatureCount n2;
n0 = mesh->GetNumberOfCellBoundaryFeatures(0, cellId);
n1 = mesh->GetNumberOfCellBoundaryFeatures(1, cellId);
n2 = mesh->GetNumberOfCellBoundaryFeatures(2, cellId);
std::cout << "Number of boundary features of the cellId= " << cellId
<< std::endl;
std::cout << "Dimension 0 = " << n0 << std::endl;
std::cout << "Dimension 1 = " << n1 << std::endl;
std::cout << "Dimension 2 = " << n2 << std::endl;
std::cout << "Boundary features of dimension 0 " << std::endl;
dimension = 0;
for (unsigned int b0 = 0; b0 < n0; b0++)
{
MeshType::CellIdentifier id;
bool found = mesh->GetBoundaryAssignment(dimension, cellId, b0, &id);
if (found)
std::cout << id << std::endl;
}
dimension = 1;
std::cout << "Boundary features of dimension " << dimension << std::endl;
for (unsigned int b1 = 0; b1 < n1; b1++)
{
MeshType::CellIdentifier id;
bool found = mesh->GetBoundaryAssignment(dimension, cellId, b1, &id);
if (found)
{
std::cout << id << std::endl;
}
}
dimension = 2;
std::cout << "Boundary features of dimension " << dimension << std::endl;
for (unsigned int b2 = 0; b2 < n2; b2++)
{
MeshType::CellIdentifier id;
bool found = mesh->GetBoundaryAssignment(dimension, cellId, b2, &id);
if (found)
{
std::cout << id << std::endl;
}
}
cellId = 2;
dimension = 1;
featureId = 0;
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 7);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 9);
mesh->SetBoundaryAssignment(dimension, cellId, featureId++, 10);
std::cout << "In cell Id = " << cellId << std::endl;
std::cout << "Boundary features of dimension " << dimension;
n1 = mesh->GetNumberOfCellBoundaryFeatures(dimension, cellId);
std::cout << " = " << n1 << std::endl;
for (unsigned int b1 = 0; b1 < n1; b1++)
{
MeshType::CellIdentifier id;
bool found = mesh->GetBoundaryAssignment(dimension, cellId, b1, &id);
if (found)
{
std::cout << id << std::endl;
}
}
return EXIT_SUCCESS;
}