]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Plugins/SecondRankDiffusionTensorToPolyData.cxx
...
[cpPlugins.git] / lib / cpPlugins / Plugins / SecondRankDiffusionTensorToPolyData.cxx
1 #include <cpPlugins/Plugins/SecondRankDiffusionTensorToPolyData.h>
2 #include <cpPlugins/Interface/Image.h>
3 #include <cpPlugins/Interface/Mesh.h>
4
5 #include <cpExtensions/Algorithms/SecondRankDiffusionTensorToPolyData.h>
6 #include <itkSymmetricSecondRankTensor.h>
7
8 // -------------------------------------------------------------------------
9 cpPlugins::Plugins::SecondRankDiffusionTensorToPolyData::
10 SecondRankDiffusionTensorToPolyData( )
11   : Superclass( ),
12     m_Algorithm( NULL )
13 {
14   this->m_ClassName = "cpPlugins::SecondRankDiffusionTensorToPolyData";
15   this->m_ClassCategory = "ImageToMeshFilter";
16
17   this->SetNumberOfInputs( 1 );
18   this->SetNumberOfOutputs( 1 );
19   this->_MakeOutput< cpPlugins::Interface::Mesh >( 0 );
20
21   using namespace cpPlugins::Interface;
22   this->m_Parameters = this->m_DefaultParameters;
23 }
24
25 // -------------------------------------------------------------------------
26 cpPlugins::Plugins::SecondRankDiffusionTensorToPolyData::
27 ~SecondRankDiffusionTensorToPolyData( )
28 {
29   if( this->m_Algorithm != NULL )
30     this->m_Algorithm->Delete( );
31 }
32
33 // -------------------------------------------------------------------------
34 std::string cpPlugins::Plugins::SecondRankDiffusionTensorToPolyData::
35 _GenerateData( )
36 {
37   // Get input
38   cpPlugins::Interface::Image* image =
39     this->GetInput< cpPlugins::Interface::Image >( 0 );
40   if( image == NULL )
41     return( "SecondRankDiffusionTensorToPolyData: Input data is not a valid image." );
42
43   itk::DataObject* itk_image = NULL;
44   std::string r = "";
45   cpPlugins_ImageArray_Input_Demangle( itk::SymmetricSecondRankTensor, float, 3, 3, image, itk_image, r, _RealGD );
46   else cpPlugins_ImageArray_Input_Demangle( itk::SymmetricSecondRankTensor, double, 3, 3, image, itk_image, r, _RealGD );
47   else
48     r = "SecondRankDiffusionTensorToPolyData: Input does not have a DiffusionTensor3D.";
49   return( r );
50 }
51
52 // -------------------------------------------------------------------------
53 template< class I >
54 std::string cpPlugins::Plugins::SecondRankDiffusionTensorToPolyData::
55 _RealGD( itk::DataObject* image )
56 {
57   typedef cpExtensions::Algorithms::SecondRankDiffusionTensorToPolyData< I > _F;
58
59   // Configure filter
60   _F* f = NULL;
61   if( this->m_Algorithm == NULL )
62   {
63     f = _F::New( );
64     this->m_Algorithm = f;
65
66   } // fi
67   f->SetInputData( dynamic_cast< I* >( image ) );
68   this->m_Algorithm->Update( );
69
70   // Connect output
71   cpPlugins::Interface::Mesh* out =
72     this->GetOutput< cpPlugins::Interface::Mesh >( 0 );
73   if( out != NULL )
74   {
75     out->SetVTKMesh( this->m_Algorithm->GetOutput( ) );
76     return( "" );
77   }
78   else
79     return( "OtsuThresholdImageFilter: output not correctly created." );
80 }
81
82 // eof - $RCSfile$