]> Creatis software - cpMesh.git/blob - lib/cpm/IO/MeshReader.hxx
First commit
[cpMesh.git] / lib / cpm / IO / MeshReader.hxx
1 #ifndef __CPM__IO__MESHREADER__HXX__
2 #define __CPM__IO__MESHREADER__HXX__
3
4 #include <algorithm>
5 #include <cpm/IO/WaveFrontOBJReader.h>
6 #include <itkVTKPolyDataReader.h>
7
8 // -------------------------------------------------------------------------
9 template< typename M >
10 itk::ModifiedTimeType cpm::IO::MeshReader< M >::
11 GetMTime( ) const
12 {
13   itk::ModifiedTimeType mtime = this->Superclass::GetMTime( );
14   if( this->m_Reader.IsNotNull( ) )
15   {
16     itk::ModifiedTimeType rtime = this->m_Reader->GetMTime( );
17     mtime = ( rtime < mtime )? rtime: mtime;
18
19   } // fi
20   return( mtime );
21 }
22
23 // -------------------------------------------------------------------------
24 template< typename M >
25 cpm::IO::MeshReader< M >::
26 MeshReader( )
27   : Superclass( )
28 {
29 }
30
31 // -------------------------------------------------------------------------
32 template< typename M >
33 cpm::IO::MeshReader< M >::
34 ~MeshReader( )
35 {
36 }
37
38 // -------------------------------------------------------------------------
39 template< typename M >
40 void cpm::IO::MeshReader< M >::
41 GenerateData( )
42 {
43   std::string fn = this->m_FileName;
44   std::transform( fn.begin( ), fn.end( ), fn.begin( ), ::tolower );
45   if( fn.rfind( ".vtk" ) != std::string::npos )
46     this->_Read< itk::VTKPolyDataReader< M > >( );
47   else if( fn.rfind( ".obj" ) != std::string::npos )
48     this->_Read< cpm::IO::WaveFrontOBJReader< M > >( );
49 }
50
51 // -------------------------------------------------------------------------
52 template< typename M >
53 template< class R >
54 void cpm::IO::MeshReader< M >::
55 _Read( )
56 {
57   typename R::Pointer reader = NULL;
58   if( this->m_Reader.IsNotNull( ) )
59   {
60     reader = dynamic_cast< R* >( this->m_Reader.GetPointer( ) );
61     if( reader.IsNotNull( ) )
62     {
63       if( reader->GetFileName( ) == this->m_FileName )
64         reader = NULL;
65     }
66     else
67     {
68       reader = R::New( );
69       this->m_Reader = reader;
70
71     } // fi
72   }
73   else
74   {
75     reader = R::New( );
76     this->m_Reader = reader;
77
78   } // fi
79
80   if( reader.IsNotNull( ) )
81   {
82     reader->SetFileName( this->m_FileName );
83     reader->GraftOutput( this->GetOutput( ) );
84     reader->Update( );
85     this->GraftOutput( reader->GetOutput( ) );
86
87   } // fi
88 }
89
90 #endif // __CPM__IO__MESHREADER__HXX__
91
92 // eof - $RCSfile$