#include <itkVector.h>
// -------------------------------------------------------------------------
-#define cpPlugins_VTKImage_Demangle( TI, T, D, o ) \
- if( typeid( TI ) == typeid( itk::Image< T, D > ) ) \
- this->_ITK_2_VTK< T, D >( o )
-
-// -------------------------------------------------------------------------
-#define cpPlugins_VTKImageArray_Demangle( TI, T, P, DP, DI, o ) \
- if( typeid( TI ) == typeid( itk::Image< T< P, DP >, DI > ) ) \
- this->_ITK_2_VTK< T< P, DP >, DI >( o )
-
-// -------------------------------------------------------------------------
-#define cpPlugins_VTKImage_Demangle_AllDims( TI, T, o ) \
- cpPlugins_VTKImage_Demangle( TI, T, 2, o ); \
- else cpPlugins_VTKImage_Demangle( TI, T, 3, o )
-
-// -------------------------------------------------------------------------
-#define cpPlugins_VTKImageArray_Demangle_AllDims( TI, T, P, o ) \
- cpPlugins_VTKImageArray_Demangle( TI, T, P, 2, 2, o ); \
- else cpPlugins_VTKImageArray_Demangle( TI, T, P, 3, 3, o )
-
-// -------------------------------------------------------------------------
-template< class I >
+template< unsigned int D >
void cpPlugins::Interface::Image::
-SetITK( itk::Object* object )
+_ITK_2_VTK_0( itk::LightObject* o )
{
- // Check if input object has the desired type
- I* image = dynamic_cast< I* >( object );
- if( image == NULL )
+ if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
+ {
+ this->_ITK_2_VTK_1< char, D >( o );
+ this->_ITK_2_VTK_1< short, D >( o );
+ this->_ITK_2_VTK_1< int, D >( o );
+ this->_ITK_2_VTK_1< long, D >( o );
+ this->_ITK_2_VTK_1< unsigned char, D >( o );
+ this->_ITK_2_VTK_1< unsigned short, D >( o );
+ this->_ITK_2_VTK_1< unsigned int, D >( o );
+ this->_ITK_2_VTK_1< unsigned long, D >( o );
+ this->_ITK_2_VTK_1< float, D >( o );
+ this->_ITK_2_VTK_1< double, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o );
+ this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o );
+ this->_ITK_2_VTK_1< itk::DiffusionTensor3D< float >, D >( o );
+ this->_ITK_2_VTK_1< itk::DiffusionTensor3D< double >, D >( o );
+ this->_ITK_2_VTK_1< itk::Vector< float, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::Vector< double, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::CovariantVector< float, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::CovariantVector< double, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::Point< float, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::Point< double, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< float, D >, D >( o );
+ this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< double, D >, D >( o );
+ }
+ else
{
- this->m_ITKObject = NULL;
this->m_VTKObject = NULL;
- this->m_ITKvVTKConnection = NULL;
+ this->m_ITKvVTK = NULL;
this->Modified( );
- return;
} // fi
+}
- // --------- TODO ---------------
- typename I::DirectionType norm_dir;
- norm_dir.SetIdentity( );
- image->SetDirection( norm_dir );
- // --------- TODO ---------------
-
- // Connect it to VTK
- cpPlugins_VTKImage_Demangle_AllDims( I, char, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, short, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, int, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, long, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned char, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned short, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned int, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned long, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, float, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, double, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< char >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< short >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< int >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< long >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned char >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned short >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned int >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned long >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< float >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< double >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< char >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< short >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< int >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< long >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned char >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned short >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned int >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned long >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< float >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< double >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::DiffusionTensor3D< float >, image );
- else cpPlugins_VTKImage_Demangle_AllDims( I, itk::DiffusionTensor3D< double >, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Vector, float, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Vector, double, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::CovariantVector, float, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::CovariantVector, double, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Point, float, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Point, double, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::SymmetricSecondRankTensor, float, image );
- else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::SymmetricSecondRankTensor, double, image );
- else
+// -------------------------------------------------------------------------
+template< class P, unsigned int D >
+void cpPlugins::Interface::Image::
+_ITK_2_VTK_1( itk::LightObject* o )
+{
+ if( dynamic_cast< itk::Image< P, D >* >( o ) == NULL )
{
this->m_VTKObject = NULL;
- this->m_ITKvVTKConnection = NULL;
-
- } // fi
-
- // Keep objects
- this->m_ITKObject = object;
- this->Modified( );
+ this->m_ITKvVTK = NULL;
+ this->Modified( );
+ }
+ else
+ this->_ITK_2_VTK_2< itk::Image< P, D > >( o );
}
// -------------------------------------------------------------------------
-template< class P, unsigned int D >
+template< class I >
void cpPlugins::Interface::Image::
-_ITK_2_VTK( itk::Object* object )
+_ITK_2_VTK_2( itk::LightObject* o )
{
- typedef itk::Image< P, D > _I;
- typedef itk::ImageToVTKImageFilter< _I > _I2Vtk;
-
- // Check (yes, again!!!) if input object has the desired type
- _I* image = dynamic_cast< _I* >( object );
- if( image == NULL )
- return;
-
- // Connect it to VTK
- _I2Vtk* f =
- dynamic_cast< _I2Vtk* >( this->m_ITKvVTKConnection.GetPointer( ) );
- if( f == NULL )
+ typedef itk::ImageToVTKImageFilter< I > _I2V;
+
+ I* image = dynamic_cast< I* >( o );
+ if( image != NULL )
+ {
+ _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
+ if( f == NULL )
+ {
+ typename _I2V::Pointer nf = _I2V::New( );
+ this->m_ITKvVTK = nf;
+ f = nf.GetPointer( );
+
+ } // fi
+ f->SetInput( image );
+ f->Update( );
+
+ // Keep object track
+ this->m_ITKObject = o;
+ this->m_VTKObject = f->GetOutput( );
+ }
+ else
{
- typename _I2Vtk::Pointer nf = _I2Vtk::New( );
- this->m_ITKvVTKConnection = nf;
- f = nf.GetPointer( );
+ this->m_VTKObject = NULL;
+ this->m_ITKvVTK = NULL;
} // fi
- f->SetInput( image );
- f->Update( );
-
- // Keep object track
- this->m_VTKObject = f->GetOutput( );
+ this->Modified( );
}
#ifndef cpPlugins_Interface_EXPORTS