--- /dev/null
+#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$