#ifndef __CPPLUGINS__IMAGE__HXX__ #define __CPPLUGINS__IMAGE__HXX__ #include #include // ------------------------------------------------------------------------- template< unsigned int D > bool cpPlugins::Image:: _ITK_2_VTK_0_Scalar( itk::LightObject* o ) { bool s = false; if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL ) { s |= this->_ITK_2_VTK_1< char, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< short, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< int, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< long, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< float, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< double, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< unsigned char, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< unsigned short, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< unsigned int, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< unsigned long, D >( o ); } // fi return( s ); } // ------------------------------------------------------------------------- template< unsigned int D > bool cpPlugins::Image:: _ITK_2_VTK_0_Color( itk::LightObject* o ) { bool s = false; if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL ) { s |= this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o ); if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, 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_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_AllFloats( 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_AllFloats( F, I, C, D ) #endif // __CPPLUGINS__IMAGE__HXX__ // eof - $RCSfile$