]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/IO/MinimumSpanningTreeReader.hxx
9a41db52dbe22262c0bd3ded927cc38a8ca15aaf
[FrontAlgorithms.git] / lib / fpa / IO / MinimumSpanningTreeReader.hxx
1 #ifndef __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
2 #define __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
3
4 #include <fstream>
5
6 // -------------------------------------------------------------------------
7 template< class T >
8 T* fpa::IO::MinimumSpanningTreeReader< T >::
9 GetOutput( )
10 {
11   return( itkDynamicCastInDebugMode< T* >( this->GetPrimaryOutput( ) ) );
12 }
13
14 // -------------------------------------------------------------------------
15 template< class T >
16 void fpa::IO::MinimumSpanningTreeReader< T >::
17 Update( )
18 {
19   this->GenerateData( );
20 }
21
22 // -------------------------------------------------------------------------
23 template< class T >
24 fpa::IO::MinimumSpanningTreeReader< T >::
25 MinimumSpanningTreeReader( )
26   : Superclass( ),
27     m_FileName( "" )
28 {
29   this->itk::ProcessObject::SetNumberOfRequiredOutputs( 1 );
30   this->itk::ProcessObject::SetNthOutput( 0, T::New( ) );
31 }
32
33 // -------------------------------------------------------------------------
34 template< class T >
35 fpa::IO::MinimumSpanningTreeReader< T >::
36 ~MinimumSpanningTreeReader( )
37 {
38 }
39
40 // -------------------------------------------------------------------------
41 template< class T >
42 void fpa::IO::MinimumSpanningTreeReader< T >::
43 GenerateData( )
44 {
45   T* output = this->GetOutput( );
46   output->Clear( );
47
48   std::ifstream in( this->m_FileName.c_str( ) );
49   if( !in )
50   {
51     itkExceptionMacro(
52       << "Error opening file to read a minimum spanning tree: \""
53       << this->m_FileName
54       << "\""
55       );
56     return;
57
58   } // fi
59
60   unsigned int dim;
61   unsigned long nSeeds, nVertices;
62   in >> dim >> nSeeds;
63
64   typedef typename T::TCollisions _TCollisions;
65   typedef typename _TCollisions::value_type _TCollisionsRow;
66   typedef typename _TCollisionsRow::value_type _TCollision;
67   typedef typename T::TVertex _TVertex;
68
69   _TCollisions
70     collisions( nSeeds, _TCollisionsRow( nSeeds, _TCollision( _TVertex( ), false ) ) );
71   for( unsigned long i = 0; i < nSeeds; ++i )
72   {
73     for( unsigned long j = 0; j < nSeeds; ++j )
74     {
75       int val;
76       in >> val;
77       collisions[ i ][ j ].second = ( val == 1 );
78
79     } // rof
80
81   } // rof
82
83   in >> nVertices;
84   for( unsigned long vId = 0; vId < nVertices; ++vId )
85   {
86     typename T::TVertex v0, v1;
87     for( unsigned int d = 0; d < dim; ++d )
88     {
89       long val;
90       in >> val;
91       if( d < T::TVertex::Dimension )
92         v0[ d ] = val;
93
94     } // rof
95     for( unsigned int d = 0; d < dim; ++d )
96     {
97       long val;
98       in >> val;
99       if( d < T::TVertex::Dimension )
100         v1[ d ] = val;
101
102     } // rof
103     short fId;
104     in >> fId;
105     output->SetParent( v0, v1, fId );
106
107   } // rof
108   output->SetCollisions( collisions );
109   in.close( );
110 }
111
112 #endif // __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
113
114 // eof - $RCSfile$