1 #ifndef __CPM__ALGORITHMS__QUADEDGE__MESHEULEROPERATORJOINVERTEXFUNCTION__H__
2 #define __CPM__ALGORITHMS__QUADEDGE__MESHEULEROPERATORJOINVERTEXFUNCTION__H__
5 #include <cpm/Algorithms/QuadEdge/MeshFunctionBase.h>
16 class MeshEulerOperatorJoinVertexFunction
17 : public MeshFunctionBase< M, typename M::TPrimalEdge*, typename M::TPrimalEdge* >
20 typedef typename M::TPrimalEdge TEdge;
21 typedef MeshEulerOperatorJoinVertexFunction Self;
22 typedef MeshFunctionBase< M, TEdge*, TEdge* > Superclass;
23 typedef itk::SmartPointer< Self > Pointer;
24 typedef itk::SmartPointer< const Self > ConstPointer;
27 typedef typename Superclass::TInput TInput;
28 typedef typename Superclass::TOutput TOutput;
29 typedef typename M::PointIdentifier TPointId;
31 typedef std::stack< TEdge* > TStack;
39 TOO_MANY_COMMON_VERTICES,
45 EDGE_JOINING_DIFFERENT_BORDERS
50 itkTypeMacro( MeshEulerOperatorJoinVertexFunction, MeshFunctionBase );
52 itkGetConstMacro( OldPointID, TPointId );
53 itkGetConstMacro( EdgeStatus, TEdgeStatus );
56 virtual TOutput Evaluate( const TInput& e );
59 MeshEulerOperatorJoinVertexFunction( );
60 virtual ~MeshEulerOperatorJoinVertexFunction( );
62 TPointId CommonVertexNeighboor( TEdge* e );
63 bool IsTetrahedron( TEdge* e );
65 TEdge* e, bool iWasLeftFace, TStack& oToBeDeleted
67 bool IsSamosa( TEdge* e );
68 bool IsEye( TEdge* e );
69 bool IsEdgeLinkingTwoDifferentBorders( TEdge* e );
70 TEdgeStatus CheckStatus( TEdge* e, TStack& oToBeDeleted );
71 TEdge* Process( TEdge* e );
72 TEdge* ProcessQuadEdge( TEdge* e );
73 TEdge* ProcessFace( TEdge* e, TStack& EdgesToBeDeleted );
76 // Purposely not implemented
77 MeshEulerOperatorJoinVertexFunction( const Self& );
78 void operator=( const Self& );
81 TPointId m_OldPointID;
82 TEdgeStatus m_EdgeStatus;
91 #include <cpm/Algorithms/QuadEdge/MeshEulerOperatorJoinVertexFunction.hxx>
93 #endif // __CPM__ALGORITHMS__QUADEDGE__MESHEULEROPERATORJOINVERTEXFUNCTION__H__