]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/DataStructures/QuadEdgeMesh.h
...
[cpPlugins.git] / lib / cpExtensions / DataStructures / QuadEdgeMesh.h
index 977bc5d0e9db222f987db9bb882d93d8fa6d54fe..7ce48fe6fa534f93af9989d289dce107d2b7b694 100644 (file)
 #include <cpExtensions/DataStructures/QuadEdge.h>
 
 namespace cpExtensions
+{
+  namespace DataStructures
   {
-    namespace DataStructures
+    /**
+     */
+    template< typename P, unsigned int D = 3, typename T = itk::DefaultStaticMeshTraits< P, D, D > >
+    class QuadEdgeMesh
+      : public itk::Mesh< P, D, T >
     {
-      /**
-       */
-      template< typename P, unsigned int D = 3, typename T = itk::DefaultStaticMeshTraits< P, D, D > >
-      class QuadEdgeMesh
-        : public itk::Mesh< P, D, T >
-      {
-      public:
-        typedef QuadEdgeMesh                    Self;
-        typedef itk::Mesh< P, D, T >            Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-        /// Types from superclass
-        typedef typename
-        Superclass::BoundaryAssignmentsContainer
-        BoundaryAssignmentsContainer;
-
-        typedef typename
-        Superclass::BoundaryAssignmentsContainerPointer
-        BoundaryAssignmentsContainerPointer;
-
-        typedef typename Superclass::BoundingBoxType       BoundingBoxType;
-        typedef typename Superclass::CellAutoPointer       CellAutoPointer;
-        typedef typename Superclass::CellsContainer        CellsContainer;
-        typedef typename Superclass::CellDataContainer     CellDataContainer;
-        typedef typename Superclass::CellFeatureCount      CellFeatureCount;
-        typedef typename Superclass::CellFeatureIdentifier CellFeatureIdentifier;
-        typedef typename Superclass::CellIdentifier        CellIdentifier;
-        typedef typename Superclass::CellLinksContainer    CellLinksContainer;
-        typedef typename Superclass::CellMultiVisitorType  CellMultiVisitorType;
-        typedef typename Superclass::CellPixelType         CellPixelType;
-        typedef typename Superclass::CellType              CellType;
-        typedef typename Superclass::PointIdentifier       PointIdentifier;
-        typedef typename Superclass::PointsContainer       PointsContainer;
-        typedef typename Superclass::PointType             PointType;
-
-        /// QuadEdge types (primal and dual)
-        typedef QuadEdge< PointIdentifier, CellIdentifier > TPrimalEdge;
-        typedef typename TPrimalEdge::TDual                 TDualEdge;
-        typedef QuadEdgeCell< CellType, TPrimalEdge >       TQuadEdgeCell;
-
-        /// Memory management objects
-        typedef std::set< typename TPrimalEdge::Pointer > CntPrimalEdges;
-        typedef std::set< typename TDualEdge::Pointer >   CntDualEdges;
-        typedef std::vector< TPrimalEdge* > CntOnextRings;
-
-        /// More geometry types
-        typedef typename PointType::VectorType      VectorType;
-        typedef typename VectorType::ValueType      TScalar;
-        typedef std::vector< VectorType >           CntNormals;
-        typedef typename CntNormals::const_iterator NormalsIterator;
-
-      protected:
-        typedef std::vector< TPrimalEdge* > _TEdges;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( QuadEdgeMesh, itkMesh );
-
-      public:
-        // Edge related methods
-        TPrimalEdge* FindEdge( const PointIdentifier& a ) const;
-        TPrimalEdge* FindEdge(
-          const PointIdentifier& a, const PointIdentifier& b
-          ) const;
-        TPrimalEdge* FindEntryEdge( const CellIdentifier& i ) const;
-
-        /// New geometric methods
-        const CntNormals& GetPointNormalsContainer( ) const;
-        NormalsIterator BeginPointNormals( ) const;
-        NormalsIterator EndPointNormals( ) const;
-        const VectorType& GetPointNormal( const PointIdentifier& id ) const;
-
-        /// itk::DataObject methods overloading 
-        virtual bool RequestedRegionIsOutsideOfTheBufferedRegion( );
-
-        /// itk::PointSet methods overloading 
-        virtual void SetPoints( PointsContainer* points );
-        virtual void SetPoint( PointIdentifier id , PointType point );
-
-        /// itk::Mesh methods overloading
-        virtual void PassStructure( Self* inputMesh )
-          {
-            std::cout << "PassStructure" << std::endl;
-            std::exit( 1 );
-          }
-
-        virtual void Initialize( );
-        virtual void Graft( const itk::DataObject* data );
-
-        void SetCellLinks( CellLinksContainer* cellLinks )
-          {
-            std::cout << "SetCellLinks" << std::endl;
-            std::exit( 1 );
-          }
-        virtual CellLinksContainer* GetCellLinks( )
-          {
-            std::cout << "GetCellLinks" << std::endl;
-            std::exit( 1 );
-          }
-        virtual const CellLinksContainer* GetCellLinks( ) const
-          {
-            std::cout << "GetCellLinks (const)" << std::endl;
-            std::exit( 1 );
-          }
-        virtual void SetCells( CellsContainer* cells );
-        virtual void SetCellData( CellDataContainer* data );
-        virtual CellDataContainer* GetCellData( )
-          {
-            std::cout << "GetCellData" << std::endl;
-            std::exit( 1 );
-          }
-        virtual const CellDataContainer* GetCellData( ) const
-          {
-            std::cout << "GetCellData (const)" << std::endl;
-            std::exit( 1 );
-          }
+    public:
+      typedef QuadEdgeMesh                    Self;
+      typedef itk::Mesh< P, D, T >            Superclass;
+      typedef itk::SmartPointer< Self >       Pointer;
+      typedef itk::SmartPointer< const Self > ConstPointer;
+
+      /// Types from superclass
+      typedef typename
+      Superclass::BoundaryAssignmentsContainer
+      BoundaryAssignmentsContainer;
+
+      typedef typename
+      Superclass::BoundaryAssignmentsContainerPointer
+      BoundaryAssignmentsContainerPointer;
+
+      typedef typename Superclass::BoundingBoxType       BoundingBoxType;
+      typedef typename Superclass::CellAutoPointer       CellAutoPointer;
+      typedef typename Superclass::CellsContainer        CellsContainer;
+      typedef typename Superclass::CellDataContainer     CellDataContainer;
+      typedef typename Superclass::CellFeatureCount      CellFeatureCount;
+      typedef typename Superclass::CellFeatureIdentifier CellFeatureIdentifier;
+      typedef typename Superclass::CellIdentifier        CellIdentifier;
+      typedef typename Superclass::CellLinksContainer    CellLinksContainer;
+      typedef typename Superclass::CellMultiVisitorType  CellMultiVisitorType;
+      typedef typename Superclass::CellPixelType         CellPixelType;
+      typedef typename Superclass::CellType              CellType;
+      typedef typename Superclass::PointIdentifier       PointIdentifier;
+      typedef typename Superclass::PointsContainer       PointsContainer;
+      typedef typename Superclass::PointType             PointType;
+
+      /// QuadEdge types (primal and dual)
+      typedef QuadEdge< PointIdentifier, CellIdentifier > TPrimalEdge;
+      typedef typename TPrimalEdge::TDual                 TDualEdge;
+      typedef QuadEdgeCell< CellType, TPrimalEdge >       TQuadEdgeCell;
+
+      /// Memory management objects
+      typedef std::set< typename TPrimalEdge::Pointer > CntPrimalEdges;
+      typedef std::set< typename TDualEdge::Pointer >   CntDualEdges;
+      typedef std::vector< TPrimalEdge* > CntOnextRings;
+
+      /// More geometry types
+      typedef typename PointType::VectorType      VectorType;
+      typedef typename VectorType::ValueType      TScalar;
+      typedef std::vector< VectorType >           CntNormals;
+      typedef typename CntNormals::const_iterator NormalsIterator;
+
+    protected:
+      typedef std::vector< TPrimalEdge* > _TEdges;
+
+    public:
+      itkNewMacro( Self );
+      itkTypeMacro( QuadEdgeMesh, itkMesh );
+
+    public:
+      // Edge related methods
+      TPrimalEdge* FindEdge( const PointIdentifier& a ) const;
+      TPrimalEdge* FindEdge(
+        const PointIdentifier& a, const PointIdentifier& b
+        ) const;
+      TPrimalEdge* FindEntryEdge( const CellIdentifier& i ) const;
+
+      /// New geometric methods
+      const CntNormals& GetPointNormalsContainer( ) const;
+      NormalsIterator BeginPointNormals( ) const;
+      NormalsIterator EndPointNormals( ) const;
+      const VectorType& GetPointNormal( const PointIdentifier& id ) const;
+
+      /// itk::DataObject methods overloading
+      virtual bool RequestedRegionIsOutsideOfTheBufferedRegion( );
+
+      /// itk::PointSet methods overloading
+      virtual void SetPoints( PointsContainer* points );
+      virtual void SetPoint( PointIdentifier id , PointType point );
+
+      /// itk::Mesh methods overloading
+      virtual void PassStructure( Self* inputMesh )
+        {
+          std::cout << "PassStructure" << std::endl;
+          std::exit( 1 );
+        }
+
+      virtual void Initialize( );
+      virtual void Graft( const itk::DataObject* data );
+
+      void SetCellLinks( CellLinksContainer* cellLinks )
+        {
+          std::cout << "SetCellLinks" << std::endl;
+          std::exit( 1 );
+        }
+      virtual CellLinksContainer* GetCellLinks( )
+        {
+          std::cout << "GetCellLinks" << std::endl;
+          std::exit( 1 );
+        }
+      virtual const CellLinksContainer* GetCellLinks( ) const
+        {
+          std::cout << "GetCellLinks (const)" << std::endl;
+          std::exit( 1 );
+        }
+      virtual void SetCells( CellsContainer* cells );
+      virtual void SetCellData( CellDataContainer* data );
+      virtual CellDataContainer* GetCellData( )
+        {
+          std::cout << "GetCellData" << std::endl;
+          std::exit( 1 );
+        }
+      virtual const CellDataContainer* GetCellData( ) const
+        {
+          std::cout << "GetCellData (const)" << std::endl;
+          std::exit( 1 );
+        }
 
 #if !defined( CABLE_CONFIGURATION )
-        virtual void SetBoundaryAssignments(
-          int dimension, BoundaryAssignmentsContainer* container
-          )
-          {
-            std::cout << "SetBoundaryAssignments" << std::endl;
-            std::exit( 1 );
-          }
-        virtual BoundaryAssignmentsContainerPointer
-        GetBoundaryAssignments( int dimension )
-          {
-            std::cout << "GetBoundaryAssignments" << std::endl;
-            std::exit( 1 );
-          }
-        virtual const BoundaryAssignmentsContainerPointer
-        GetBoundaryAssignments( int dimension ) const
-          {
-            std::cout << "GetBoundaryAssignments (const)" << std::endl;
-            std::exit( 1 );
-          }
+      virtual void SetBoundaryAssignments(
+        int dimension, BoundaryAssignmentsContainer* container
+        )
+        {
+          std::cout << "SetBoundaryAssignments" << std::endl;
+          std::exit( 1 );
+        }
+      virtual BoundaryAssignmentsContainerPointer
+      GetBoundaryAssignments( int dimension )
+        {
+          std::cout << "GetBoundaryAssignments" << std::endl;
+          std::exit( 1 );
+        }
+      virtual const BoundaryAssignmentsContainerPointer
+      GetBoundaryAssignments( int dimension ) const
+        {
+          std::cout << "GetBoundaryAssignments (const)" << std::endl;
+          std::exit( 1 );
+        }
 #endif
 
-        virtual void SetCell( CellIdentifier id, CellAutoPointer& ptr );
-        virtual void SetCellData( CellIdentifier id, CellPixelType data );
-        virtual bool GetCellData( CellIdentifier id, CellPixelType* data ) const
-          {
-            std::cout << "GetCellData" << std::endl;
-            std::exit( 1 );
-          }
-        virtual void SetBoundaryAssignment(
-          int dimension, CellIdentifier cellId,
-          CellFeatureIdentifier featureId,
-          CellIdentifier boundaryId
-          )
-          {
-            std::cout << "SetBoundaryAssignment" << std::endl;
-            std::exit( 1 );
-          }
-        virtual bool GetBoundaryAssignment(
-          int dimension, CellIdentifier cellId,
-          CellFeatureIdentifier featureId,
-          CellIdentifier* boundaryId
-          ) const
-          {
-            std::cout << "GetBoundaryAssignment" << std::endl;
-            std::exit( 1 );
-          }
-        virtual bool RemoveBoundaryAssignment(
-          int dimension, CellIdentifier cellId,
-          CellFeatureIdentifier featureId
-          )
-          {
-            std::cout << "RemoveBoundaryAssignment" << std::endl;
-            std::exit( 1 );
-          }
-        virtual CellFeatureCount GetNumberOfCellBoundaryFeatures(
-          int dimension,
-          CellIdentifier id
-          ) const
-          {
-            std::cout << "GetNumberOfCellBoundaryFeatures" << std::endl;
-            std::exit( 1 );
-          }
-        virtual bool GetCellBoundaryFeature(
-          int dimension, CellIdentifier id,
-          CellFeatureIdentifier fid,
-          CellAutoPointer& ptr
-          ) const
-          {
-            std::cout << "GetCellBoundaryFeature" << std::endl;
-            std::exit( 1 );
-          }
-        virtual CellIdentifier GetCellBoundaryFeatureNeighbors( 
-          int dimension,
-          CellIdentifier id,
-          CellFeatureIdentifier fid,
-          std::set< CellIdentifier >* cellSet )
-          {
-            std::cout << "GetCellBoundaryFeatureNeighbors" << std::endl;
-            std::exit( 1 );
-          }
-        virtual CellIdentifier GetCellNeighbors(
-          CellIdentifier cellId,
-          std::set< CellIdentifier >* cellSet
-          )
-          {
-            std::cout << "GetCellNeighbors" << std::endl;
-            std::exit( 1 );
-          }
-        virtual bool GetAssignedCellBoundaryIfOneExists(
-          int dimension, CellIdentifier id,
-          CellFeatureIdentifier fid,
-          CellAutoPointer& ptr
-          ) const
-          {
-            std::cout << "GetAssignedCellBoundaryIfOneExists" << std::endl;
-            std::exit( 1 );
-          }
-        virtual void BuildCellLinks( ) const;
-
-        virtual void Accept( CellMultiVisitorType* mv ) const
-          {
-            std::cout << "Accept" << std::endl;
-            std::exit( 1 );
-          }
-
-      protected:
-        QuadEdgeMesh( );
-        virtual ~QuadEdgeMesh( );
-
-        virtual void ReleaseCellsMemory( )
-          {
-            std::cout << "ReleaseCellsMemory" << std::endl;
-            std::exit( 1 );
-          }
-
-        inline bool _CheckPoints( const CellAutoPointer& ptr ) const;
-        inline void _DeletePoint( const PointIdentifier& pId );
-        inline TPrimalEdge* _CreateQuadEdge(
-          const PointIdentifier& a, const PointIdentifier& b
-          );
-        inline void _DeleteEdge( TPrimalEdge* edge );
-        inline void _DeleteFace( const CellIdentifier& f );
-        inline void _ConstructEdges(
-          _TEdges& edges, const CellAutoPointer& ptr
-          );
-        virtual VectorType _ComputePointNormal( const TPrimalEdge* e ) const;
-        inline void _ReleaseQuadEdgeObjects( );
-
-      private:
-        QuadEdgeMesh( const Self& );   // Not implemented
-        void operator=( const Self& ); // Not implemented
-
-      protected:
-        CntPrimalEdges m_PrimalEdges;
-        CntDualEdges   m_DualEdges;
-
-        CntOnextRings m_OnextRings;
-
-        CntNormals m_PointNormals;
-      };
-
-    } // ecapseman
+      virtual void SetCell( CellIdentifier id, CellAutoPointer& ptr );
+      virtual void SetCellData( CellIdentifier id, CellPixelType data );
+      virtual bool GetCellData( CellIdentifier id, CellPixelType* data ) const
+        {
+          std::cout << "GetCellData" << std::endl;
+          std::exit( 1 );
+        }
+      virtual void SetBoundaryAssignment(
+        int dimension, CellIdentifier cellId,
+        CellFeatureIdentifier featureId,
+        CellIdentifier boundaryId
+        )
+        {
+          std::cout << "SetBoundaryAssignment" << std::endl;
+          std::exit( 1 );
+        }
+      virtual bool GetBoundaryAssignment(
+        int dimension, CellIdentifier cellId,
+        CellFeatureIdentifier featureId,
+        CellIdentifier* boundaryId
+        ) const
+        {
+          std::cout << "GetBoundaryAssignment" << std::endl;
+          std::exit( 1 );
+        }
+      virtual bool RemoveBoundaryAssignment(
+        int dimension, CellIdentifier cellId,
+        CellFeatureIdentifier featureId
+        )
+        {
+          std::cout << "RemoveBoundaryAssignment" << std::endl;
+          std::exit( 1 );
+        }
+      virtual CellFeatureCount GetNumberOfCellBoundaryFeatures(
+        int dimension,
+        CellIdentifier id
+        ) const
+        {
+          std::cout << "GetNumberOfCellBoundaryFeatures" << std::endl;
+          std::exit( 1 );
+        }
+      virtual bool GetCellBoundaryFeature(
+        int dimension, CellIdentifier id,
+        CellFeatureIdentifier fid,
+        CellAutoPointer& ptr
+        ) const
+        {
+          std::cout << "GetCellBoundaryFeature" << std::endl;
+          std::exit( 1 );
+        }
+      virtual CellIdentifier GetCellBoundaryFeatureNeighbors(
+        int dimension,
+        CellIdentifier id,
+        CellFeatureIdentifier fid,
+        std::set< CellIdentifier >* cellSet )
+        {
+          std::cout << "GetCellBoundaryFeatureNeighbors" << std::endl;
+          std::exit( 1 );
+        }
+      virtual CellIdentifier GetCellNeighbors(
+        CellIdentifier cellId,
+        std::set< CellIdentifier >* cellSet
+        )
+        {
+          std::cout << "GetCellNeighbors" << std::endl;
+          std::exit( 1 );
+        }
+      virtual bool GetAssignedCellBoundaryIfOneExists(
+        int dimension, CellIdentifier id,
+        CellFeatureIdentifier fid,
+        CellAutoPointer& ptr
+        ) const
+        {
+          std::cout << "GetAssignedCellBoundaryIfOneExists" << std::endl;
+          std::exit( 1 );
+        }
+      virtual void BuildCellLinks( ) const;
+
+      virtual void Accept( CellMultiVisitorType* mv ) const
+        {
+          std::cout << "Accept" << std::endl;
+          std::exit( 1 );
+        }
+
+    protected:
+      QuadEdgeMesh( );
+      virtual ~QuadEdgeMesh( );
+
+      virtual void ReleaseCellsMemory( )
+        {
+          std::cout << "ReleaseCellsMemory" << std::endl;
+          std::exit( 1 );
+        }
+
+      inline bool _CheckPoints( const CellAutoPointer& ptr ) const;
+      inline void _DeletePoint( const PointIdentifier& pId );
+      inline TPrimalEdge* _CreateQuadEdge(
+        const PointIdentifier& a, const PointIdentifier& b
+        );
+      inline void _DeleteEdge( TPrimalEdge* edge );
+      inline void _DeleteFace( const CellIdentifier& f );
+      inline void _ConstructEdges(
+        _TEdges& edges, const CellAutoPointer& ptr
+        );
+      virtual VectorType _ComputePointNormal( const TPrimalEdge* e ) const;
+      inline void _ReleaseQuadEdgeObjects( );
+
+    private:
+      QuadEdgeMesh( const Self& );   // Not implemented
+      void operator=( const Self& ); // Not implemented
+
+    protected:
+      CntPrimalEdges m_PrimalEdges;
+      CntDualEdges   m_DualEdges;
+
+      CntOnextRings m_OnextRings;
+
+      CntNormals m_PointNormals;
+    };
+
+  } // ecapseman
 
 } // ecapseman