]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/MinimumSpanningTreeReader.cxx
98ef9894f98d1b377394e47df8de772afab110aa
[FrontAlgorithms.git] / plugins / fpa / MinimumSpanningTreeReader.cxx
1 #include "MinimumSpanningTreeReader.h"
2 #include "MinimumSpanningTree.h"
3
4 #include <fpa/IO/MinimumSpanningTreeReader.h>
5 #include <fpa/IO/MinimumSpanningTreeReader.hxx>
6
7 // -------------------------------------------------------------------------
8 fpaPlugins::MinimumSpanningTreeReader::
9 MinimumSpanningTreeReader( )
10   : Superclass( )
11 {
12   this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "Output" );
13   this->m_Parameters.Clear( );
14   this->m_Parameters.ConfigureAsOpenFileName( "FileName" );
15   this->m_Parameters.SetAcceptedFileExtensions(
16     "FileName",
17     "Minimum spanning tree files (*.mst)"
18     );
19 }
20
21 // -------------------------------------------------------------------------
22 fpaPlugins::MinimumSpanningTreeReader::
23 ~MinimumSpanningTreeReader( )
24 {
25 }
26
27 // -------------------------------------------------------------------------
28 std::string fpaPlugins::MinimumSpanningTreeReader::
29 _GenerateData( )
30 {
31   // Infere MST dimensions
32   auto fname = this->m_Parameters.GetOpenFileName( "FileName" );
33   std::ifstream input( fname.c_str( ) );
34   if( !input )
35     return(
36       std::string( "MinimumSpanningTreeReader: Error opening file \"" ) +
37       fname +
38       std::string( "\"" )
39       );
40   unsigned int dim;
41   input >> dim;
42
43   // Real execution
44   if     ( dim == 2 ) return( this->_GD0< 2 >( fname ) );
45   else if( dim == 3 ) return( this->_GD0< 3 >( fname ) );
46   else
47     return( "MinimumSpanningTreeReader: invalid dimensions." );
48 }
49
50 // -------------------------------------------------------------------------
51 template< unsigned int _NDim >
52 std::string fpaPlugins::MinimumSpanningTreeReader::
53 _GD0( const std::string& fname )
54 {
55   typedef fpa::Image::MinimumSpanningTree< _NDim >     _TTree;
56   typedef fpa::IO::MinimumSpanningTreeReader< _TTree > _TFilter;
57
58   _TFilter* reader = this->_CreateITK< _TFilter >( );
59   reader->SetFileName( this->m_Parameters.GetOpenFileName( "FileName" ) );
60   try
61   {
62     reader->Update( );
63   }
64   catch( itk::ExceptionObject& err )
65   {
66     return(
67       "MinimumSpanningTreeReader: " + std::string( err.GetDescription( ) )
68       );
69
70   } // yrt
71   this->GetOutputData( "Output" )->SetITK( reader->GetOutput( ) );
72   return( "" );
73 }
74
75 // eof - $RCSfile$