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;
155 #ifndef ITK_FUTURE_LEGACY_REMOVE
156 using EdgeListPointerType [[deprecated(
"Please just use `EdgeListType *` instead!")]] =
EdgeListType *;
172 #if !defined(ITK_WRAPPING_PARSER)
186 Initialize()
override;
195 return m_EdgeCellsContainer;
197 const CellsContainer *
200 return m_EdgeCellsContainer;
205 m_EdgeCellsContainer = edgeCells;
210 m_EdgeCellsContainer->InsertElement(cellId, cellPointer.ReleaseOwnership());
234 #if !defined(ITK_WRAPPING_PARSER)
241 BoundaryAssignmentsContainerPointer
248 const BoundaryAssignmentsContainerPointer
298 std::set<CellIdentifier> * itkNotUsed(cellSet))
323 SetCell(CellIdentifier cId, CellAutoPointer & cell);
326 virtual PointIdentifier
327 FindFirstUnusedPointIndex();
329 virtual CellIdentifier
330 FindFirstUnusedCellIndex();
333 PushOnContainer(EdgeCellType * newEdge);
336 virtual PointIdentifier
341 AddEdge(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
344 AddEdgeWithSecurePointList(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
348 AddFace(QEPrimal * entry);
355 AddFace(
const PointIdList & points);
358 AddFaceWithSecurePointList(
const PointIdList & points);
361 AddFaceWithSecurePointList(
const PointIdList & points,
bool CheckEdges);
365 AddFaceTriangle(
const PointIdentifier & aPid,
const PointIdentifier & bPid,
const PointIdentifier & cPid);
369 DeletePoint(
const PointIdentifier & pid);
372 DeleteEdge(
const PointIdentifier & orgPid,
const PointIdentifier & destPid);
375 DeleteEdge(QEPrimal *
e);
378 LightWeightDeleteEdge(EdgeCellType * edgeCell);
381 LightWeightDeleteEdge(QEPrimal *
e);
384 DeleteFace(FaceRefType faceToDelete);
390 return (Superclass::GetPoint(pid, pt));
394 GetPoint(
const PointIdentifier & pid)
const;
397 GetVector(
const PointIdentifier & pid)
const;
403 GetEdge(
const CellIdentifier & eid)
const;
406 FindEdge(
const PointIdentifier & pid0)
const;
409 FindEdge(
const PointIdentifier & pid0,
const PointIdentifier & pid1)
const;
411 virtual EdgeCellType *
412 FindEdgeCell(
const PointIdentifier & pid0,
const PointIdentifier & pid1)
const;
416 ComputeEdgeLength(QEPrimal *
e);
419 ComputeNumberOfPoints()
const;
422 ComputeNumberOfFaces()
const;
425 ComputeNumberOfEdges()
const;
428 Splice(QEPrimal * a, QEPrimal * b);
430 #ifdef ITK_USE_CONCEPT_CHECKING
439 while (!this->m_FreePointIndexes.empty())
441 this->m_FreePointIndexes.pop();
443 while (!this->m_FreeCellIndexes.empty())
445 this->m_FreeCellIndexes.pop();
452 return (m_NumberOfFaces);
457 return (m_NumberOfEdges);
468 ClearCellsContainer();
470 CellsContainerPointer m_EdgeCellsContainer{};
482 #ifndef ITK_MANUAL_INSTANTIATION
483 # include "itkQuadEdgeMesh.hxx"