Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
vtkITKImageToImageFilter.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Copyright Brigham and Women's Hospital (BWH) All Rights Reserved.
4
5 See COPYRIGHT.txt
6 or http://www.slicer.org/copyright/copyright.txt for details.
7
8 Program: vtkITK
9 Module: $HeadURL$
10 Date: $Date$
11 Version: $Revision$
12
13==========================================================================*/
14
15#ifndef __vtkITKImageToImageFilter_h
16#define __vtkITKImageToImageFilter_h
17
18#include "vtkITK.h"
19
20// ITK includes
21#include <itkCommand.h>
22#include <itkProcessObject.h>
23
24// VTK includes
25#include <vtkCommand.h>
26#include <vtkImageAlgorithm.h>
27#include <vtkImageCast.h>
28#include <vtkImageData.h>
29#include <vtkImageExport.h>
30#include <vtkImageImport.h>
31#include <vtkVersion.h>
32
33#undef itkExceptionMacro
34#define itkExceptionMacro(x) \
35 { \
36 ::std::ostringstream message; \
37 message << "itk::ERROR: " << this->GetNameOfClass() \
38 << "(" << this << "): "; \
39 std::cout << message.str().c_str() << std::endl; \
40 }
41
42#undef itkGenericExceptionMacro
43#define itkGenericExceptionMacro(x) \
44 { \
45 ::std::ostringstream message; \
46 message << "itk::ERROR: " x; \
47 std::cout << message.str() << std::endl; \
48 }
49
53class VTK_ITK_EXPORT vtkITKImageToImageFilter
54 : public vtkImageAlgorithm
55{
56public:
58 {
60#ifdef VTK_HAS_INITIALIZE_OBJECT_BASE
61 result->InitializeObjectBase();
62#endif
63 return result;
64 };
65
66 vtkTypeMacro(vtkITKImageToImageFilter, vtkImageAlgorithm);
67
68 void PrintSelf(ostream& os, vtkIndent indent) override
69 {
70 Superclass::PrintSelf ( os, indent );
71 this->vtkExporter->PrintSelf ( os, indent );
72 this->vtkImporter->PrintSelf ( os, indent );
73 };
74
78 vtkMTimeType GetMTime() override
79 {
80 vtkMTimeType t1, t2;
81
82 t1 = this->Superclass::GetMTime();
83 t2 = this->vtkExporter->GetMTime();
84 if (t2 > t1)
85 {
86 t1 = t2;
87 }
88 t2 = this->vtkImporter->GetMTime();
89 if (t2 > t1)
90 {
91 t1 = t2;
92 }
93 return t1;
94 };
95
98 void Modified() override
99 {
100 this->Superclass::Modified();
101 if (this->m_Process)
102 {
103 m_Process->Modified();
104 }
105 };
106
109 void DebugOn() override
110 {
111 this->m_Process->DebugOn();
112 };
113
116 void DebugOff() override
117 {
118 this->m_Process->DebugOff();
119 };
120
123 void SetNumberOfThreads(int val)
124 {
125 this->m_Process->SetNumberOfWorkUnits(val);
126 };
127
131 {
132 return this->m_Process->GetNumberOfWorkUnits();
133 };
134
138 void SetOutput ( vtkDataObject* d ) override { this->vtkImporter->SetOutput ( d ); };
139 virtual vtkImageData *GetOutput() { return this->vtkImporter->GetOutput(); };
140 virtual vtkImageData *GetOutput(int idx)
141 {
142 return (vtkImageData *) this->vtkImporter->GetOutput(idx);
143 };
144
147 virtual void SetInput(vtkImageData *Input)
148 {
149 this->vtkCast->SetInputData(Input);
150 };
151
152 void SetInputConnection(vtkAlgorithmOutput* input) override
153 {
154 this->vtkCast->SetInputConnection(input);
155 };
156
157 void SetInputConnection(int port, vtkAlgorithmOutput* input) override
158 {
159 this->vtkCast->SetInputConnection(port, input);
160 };
161
164 virtual vtkDataObject* GetInput()
165 {
166 return (vtkDataObject::SafeDownCast( this->vtkCast->GetInput() ));
167 };
168
171 using vtkAlgorithm::Update;
172 void Update() override
173 {
174 this->vtkCast->Update();
175 this->vtkImporter->Update();
176 }
177 void Update(int port) override
178 {
179 this->vtkCast->Update();
180 this->vtkImporter->Update(port);
181 }
183 {
184 if ( this->m_Process )
185 {
186 this->UpdateProgress ( m_Process->GetProgress() );
187 }
188 };
190 {
191 this->InvokeEvent(vtkCommand::StartEvent,nullptr);
192 };
194 {
195 this->InvokeEvent(vtkCommand::EndEvent,nullptr);
196 };
197
198
199 protected:
200
203 void ExecuteData (vtkDataObject *) override
204 {
205 vtkWarningMacro(<< "This filter does not respond to Update(). Doing a GetOutput->Update() instead.");
206 }
207
208
210 {
212 this->vtkCast = vtkImageCast::New();
213 this->vtkExporter = vtkImageExport::New();
214 this->vtkImporter = vtkImageImport::New();
215 this->vtkExporter->SetInputConnection( this->vtkCast->GetOutputPort() );
216 this->m_Process = nullptr;
217 this->m_ProgressCommand = MemberCommand::New();
218 this->m_ProgressCommand->SetCallbackFunction ( this, &vtkITKImageToImageFilter::HandleProgressEvent );
219 this->m_StartEventCommand = MemberCommand::New();
220 this->m_StartEventCommand->SetCallbackFunction ( this, &vtkITKImageToImageFilter::HandleStartEvent );
221 this->m_EndEventCommand = MemberCommand::New();
222 this->m_EndEventCommand->SetCallbackFunction ( this, &vtkITKImageToImageFilter::HandleEndEvent );
223 };
225 {
226 vtkDebugMacro ("Destructing vtkITKImageToImageFilter");
227 this->vtkExporter->Delete();
228 this->vtkImporter->Delete();
229 this->vtkCast->Delete();
230 };
231
233 void LinkITKProgressToVTKProgress ( itk::ProcessObject* process )
234 {
235 if ( process )
236 {
237 this->m_Process = process;
238 this->m_Process->AddObserver ( itk::ProgressEvent(), this->m_ProgressCommand );
239 this->m_Process->AddObserver ( itk::StartEvent(), this->m_StartEventCommand );
240 this->m_Process->AddObserver ( itk::EndEvent(), this->m_EndEventCommand );
241 }
242 };
243
244 typedef itk::SimpleMemberCommand<vtkITKImageToImageFilter> MemberCommand;
245 typedef MemberCommand::Pointer MemberCommandPointer;
246
247 itk::ProcessObject::Pointer m_Process;
251
254 vtkImageCast* vtkCast;
255 vtkImageImport* vtkImporter;
256 vtkImageExport* vtkExporter;
257
258private:
260 void operator=(const vtkITKImageToImageFilter&) = delete;
261};
262
263#endif
void DebugOff() override
Pass DebugOff.
virtual vtkDataObject * GetInput()
Return the input to the filter.
MemberCommandPointer m_StartEventCommand
void DebugOn() override
Pass DebugOn.
void ExecuteData(vtkDataObject *) override
ETX.
void SetOutput(vtkDataObject *d) override
void Modified() override
Pass modified message to itk filter.
void LinkITKProgressToVTKProgress(itk::ProcessObject *process)
BTX.
MemberCommandPointer m_EndEventCommand
void SetInputConnection(int port, vtkAlgorithmOutput *input) override
void SetInputConnection(vtkAlgorithmOutput *input) override
void PrintSelf(ostream &os, vtkIndent indent) override
itk::ProcessObject::Pointer m_Process
int GetNumberOfThreads()
Pass SetNumberOfThreads.
MemberCommand::Pointer MemberCommandPointer
void SetNumberOfThreads(int val)
Pass SetNumberOfThreads.
virtual void SetInput(vtkImageData *Input)
Set the Input of the filter.
vtkMTimeType GetMTime() override
itk::SimpleMemberCommand< vtkITKImageToImageFilter > MemberCommand
virtual vtkImageData * GetOutput()
MemberCommandPointer m_ProgressCommand
virtual vtkImageData * GetOutput(int idx)
static vtkITKImageToImageFilter * New()