#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 cpPlugins_Image_Demangle_Dim( F, I, D ) \ if( dynamic_cast< itk::ImageBase< D >* >( I ) != NULL ) \ this->F( dynamic_cast< itk::ImageBase< D >* >( I ) ) #define cpPlugins_Image_Demangle_Pixel_Dim( F, I, P, D ) \ if( dynamic_cast< itk::Image< P, D >* >( I ) != NULL ) \ this->F( dynamic_cast< itk::Image< P, D >* >( I ) ) #define cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, P, D ) \ if( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) != NULL ) \ this->F( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) ) #define cpPlugins_Image_Demangle_VectorPixel_Dim( F, I, V, P, D ) \ if( dynamic_cast< itk::Image< V< P, D >, D >* >( I ) != NULL ) \ this->F( dynamic_cast< itk::Image< V< P, D >, D >* >( I ) ) #define cpPlugins_Image_Demangle_Pixel_AllInts( F, I, D ) \ cpPlugins_Image_Demangle_Pixel_Dim ( F, I, char, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, short, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, int, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, long, D ) #define cpPlugins_Image_Demangle_Pixel_AllUInts( F, I, D ) \ cpPlugins_Image_Demangle_Pixel_Dim ( F, I, unsigned char, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned short, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned int, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned long, D ) #define cpPlugins_Image_Demangle_Pixel_AllFloats( F, I, D ) \ cpPlugins_Image_Demangle_Pixel_Dim ( F, I, float, D ); \ else cpPlugins_Image_Demangle_Pixel_Dim( F, I, double, D ) #define cpPlugins_Image_Demangle_Pixel_AllScalars( F, I, D ) \ cpPlugins_Image_Demangle_Pixel_AllInts ( F, I, D ); \ else cpPlugins_Image_Demangle_Pixel_AllUInts( F, I, D ); \ else cpPlugins_Image_Demangle_Pixel_AllInts ( F, I, D ) #define cpPlugins_Image_Demangle_ColorPixel_AllInts( F, I, C, D ) \ cpPlugins_Image_Demangle_ColorPixel_Dim ( F, I, C, char, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, short, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, int, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, long, D ) #define cpPlugins_Image_Demangle_ColorPixel_AllUInts( F, I, C, D ) \ cpPlugins_Image_Demangle_ColorPixel_Dim ( F, I, C, unsigned char, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned short, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned int, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned long, D ) #define cpPlugins_Image_Demangle_ColorPixel_AllFloats( F, I, C, D ) \ cpPlugins_Image_Demangle_ColorPixel_Dim ( F, I, C, float, D ); \ else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, double, D ) #define cpPlugins_Image_Demangle_ColorPixel_AllScalars( F, I, C, D ) \ cpPlugins_Image_Demangle_ColorPixel_AllInts ( F, I, C, D ); \ else cpPlugins_Image_Demangle_ColorPixel_AllUInts( F, I, C, D ); \ else cpPlugins_Image_Demangle_ColorPixel_AllInts ( F, I, C, D ) /* TODO #define cpPlugins_Image_Demangle_Pixel_AllColor( r, FUNC, INPUT, D ) \ r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< char >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< short >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< int >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< long >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< float >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< double >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned char >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned short >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned int >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned long >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< char >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< short >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< int >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< long >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< float >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< double >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned char >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned short >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned int >, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned long >, D ) #define cpPlugins_Image_Demangle_VectorPixel_AllFloats( r, FUNC, INPUT, VECTOR, D ) \ r = cpPlugins_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, float, D ); \ if( r != "" ) r = cpPlugins_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, double, D ) */ #endif // __CPPLUGINS__IMAGE__HXX__ // eof - $RCSfile$