]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/IO/MeshReader.hxx
...
[cpPlugins.git] / lib / cpExtensions / IO / MeshReader.hxx
diff --git a/lib/cpExtensions/IO/MeshReader.hxx b/lib/cpExtensions/IO/MeshReader.hxx
new file mode 100644 (file)
index 0000000..8146e6e
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef __CPEXTENSIONS__IO__MESHREADER__HXX__
+#define __CPEXTENSIONS__IO__MESHREADER__HXX__
+
+#include <algorithm>
+#include <cpExtensions/IO/WaveFrontOBJReader.h>
+#include <itkVTKPolyDataReader.h>
+
+// -------------------------------------------------------------------------
+template< typename M >
+itk::ModifiedTimeType cpExtensions::IO::MeshReader< M >::
+GetMTime( ) const
+{
+  itk::ModifiedTimeType mtime = this->Superclass::GetMTime( );
+  if( this->m_Reader.IsNotNull( ) )
+  {
+    itk::ModifiedTimeType rtime = this->m_Reader->GetMTime( );
+    mtime = ( rtime < mtime )? rtime: mtime;
+
+  } // fi
+  return( mtime );
+}
+
+// -------------------------------------------------------------------------
+template< typename M >
+cpExtensions::IO::MeshReader< M >::
+MeshReader( )
+  : Superclass( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< typename M >
+cpExtensions::IO::MeshReader< M >::
+~MeshReader( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< typename M >
+void cpExtensions::IO::MeshReader< M >::
+GenerateData( )
+{
+  std::string fn = this->m_FileName;
+  std::transform( fn.begin( ), fn.end( ), fn.begin( ), ::tolower );
+  if( fn.rfind( ".vtk" ) != std::string::npos )
+    this->_Read< itk::VTKPolyDataReader< M > >( );
+  else if( fn.rfind( ".obj" ) != std::string::npos )
+    this->_Read< cpExtensions::IO::WaveFrontOBJReader< M > >( );
+}
+
+// -------------------------------------------------------------------------
+template< typename M >
+template< class R >
+void cpExtensions::IO::MeshReader< M >::
+_Read( )
+{
+  typename R::Pointer reader = NULL;
+  if( this->m_Reader.IsNotNull( ) )
+  {
+    reader = dynamic_cast< R* >( this->m_Reader.GetPointer( ) );
+    if( reader.IsNotNull( ) )
+    {
+      if( reader->GetFileName( ) == this->m_FileName )
+        reader = NULL;
+    }
+    else
+    {
+      reader = R::New( );
+      this->m_Reader = reader;
+
+    } // fi
+  }
+  else
+  {
+    reader = R::New( );
+    this->m_Reader = reader;
+
+  } // fi
+
+  if( reader.IsNotNull( ) )
+  {
+    reader->SetFileName( this->m_FileName );
+    reader->GraftOutput( this->GetOutput( ) );
+    reader->Update( );
+    this->GraftOutput( reader->GetOutput( ) );
+
+  } // fi
+}
+
+#endif // __CPEXTENSIONS__IO__MESHREADER__HXX__
+
+// eof - $RCSfile$