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