]> Creatis software - bbtk.git/blob - packages/itkvtk/src/bbitkvtkitkImage2vtkImageData.cxx
*** empty log message ***
[bbtk.git] / packages / itkvtk / src / bbitkvtkitkImage2vtkImageData.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbitkvtkitkImage2vtkImageData.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/05/14 07:01:00 $
7   Version:   $Revision: 1.4 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18 /**
19  *  \file 
20  *  \brief 
21  */
22 #ifdef _USE_ITK_
23 #ifdef _USE_VTK_
24
25 #include "bbitkvtkitkImage2vtkImageData.h"
26 #include "bbitkvtkPackage.h"
27 // VtkToItkConnection 
28 //#include "itkVTKImageToImageFilter.h"
29 // ItkToVtkConnection
30 #include "itkImageToVTKImageFilter.h"
31
32
33 namespace bbitkvtk 
34 {
35   BBTK_BLACK_BOX_IMPLEMENTATION(itkImage2vtkImageData,bbtk::AtomicBlackBox);
36
37   BBTK_ADD_BLACK_BOX_TO_PACKAGE(itkvtk,itkImage2vtkImageData);
38
39
40
41
42   void itkImage2vtkImageData::Convert()
43   {
44     bbtk::TypeInfo t = bbGetInputIn().type();
45     BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t,Convert);
46   }
47   
48
49
50    template<class T>
51    void itkImage2vtkImageData::Convert()
52   {
53     bbtkDebugMessage("process",5,"==> ["<<bbGetFullName()<<"] : Convert<"
54                      <<bbtk::TypeName<T>()
55                      <<">()"<<std::endl);
56
57     typedef T itkImageType;
58     typedef itk::ImageToVTKImageFilter< itkImageType > ItkToVtkConnection;
59     typename ItkToVtkConnection::Pointer conv;
60
61     // No converter yet : create it and set its input
62     if (!mConverter) 
63       {
64         bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : No converter yet : creating it"<<std::endl);
65         conv = ItkToVtkConnection::New();
66         mConverter = conv;
67         conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
68       }
69     else 
70       {
71         bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Converter ok "<<std::endl);
72         
73         // Input itkImageType type changed ? 
74         // Have to change the converter and set its input
75         conv = dynamic_cast<ItkToVtkConnection*>
76           ((itk::ProcessObject*)mConverter);
77         if (!conv) 
78           {
79             bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Converter of wrong input type : reacreating it "<<std::endl);
80
81             mConverter->UnRegister();
82             conv = ItkToVtkConnection::New();
83             mConverter = conv;
84             conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
85           }
86         // Input image type did not change but input image pointer did:
87         // set new input
88         else if ( this->bbGetInputIn().get<itkImageType*>() 
89                   != (itkImageType*)(conv->GetExporter()->GetInputs()[0].GetPointer()))
90           {
91             bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Converter input changed : resetting it"<<std::endl);
92
93             conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
94           }
95         else 
96           {
97             bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Nothing changed"<<std::endl);     
98
99           }
100       }
101     try
102       {
103         
104         bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Trying update"<<std::endl);  
105
106         conv->Update();
107         bbSetOutputOut(conv->GetOutput());
108       }
109     catch( itk::ExceptionObject & e) 
110       {
111         bbtkError("itkImage2vtkImageData<"
112                   <<bbtk::TypeName<T>()
113                   <<">::Convert() : "<<e);
114       } 
115     bbtkDebugMessage("process",5,"<== ["<<bbGetFullName()<<"] : Convert<"
116                      <<bbtk::TypeName<T>()
117                      <<">() *DONE*"<<std::endl);
118
119
120  }
121
122   void itkImage2vtkImageData::bbUserConstructor()
123   {
124     bbSetOutputOut(NULL);
125     mConverter = 0;
126   }
127   void itkImage2vtkImageData::bbUserCopyConstructor()
128   {
129     bbSetOutputOut(NULL);
130     mConverter = 0;
131   }
132   void itkImage2vtkImageData::bbUserDestructor()
133   {
134   }
135   
136
137 }
138 // eo namespace bbitkvtk
139
140 #endif
141 // _USE_VTK_
142 #endif
143 // _USE_ITK_