18 #ifndef itkQuadEdgeMesh_h
19 #define itkQuadEdgeMesh_h
50 template <
typename TPixel,
51 unsigned int VDimension,
52 typename TTraits = QuadEdgeMeshTraits<TPixel, VDimension, bool, bool>>
69 static constexpr
unsigned int PointDimension = Traits::PointDimension;
70 static constexpr
unsigned int MaxTopologicalDimension = Traits::MaxTopologicalDimension;
73 using typename Superclass::CellPixelType;
74 using typename Superclass::CoordRepType;
75 using typename Superclass::PointIdentifier;
76 using typename Superclass::PointHashType;
78 using typename Superclass::CellTraits;
84 using typename Superclass::PointsContainer;
85 using typename Superclass::PointsContainerPointer;
89 using typename Superclass::PointDataContainer;
90 using typename Superclass::PointDataContainerPointer;
91 using typename Superclass::PointDataContainerIterator;
92 using typename Superclass::PointsContainerConstIterator;
93 using typename Superclass::PointsContainerIterator;
96 using typename Superclass::CellIdentifier;
97 using typename Superclass::CellType;
98 using typename Superclass::CellAutoPointer;
99 using typename Superclass::CellFeatureIdentifier;
100 using typename Superclass::CellFeatureCount;
101 using typename Superclass::CellMultiVisitorType;
102 using typename Superclass::CellsContainer;
103 using typename Superclass::CellsContainerPointer;
105 using typename Superclass::CellsContainerConstIterator;
106 using typename Superclass::CellsContainerIterator;
108 using typename Superclass::CellLinksContainer;
109 using typename Superclass::CellLinksContainerPointer;
110 using typename Superclass::CellLinksContainerIterator;
113 using typename Superclass::CellDataContainer;
114 using typename Superclass::CellDataContainerPointer;
115 using typename Superclass::CellDataContainerIterator;
118 using typename Superclass::PointCellLinksContainer;
119 using typename Superclass::PointCellLinksContainerIterator;
122 using typename Superclass::BoundaryAssignmentsContainer;
123 using typename Superclass::BoundaryAssignmentsContainerPointer;
124 using typename Superclass::BoundaryAssignmentsContainerVector;
127 using typename Superclass::BoundingBoxPointer;
128 using typename Superclass::BoundingBoxType;
130 using typename Superclass::InterpolationWeightType;
137 using QEType =
typename Traits::QEPrimal;
171 #if !defined(ITK_WRAPPING_PARSER)
185 Initialize()
override;
194 return m_EdgeCellsContainer;
196 const CellsContainer *
199 return m_EdgeCellsContainer;
204 m_EdgeCellsContainer = edgeCells;
209 m_EdgeCellsContainer->InsertElement(cellId, cellPointer.ReleaseOwnership());
236 #if !defined(ITK_WRAPPING_PARSER)
247 BoundaryAssignmentsContainerPointer
256 const BoundaryAssignmentsContainerPointer
326 std::set<CellIdentifier> * cellSet)
360 SetCell(CellIdentifier cId, CellAutoPointer & cell);
363 virtual PointIdentifier
364 FindFirstUnusedPointIndex();
366 virtual CellIdentifier
367 FindFirstUnusedCellIndex();
370 PushOnContainer(EdgeCellType * newEdge);
373 virtual PointIdentifier
378 AddEdge(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
381 AddEdgeWithSecurePointList(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
385 AddFace(QEPrimal * entry);
392 AddFace(
const PointIdList & points);
395 AddFaceWithSecurePointList(
const PointIdList & points);
398 AddFaceWithSecurePointList(
const PointIdList & points,
bool CheckEdges);
402 AddFaceTriangle(
const PointIdentifier & aPid,
const PointIdentifier & bPid,
const PointIdentifier & cPid);
406 DeletePoint(
const PointIdentifier & pid);
409 DeleteEdge(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
412 DeleteEdge(QEPrimal *
e);
415 LightWeightDeleteEdge(EdgeCellType * edgeCell);
418 LightWeightDeleteEdge(QEPrimal *
e);
421 DeleteFace(FaceRefType faceToDelete);
427 return (Superclass::GetPoint(pid, pt));
431 GetPoint(
const PointIdentifier & pid)
const;
434 GetVector(
const PointIdentifier & pid)
const;
440 GetEdge(
const CellIdentifier & eid)
const;
443 FindEdge(
const PointIdentifier & pid0)
const;
446 FindEdge(
const PointIdentifier & pid0,
const PointIdentifier & pid1)
const;
448 virtual EdgeCellType *
449 FindEdgeCell(
const PointIdentifier & pid0,
const PointIdentifier & pid1)
const;
453 ComputeEdgeLength(QEPrimal *
e);
456 ComputeNumberOfPoints()
const;
459 ComputeNumberOfFaces()
const;
462 ComputeNumberOfEdges()
const;
465 Splice(QEPrimal * a, QEPrimal * b);
467 #ifdef ITK_USE_CONCEPT_CHECKING
476 while (!this->m_FreePointIndexes.empty())
478 this->m_FreePointIndexes.pop();
480 while (!this->m_FreeCellIndexes.empty())
482 this->m_FreeCellIndexes.pop();
489 return (m_NumberOfFaces);
494 return (m_NumberOfEdges);
505 ClearCellsContainer();
519 #ifndef ITK_MANUAL_INSTANTIATION
520 # include "itkQuadEdgeMesh.hxx"