1 /*=========================================================================
4 Module: $RCSfile: bbitkvtkitkImage2vtkImageData.cxx,v $
6 Date: $Date: 2008/05/14 07:01:00 $
7 Version: $Revision: 1.4 $
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.
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.
17 =========================================================================*/
25 #include "bbitkvtkitkImage2vtkImageData.h"
26 #include "bbitkvtkPackage.h"
28 //#include "itkVTKImageToImageFilter.h"
30 #include "itkImageToVTKImageFilter.h"
35 BBTK_BLACK_BOX_IMPLEMENTATION(itkImage2vtkImageData,bbtk::AtomicBlackBox);
37 BBTK_ADD_BLACK_BOX_TO_PACKAGE(itkvtk,itkImage2vtkImageData);
42 void itkImage2vtkImageData::Convert()
44 bbtk::TypeInfo t = bbGetInputIn().type();
45 BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t,Convert);
51 void itkImage2vtkImageData::Convert()
53 bbtkDebugMessage("process",5,"==> ["<<bbGetFullName()<<"] : Convert<"
57 typedef T itkImageType;
58 typedef itk::ImageToVTKImageFilter< itkImageType > ItkToVtkConnection;
59 typename ItkToVtkConnection::Pointer conv;
61 // No converter yet : create it and set its input
64 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : No converter yet : creating it"<<std::endl);
65 conv = ItkToVtkConnection::New();
67 conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
71 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter ok "<<std::endl);
73 // Input itkImageType type changed ?
74 // Have to change the converter and set its input
75 conv = dynamic_cast<ItkToVtkConnection*>
76 ((itk::ProcessObject*)mConverter);
79 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter of wrong input type : reacreating it "<<std::endl);
81 mConverter->UnRegister();
82 conv = ItkToVtkConnection::New();
84 conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
86 // Input image type did not change but input image pointer did:
88 else if ( this->bbGetInputIn().get<itkImageType*>()
89 != (itkImageType*)(conv->GetExporter()->GetInputs()[0].GetPointer()))
91 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter input changed : resetting it"<<std::endl);
93 conv->SetInput( this->bbGetInputIn().get<itkImageType*>() );
97 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Nothing changed"<<std::endl);
104 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Trying update"<<std::endl);
107 bbSetOutputOut(conv->GetOutput());
109 catch( itk::ExceptionObject & e)
111 bbtkError("itkImage2vtkImageData<"
112 <<bbtk::TypeName<T>()
113 <<">::Convert() : "<<e);
115 bbtkDebugMessage("process",5,"<== ["<<bbGetFullName()<<"] : Convert<"
116 <<bbtk::TypeName<T>()
117 <<">() *DONE*"<<std::endl);
122 void itkImage2vtkImageData::bbUserConstructor()
124 bbSetOutputOut(NULL);
127 void itkImage2vtkImageData::bbUserCopyConstructor()
129 bbSetOutputOut(NULL);
132 void itkImage2vtkImageData::bbUserDestructor()
138 // eo namespace bbitkvtk