22#include "ITKQuadEdgeMeshExport.h"
30#define itkQEDebugMacro(x) \
32 std::ostringstream itkmsg; \
33 itkmsg << "Debug: In " __FILE__ ", line " << __LINE__ << '\n' << " (" << this << "): " x << "\n\n"; \
34 OutputWindowDisplayDebugText(itkmsg.str().c_str()); \
36 ITK_MACROEND_NOOP_STATEMENT
37#define itkQEWarningMacro(x) \
39 std::ostringstream itkmsg; \
40 itkmsg << "WARNING: In " __FILE__ ", line " << __LINE__ << '\n' << " (" << this << "): " x << "\n\n"; \
41 OutputWindowDisplayWarningText(itkmsg.str().c_str()); \
43 ITK_MACROEND_NOOP_STATEMENT
55#define itkQEAccessorsMacro(st, pt, dt) \
56 pt * GetOnext() { return (dynamic_cast<pt *>(this->st::GetOnext())); } \
58 dt * GetRot() { return (dynamic_cast<dt *>(this->st::GetRot())); } \
60 pt * GetSym() { return (dynamic_cast<pt *>(this->st::GetSym())); } \
62 pt * GetLnext() { return (dynamic_cast<pt *>(this->st::GetLnext())); } \
64 pt * GetRnext() { return (dynamic_cast<pt *>(this->st::GetRnext())); } \
66 pt * GetDnext() { return (dynamic_cast<pt *>(this->st::GetDnext())); } \
68 pt * GetOprev() { return (dynamic_cast<pt *>(this->st::GetOprev())); } \
70 pt * GetLprev() { return (dynamic_cast<pt *>(this->st::GetLprev())); } \
72 pt * GetRprev() { return (dynamic_cast<pt *>(this->st::GetRprev())); } \
74 pt * GetDprev() { return (dynamic_cast<pt *>(this->st::GetDprev())); } \
76 dt * GetInvRot() { return (dynamic_cast<dt *>(this->st::GetInvRot())); } \
78 pt * GetInvOnext() { return (dynamic_cast<pt *>(this->st::GetInvOnext())); } \
80 pt * GetInvLnext() { return (dynamic_cast<pt *>(this->st::GetInvLnext())); } \
82 pt * GetInvRnext() { return (dynamic_cast<pt *>(this->st::GetInvRnext())); } \
84 pt * GetInvDnext() { return (dynamic_cast<pt *>(this->st::GetInvDnext())); } \
85 const pt * GetOnext() const { return (dynamic_cast<const pt *>(this->st::GetOnext())); } \
87 const dt * GetRot() const { return (dynamic_cast<const dt *>(this->st::GetRot())); } \
89 const pt * GetSym() const { return (dynamic_cast<const pt *>(this->st::GetSym())); } \
91 const pt * GetLnext() const { return (dynamic_cast<const pt *>(this->st::GetLnext())); } \
93 const pt * GetRnext() const { return (dynamic_cast<const pt *>(this->st::GetRnext())); } \
95 const pt * GetDnext() const { return (dynamic_cast<const pt *>(this->st::GetDnext())); } \
97 const pt * GetOprev() const { return (dynamic_cast<const pt *>(this->st::GetOprev())); } \
99 const pt * GetLprev() const { return (dynamic_cast<const pt *>(this->st::GetLprev())); } \
101 const pt * GetRprev() const { return (dynamic_cast<const pt *>(this->st::GetRprev())); } \
103 const pt * GetDprev() const { return (dynamic_cast<const pt *>(this->st::GetDprev())); } \
105 const dt * GetInvRot() const { return (dynamic_cast<const dt *>(this->st::GetInvRot())); } \
107 const pt * GetInvOnext() const { return (dynamic_cast<const pt *>(this->st::GetInvOnext())); } \
109 const pt * GetInvLnext() const { return (dynamic_cast<const pt *>(this->st::GetInvLnext())); } \
111 const pt * GetInvRnext() const { return (dynamic_cast<const pt *>(this->st::GetInvRnext())); } \
113 const pt * GetInvDnext() const { return (dynamic_cast<const pt *>(this->st::GetInvDnext())); } \
115 ITK_MACROEND_NOOP_STATEMENT
177 this->m_Onext = onext;
192 return this->m_Onext;
202 return this->m_Onext;
232 Self * aNext = this->GetOnext();
240 this->SetOnext(bNext);
255 return (this->m_Rot->m_Rot);
257 return (this->m_Rot);
266 return (this->m_Rot->m_Rot);
268 return (this->m_Rot);
337 return (this->GetRot()->GetRot()->GetRot());
339 Self * p1 = this->GetRot();
362 return this->GetOprev();
367 return this->GetLprev();
372 return this->GetRprev();
377 return this->GetDprev();
383 return (this->GetRot()->GetRot()->GetRot());
385 const Self * p1 = this->GetRot();
407 return this->GetOprev();
412 return this->GetLprev();
417 return this->GetRprev();
422 return this->GetDprev();
429 return ((m_Onext ==
this) || (m_Rot ==
nullptr));
434 return (
this == this->GetOnext());
Pixel-wise addition of two images.
Const iterator for QuadEdgeMesh.
Non const iterator for QuadMesh.
Base class for the implementation of a quad-edge data structure as proposed in "Guibas and Stolfi 198...
const Self * GetOnext() const
const Self * GetRnext() const
QuadEdge(QuadEdge &&)=default
void SetOnext(Self *onext)
void Splice(Self *b)
Basic quad-edge topological method.
const Self * GetRot() const
const Self * GetLnext() const
const Self * GetRprev() const
unsigned int GetOrder() const
const Self * GetDprev() const
const Self * GetInvRot() const
const Self * GetInvLnext() const
itkQEDefineIteratorMethodsMacro(Onext)
const Self * GetOprev() const
const Self * GetSym() const
const Self * GetLprev() const
bool IsEdgeInOnextRing(Self *testEdge) const
QuadEdge(const QuadEdge &)=default
QuadEdge & operator=(QuadEdge &&)=default
const Self * GetInvOnext() const
QuadEdge & operator=(const QuadEdge &)=default
const Self * GetDnext() const
const Self * GetInvDnext() const
const Self * GetInvRnext() const
bool IsLnextGivenSizeCyclic(const int size) const
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....