]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/MinimumSpanningTreeReader.cxx
...
[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 std::string 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     return(
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 ) return( this->_GD0< 2 >( fname ) );
44   else if( dim == 3 ) return( this->_GD0< 3 >( fname ) );
45   else
46     return( "MinimumSpanningTreeReader: invalid dimensions." );
47 }
48
49 // -------------------------------------------------------------------------
50 template< unsigned int _NDim >
51 std::string fpaPlugins::MinimumSpanningTreeReader::
52 _GD0( const std::string& fname )
53 {
54   typedef fpa::Image::MinimumSpanningTree< _NDim >     _TTree;
55   typedef fpa::IO::MinimumSpanningTreeReader< _TTree > _TFilter;
56
57   _TFilter* reader = this->_CreateITK< _TFilter >( );
58   reader->SetFileName( this->m_Parameters.GetOpenFileName( "FileName" ) );
59   try
60   {
61     reader->Update( );
62   }
63   catch( itk::ExceptionObject& err )
64   {
65     return(
66       "MinimumSpanningTreeReader: " + std::string( err.GetDescription( ) )
67       );
68
69   } // yrt
70   this->GetOutputData( "Output" )->SetITK( reader->GetOutput( ) );
71   return( "" );
72 }
73
74 // eof - $RCSfile$