ITK
4.4.0
Insight Segmentation and Registration Toolkit
|
#include <itkAutomaticTopologyMeshSource.h>
Convenience class for generating meshes.
This generates an N-dimensional mesh consisting of some combination of vertices, line segments, triangles, quadrilaterals, tetrahedra, and hexahedra. Identifiers for the cells are automatically added, and topological connectivity is automatically computed. When a cell is added, all of its boundary features are determined and added as well.
The main methods are of the form AddThing, where Thing can be Point, Vertex, Triangle, Quadrilateral, Tetrahedron, or Hexahedron. Each of these methods has several overloaded forms, permitting multiple ways to specify the object being added. When called, each of these methods first checks to see if the object has already been added. If it has not, then a new identifier is generated (the smallest one so far unused), the object is added with that identifier, and the ID is returned. If the object has already been added, then the ID it already has is returned and nothing else is done.
When a cell is added, all of its boundary elements are also added, and boundary assignments are set. A cell can be specified using IDs of points already added, or using Point objects that may or may not already be in the mesh. If a cell is specified using Point objects, then the points are added to the mesh if necessary.
The different ways of specifying a cell are
this->AddLine(0, 1)
, if 0 and 1 are point identifiers). For meshes generated using this filter, only one cell can be added for any given set of vertices. If a, b, c, and d are identifiers for four points in R^3, then (a, b, c, d) and (a, c, d, b) determine two different quadrilaterals (at least one of which is either degenerate or nonplanar). If you call
then only the first quadrilateral will actually be added.
To add the topological information to an already constructed mesh (for efficiency of traversal), use this class to generate a copy of the original mesh.
Example: The following code generates a mesh consisting of two triangles sharing an edge.
This class inherits from itk::MeshSource so it fits conveniently into a pipeline, but GetOutput() is always valid after every Add[Something]() call, and Update() is a no-op. It is not thread safe.
Definition at line 111 of file itkAutomaticTopologyMeshSource.h.
Classes | |
class | IdentifierArrayEqualsFunction |
class | IdentifierArrayHashFunction |
Static Public Member Functions | |
static Pointer | New () |
Static Public Member Functions inherited from itk::MeshSource< TOutputMesh > | |
static Pointer | New () |
Public Attributes | |
typedef::itk::HexahedronCell < CellType > | HexahedronCell |
typedef::itk::LineCell< CellType > | LineCell |
typedef::itk::QuadrilateralCell < CellType > | QuadrilateralCell |
typedef::itk::TetrahedronCell < CellType > | TetrahedronCell |
typedef::itk::TriangleCell < CellType > | TriangleCell |
typedef::itk::VertexCell < CellType > | VertexCell |
Static Public Attributes | |
static const unsigned int | PointDimension = MeshType::PointDimension |
static const unsigned int | MaxTopologicalDimension = MeshType::MaxTopologicalDimension |
Private Types | |
typedef itksys::hash_map < Array< IdentifierType > , IdentifierType, IdentifierArrayHashFunction, IdentifierArrayEqualsFunction > | CellHashMap |
Private Member Functions | |
AutomaticTopologyMeshSource (const Self &) | |
void | operator= (const Self &) |
Private Attributes | |
CellHashMap | m_CellsHashTable |
MeshPointer | m_OutputMesh |
PointHashMap | m_PointsHashTable |
Additional Inherited Members | |
Protected Types inherited from itk::LightObject | |
typedef int | InternalReferenceCountType |
Protected Attributes inherited from itk::ProcessObject | |
TimeStamp | m_OutputInformationMTime |
bool | m_Updating |
typedef CellType::CellAutoPointer itk::AutomaticTopologyMeshSource< TOutputMesh >::CellAutoPointer |
Definition at line 127 of file itkAutomaticTopologyMeshSource.h.
|
private |
Definition at line 399 of file itkAutomaticTopologyMeshSource.h.
typedef MeshType::CellType itk::AutomaticTopologyMeshSource< TOutputMesh >::CellType |
Definition at line 124 of file itkAutomaticTopologyMeshSource.h.
typedef SmartPointer< const Self > itk::AutomaticTopologyMeshSource< TOutputMesh >::ConstPointer |
Definition at line 118 of file itkAutomaticTopologyMeshSource.h.
typedef PointType::CoordRepType itk::AutomaticTopologyMeshSource< TOutputMesh >::CoordinateType |
Definition at line 126 of file itkAutomaticTopologyMeshSource.h.
typedef Array< IdentifierType > itk::AutomaticTopologyMeshSource< TOutputMesh >::IdentifierArrayType |
Array of IdentifierType objects used to specify cells.
Definition at line 142 of file itkAutomaticTopologyMeshSource.h.
typedef ::itk::IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::IdentifierType |
This class requires that the mesh being built use itk::IdentifierType as the identifier type for all its elements.
Definition at line 139 of file itkAutomaticTopologyMeshSource.h.
typedef MeshType::Pointer itk::AutomaticTopologyMeshSource< TOutputMesh >::MeshPointer |
Definition at line 125 of file itkAutomaticTopologyMeshSource.h.
typedef TOutputMesh itk::AutomaticTopologyMeshSource< TOutputMesh >::MeshType |
Hold on to the type information specified by the template parameters.
Definition at line 121 of file itkAutomaticTopologyMeshSource.h.
typedef SmartPointer< Self > itk::AutomaticTopologyMeshSource< TOutputMesh >::Pointer |
Definition at line 117 of file itkAutomaticTopologyMeshSource.h.
typedef itksys::hash_map< PointType, IdentifierType, StructHashFunction< PointHashType > > itk::AutomaticTopologyMeshSource< TOutputMesh >::PointHashMap |
hash_map typedefs.
Definition at line 149 of file itkAutomaticTopologyMeshSource.h.
typedef MeshType::PointHashType itk::AutomaticTopologyMeshSource< TOutputMesh >::PointHashType |
Definition at line 122 of file itkAutomaticTopologyMeshSource.h.
typedef MeshType::PointType itk::AutomaticTopologyMeshSource< TOutputMesh >::PointType |
Definition at line 123 of file itkAutomaticTopologyMeshSource.h.
typedef AutomaticTopologyMeshSource itk::AutomaticTopologyMeshSource< TOutputMesh >::Self |
Standard "Self" typedef.
Definition at line 115 of file itkAutomaticTopologyMeshSource.h.
typedef MeshSource< TOutputMesh > itk::AutomaticTopologyMeshSource< TOutputMesh >::Superclass |
Definition at line 116 of file itkAutomaticTopologyMeshSource.h.
|
protected |
|
protected |
|
private |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddHexahedron | ( | const IdentifierArrayType & | pointIds | ) |
Add the hexahedron specified by the four points, and return its ID. If the points are p0, p1, p2, and p3, then the following additional cells (represented here as ordered tuples) are created (if they don't already exist) and associated as boundaries, in the order given:
Vertices: (p0), (p1), (p2), (p3), (p4), (p5), (p6), (p7).
Lines: (p0, p1), (p2, p3), (p4, p5), (p6, p7), (p0, p2), (p1, p3), (p4, p6), (p5, p7), (p0, p4), (p1, p5), (p2, p6), (p3, p7).
Quadrilaterals: (0, 1, 2, 3), (4, 5, 6, 7), (0, 1, 4, 5), (2, 3, 6, 7), (0, 2, 4, 6), (1, 3, 5, 7),
In particular, if the points are connected topologically as follows
p4------------p5 | \ / | | p0------p1 | | | | | | | | | | p2------p3 | | / \ | p6------------p7
then you would call, for instance, meshSource->AddQuadrilateral(p0, p1, p2, p3, p4, p5, p6, p7)
.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddHexahedron | ( | IdentifierType | pointId0, |
IdentifierType | pointId1, | ||
IdentifierType | pointId2, | ||
IdentifierType | pointId3, | ||
IdentifierType | pointId4, | ||
IdentifierType | pointId5, | ||
IdentifierType | pointId6, | ||
IdentifierType | pointId7 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddHexahedron | ( | const PointType & | p0, |
const PointType & | p1, | ||
const PointType & | p2, | ||
const PointType & | p3, | ||
const PointType & | p4, | ||
const PointType & | p5, | ||
const PointType & | p6, | ||
const PointType & | p7 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddHexahedron | ( | const CoordinateType * | p0, |
const CoordinateType * | p1, | ||
const CoordinateType * | p2, | ||
const CoordinateType * | p3, | ||
const CoordinateType * | p4, | ||
const CoordinateType * | p5, | ||
const CoordinateType * | p6, | ||
const CoordinateType * | p7 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddLine | ( | const IdentifierArrayType & | pointIds | ) |
Add the line specified by the two points, and return its ID. The endpoints and their associated vertices are associated to the line in the order that they are specified the first time the function is called.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddLine | ( | IdentifierType | pointId0, |
IdentifierType | pointId1 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddLine | ( | const PointType & | p0, |
const PointType & | p1 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddLine | ( | const CoordinateType * | p0, |
const CoordinateType * | p1 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddPoint | ( | const PointType & | p0 | ) |
Add the point p0 if it's not already there, and return its ID.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddPoint | ( | const CoordinateType * | p0 | ) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddPoint | ( | CoordinateType | x0 = 0 , |
CoordinateType | x1 = 0 , |
||
CoordinateType | x2 = 0 , |
||
CoordinateType | x3 = 0 , |
||
CoordinateType | x4 = 0 , |
||
CoordinateType | x5 = 0 |
||
) |
Add the point with coordinates (x0, ..., xN) where N = PointDimension - 1. If N < 5, then any parameters after xN are ignored. If PointDimension > 6, then a point is generated with the first six coordinates equal to x0, ..., x5, and the rest set to 0.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddQuadrilateral | ( | const IdentifierArrayType & | pointIds | ) |
Add the quadrilateral specified by the four points, and return its ID. If the points are p0, p1, p2, and p3, then the following additional cells (represented here as ordered tuples) are created (if they don't already exist) and associated as boundaries, in the order given:
Vertices: (p0), (p1), (p2), (p3).
Lines: (p0, p1), (p2, p3), (p0, p2), (p1, p3).
In particular, if the points are arranged geometrically as follows
p0 p1 p2 p3
then you would call, for instance, meshSource->AddQuadrilateral(p0, p1, p2, p3)
.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddQuadrilateral | ( | IdentifierType | pointId0, |
IdentifierType | pointId1, | ||
IdentifierType | pointId2, | ||
IdentifierType | pointId3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddQuadrilateral | ( | const PointType & | p0, |
const PointType & | p1, | ||
const PointType & | p2, | ||
const PointType & | p3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddQuadrilateral | ( | const CoordinateType * | p0, |
const CoordinateType * | p1, | ||
const CoordinateType * | p2, | ||
const CoordinateType * | p3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTetrahedron | ( | const IdentifierArrayType & | pointIds | ) |
Add the tetrahedron specified by the three points, and return its ID. If the points are p0, p1, and p2, then the following additional cells (represented here as ordered tuples) are created (if they don't already exist) and associated as boundaries, in the order given:
Vertices: (p0), (p1), (p2), (p3).
Lines: (p0, p1), (p0, p2), (p0, p3), (p1, p2), (p1, p3), (p2, p3).
Triangles: (p0, p1, p2), (p0, p1, p3), (p0, p2, p3), (p1, p2, * p3).
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTetrahedron | ( | IdentifierType | pointId0, |
IdentifierType | pointId1, | ||
IdentifierType | pointId2, | ||
IdentifierType | pointId3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTetrahedron | ( | const PointType & | p0, |
const PointType & | p1, | ||
const PointType & | p2, | ||
const PointType & | p3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTetrahedron | ( | const CoordinateType * | p0, |
const CoordinateType * | p1, | ||
const CoordinateType * | p2, | ||
const CoordinateType * | p3 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTriangle | ( | const IdentifierArrayType & | pointIds | ) |
Add the triangle specified by the three points, and return its ID. If the points are p0, p1, and p2, then the following additional cells (represented here as ordered tuples) are created (if they don't already exist) and associated as boundaries, in the order given:
Vertices: (p0), (p1), (p2).
Lines: (p0, p1), (p1, p2), (p2, p0).
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTriangle | ( | IdentifierType | pointId0, |
IdentifierType | pointId1, | ||
IdentifierType | pointId2 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTriangle | ( | const PointType & | p0, |
const PointType & | p1, | ||
const PointType & | p2 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddTriangle | ( | const CoordinateType * | p0, |
const CoordinateType * | p1, | ||
const CoordinateType * | p2 | ||
) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddVertex | ( | const IdentifierArrayType & | pointIds | ) |
Add a vertex located at the given point, and return its ID.
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddVertex | ( | IdentifierType | pointId0 | ) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddVertex | ( | const PointType & | p0 | ) |
IdentifierType itk::AutomaticTopologyMeshSource< TOutputMesh >::AddVertex | ( | const CoordinateType * | p0 | ) |
|
virtual |
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::Object.
|
inlineprotectedvirtual |
This method causes the filter to generate its output.
Reimplemented from itk::ProcessObject.
Definition at line 388 of file itkAutomaticTopologyMeshSource.h.
|
virtual |
Run-time type information (and related methods).
Reimplemented from itk::MeshSource< TOutputMesh >.
|
static |
Method for creation through the object factory.
|
private |
typedef::itk::HexahedronCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::HexahedronCell |
Definition at line 135 of file itkAutomaticTopologyMeshSource.h.
typedef::itk::LineCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::LineCell |
Definition at line 131 of file itkAutomaticTopologyMeshSource.h.
|
private |
Definition at line 402 of file itkAutomaticTopologyMeshSource.h.
|
private |
Definition at line 403 of file itkAutomaticTopologyMeshSource.h.
|
private |
Definition at line 401 of file itkAutomaticTopologyMeshSource.h.
|
static |
The dimension of the output mesh.
Definition at line 155 of file itkAutomaticTopologyMeshSource.h.
|
static |
The dimension of the output mesh.
Definition at line 153 of file itkAutomaticTopologyMeshSource.h.
typedef::itk::QuadrilateralCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::QuadrilateralCell |
Definition at line 133 of file itkAutomaticTopologyMeshSource.h.
typedef::itk::TetrahedronCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::TetrahedronCell |
Definition at line 134 of file itkAutomaticTopologyMeshSource.h.
typedef::itk::TriangleCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::TriangleCell |
Definition at line 132 of file itkAutomaticTopologyMeshSource.h.
typedef::itk::VertexCell< CellType > itk::AutomaticTopologyMeshSource< TOutputMesh >::VertexCell |
Different kinds of cells.
Definition at line 130 of file itkAutomaticTopologyMeshSource.h.