#ifndef __CPPLUGINS__IMAGE__HXX__ #define __CPPLUGINS__IMAGE__HXX__ #include // ------------------------------------------------------------------------- template< unsigned int D > bool cpPlugins::Image:: _ITK_2_VTK_0( itk::LightObject* o ) { bool s = false; if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL ) { s |= this->_ITK_2_VTK_1< char, D >( o ); s |= this->_ITK_2_VTK_1< short, D >( o ); s |= this->_ITK_2_VTK_1< int, D >( o ); s |= this->_ITK_2_VTK_1< long, D >( o ); s |= this->_ITK_2_VTK_1< float, D >( o ); s |= this->_ITK_2_VTK_1< double, D >( o ); s |= this->_ITK_2_VTK_1< unsigned char, D >( o ); s |= this->_ITK_2_VTK_1< unsigned short, D >( o ); s |= this->_ITK_2_VTK_1< unsigned int, D >( o ); s |= this->_ITK_2_VTK_1< unsigned long, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o ); s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, D >( o ); /* TODO s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< float >, D >( o ); s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< double >, D >( o ); s |= this->_ITK_2_VTK_1< itk::Vector< float, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::Vector< double, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::CovariantVector< float, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::CovariantVector< double, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::Point< float, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::Point< double, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< float, D >, D >( o ); s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< double, D >, D >( o ); */ } // fi return( s ); } // ------------------------------------------------------------------------- template< class P, unsigned int D > bool cpPlugins::Image:: _ITK_2_VTK_1( itk::LightObject* o ) { if( dynamic_cast< itk::Image< P, D >* >( o ) != NULL ) return( this->_ITK_2_VTK_2< itk::Image< P, D > >( o ) ); else return( false ); } // ------------------------------------------------------------------------- template< class T > bool cpPlugins::Image:: _ITK_2_VTK_2( itk::LightObject* o ) { typedef itk::ImageToVTKImageFilter< T > _I2V; T* image = dynamic_cast< T* >( 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( ); return( true ); } else return( false ); } /* * ========================================================================= * Demangle macros * ========================================================================= */ #define cpPlugin_Image_Demangle_Dim( FUNC, INPUT, D ) \ this->FUNC( INPUT->GetITK< itk::ImageBase< D > >( ) ) #define cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, PIXEL, D ) \ this->FUNC( dynamic_cast< itk::Image< PIXEL, D >* >( INPUT ) ) #define cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, PIXEL, D ) \ this->FUNC( dynamic_cast< itk::Image< VECTOR< PIXEL, D >, D >* >( INPUT ) ) #define cpPlugin_Image_Demangle_Pixel_AllScalars( r, FUNC, INPUT, D ) \ r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, char, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, short, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, int, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, long, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, float, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, double, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned char, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned short, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned int, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned long, D ) #define cpPlugin_Image_Demangle_Pixel_AllColor( r, FUNC, INPUT, D ) \ r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< char >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< short >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< int >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< long >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< float >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< double >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned char >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned short >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned int >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned long >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< char >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< short >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< int >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< long >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< float >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< double >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned char >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned short >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned int >, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned long >, D ) #define cpPlugin_Image_Demangle_VectorPixel_AllFloats( r, FUNC, INPUT, VECTOR, D ) \ r = cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, float, D ); \ if( r != "" ) r = cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, double, D ) #endif // __CPPLUGINS__IMAGE__HXX__ // eof - $RCSfile$