#ifndef __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__ #define __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__ #include // ------------------------------------------------------------------------- template< class T > T* fpa::IO::MinimumSpanningTreeReader< T >:: GetOutput( ) { return( itkDynamicCastInDebugMode< T* >( this->GetPrimaryOutput( ) ) ); } // ------------------------------------------------------------------------- template< class T > void fpa::IO::MinimumSpanningTreeReader< T >:: Update( ) { this->GenerateData( ); } // ------------------------------------------------------------------------- template< class T > fpa::IO::MinimumSpanningTreeReader< T >:: MinimumSpanningTreeReader( ) : Superclass( ), m_FileName( "" ) { this->itk::ProcessObject::SetNumberOfRequiredOutputs( 1 ); this->itk::ProcessObject::SetNthOutput( 0, T::New( ) ); } // ------------------------------------------------------------------------- template< class T > fpa::IO::MinimumSpanningTreeReader< T >:: ~MinimumSpanningTreeReader( ) { } // ------------------------------------------------------------------------- template< class T > void fpa::IO::MinimumSpanningTreeReader< T >:: GenerateData( ) { T* output = this->GetOutput( ); output->Clear( ); std::ifstream in( this->m_FileName.c_str( ) ); if( !in ) { itkExceptionMacro( << "Error opening file to read a minimum spanning tree: \"" << this->m_FileName << "\"" ); return; } // fi unsigned int dim; unsigned long nSeeds, nVertices; in >> dim >> nSeeds; typedef typename T::TCollisions _TCollisions; typedef typename _TCollisions::value_type _TCollisionsRow; typedef typename _TCollisionsRow::value_type _TCollision; typedef typename T::TVertex _TVertex; _TCollisions collisions( nSeeds, _TCollisionsRow( nSeeds, _TCollision( _TVertex( ), false ) ) ); for( unsigned long i = 0; i < nSeeds; ++i ) { for( unsigned long j = 0; j < nSeeds; ++j ) { int val; in >> val; collisions[ i ][ j ].second = ( val == 1 ); } // rof } // rof in >> nVertices; for( unsigned long vId = 0; vId < nVertices; ++vId ) { typename T::TVertex v0, v1; for( unsigned int d = 0; d < dim; ++d ) { long val; in >> val; if( d < T::TVertex::Dimension ) v0[ d ] = val; } // rof for( unsigned int d = 0; d < dim; ++d ) { long val; in >> val; if( d < T::TVertex::Dimension ) v1[ d ] = val; } // rof short fId; in >> fId; output->SetParent( v0, v1, fId ); } // rof output->SetCollisions( collisions ); in.close( ); } #endif // __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__ // eof - $RCSfile$