]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/IO/WaveFrontOBJReader.h
...
[cpPlugins.git] / lib / cpExtensions / IO / WaveFrontOBJReader.h
diff --git a/lib/cpExtensions/IO/WaveFrontOBJReader.h b/lib/cpExtensions/IO/WaveFrontOBJReader.h
new file mode 100644 (file)
index 0000000..9ce320d
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef __CPEXTENSIONS__IO__WAVEFRONTOBJREADER__H__
+#define __CPEXTENSIONS__IO__WAVEFRONTOBJREADER__H__
+
+#include <string>
+#include <itkIntTypes.h>
+#include <itkMesh.h>
+#include <itkMeshSource.h>
+#include <itkPolygonCell.h>
+
+namespace cpExtensions
+  {
+    namespace IO
+    {
+      /**
+       * \class WaveFrontOBJReader
+       * \brief
+       * Reads a wavefront OBJ file and create an itkMesh.
+       *
+       * Caveat1: itkWaveFrontOBJReader will read only vertices and faces.
+       *          Normal, parameters and textures vectors are ignored.
+       *
+       */
+      template< typename M >
+      class WaveFrontOBJReader
+        : public itk::MeshSource< M >
+      {
+      public:
+        typedef WaveFrontOBJReader              Self;
+        typedef itk::MeshSource< M >            Superclass;
+        typedef itk::SmartPointer< Self >       Pointer;
+        typedef itk::SmartPointer< const Self > ConstPointer;
+
+        typedef M                                    MeshType;
+        typedef typename M::MeshTraits               MeshTraits;
+        typedef typename M::PointType                PointType;
+        typedef typename MeshTraits::PixelType       PixelType;
+        typedef typename M::Pointer                  MeshPointer;
+        typedef typename M::CellTraits               CellTraits;
+        typedef typename M::CellIdentifier           CellIdentifier;
+        typedef typename M::CellType                 CellType;
+        typedef typename M::CellAutoPointer          CellAutoPointer;
+        typedef typename M::PointIdentifier          PointIdentifier;
+        typedef typename CellTraits::PointIdIterator PointIdIterator;
+        typedef typename M::PointsContainerPointer   PointsContainerPointer;
+        typedef typename M::PointsContainer          PointsContainer;
+
+        typedef itk::PolygonCell< CellType > TPolygonCell;
+
+      public:
+        itkNewMacro( Self );
+        itkTypeMacro( WaveFrontOBJReader, itkMeshSource );
+
+        itkSetStringMacro( FileName );
+        itkGetStringMacro( FileName );
+
+      protected:
+        WaveFrontOBJReader( );
+        virtual ~WaveFrontOBJReader( );
+
+        virtual void GenerateData( );
+
+      private:
+        // Purposely not implemented
+        WaveFrontOBJReader( const Self& );
+        Self& operator=( const Self & );
+
+      protected:
+        std::string m_FileName;
+      };
+
+    } // ecapseman
+
+} // ecapseman
+
+#include <cpExtensions/IO/WaveFrontOBJReader.hxx>
+
+#endif // __CPEXTENSIONS__IO__WAVEFRONTOBJREADER__H__
+
+// eof - $RCSfile$