#include #include #include #include #include #include #include // ------------------------------------------------------------------------- void cpInstances::Image:: SetITK( itk::LightObject* o ) { this->Superclass::SetITK( o ); this->m_VTK = NULL; this->m_ITKvVTK = NULL; this->Modified( ); } // ------------------------------------------------------------------------- void cpInstances::Image:: SetVTK( vtkObjectBase* o ) { this->Superclass::SetVTK( o ); this->m_ITK = NULL; this->m_ITKvVTK = NULL; this->Modified( ); /* TODO vtkImageData* img = dynamic_cast< vtkImageData* >( o ); this->Superclass::SetVTK( img ); if( img == NULL ) { this->m_ITK = NULL; this->m_ITKvVTK = NULL; this->Modified( ); return; } // fi bool success = false; auto stype = img->GetScalarType( ); #ifdef cpPlugins_CONFIG_INTEGER_TYPES_char if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< char >( img ); if( stype == VTK_UNSIGNED_CHAR ) success = this->_VTK_2_ITK_0< unsigned char >( img ); #endif // cpPlugins_CONFIG_INTEGER_TYPES_char #ifdef cpPlugins_CONFIG_INTEGER_TYPES_short if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< short >( img ); if( stype == VTK_UNSIGNED_CHAR ) success = this->_VTK_2_ITK_0< unsigned short >( img ); #endif // cpPlugins_CONFIG_INTEGER_TYPES_short #ifdef cpPlugins_CONFIG_INTEGER_TYPES_int if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< int >( img ); if( stype == VTK_UNSIGNED_CHAR ) success = this->_VTK_2_ITK_0< unsigned int >( img ); #endif // cpPlugins_CONFIG_INTEGER_TYPES_int #ifdef cpPlugins_CONFIG_INTEGER_TYPES_long if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< long >( img ); if( stype == VTK_UNSIGNED_CHAR ) success = this->_VTK_2_ITK_0< unsigned long >( img ); #endif // cpPlugins_CONFIG_INTEGER_TYPES_long #ifdef cpPlugins_CONFIG_REAL_TYPES_float if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< float >( img ); #endif // cpPlugins_CONFIG_REAL_TYPES_float #ifdef cpPlugins_CONFIG_REAL_TYPES_double if( stype == VTK_CHAR ) success = this->_VTK_2_ITK_0< double >( img ); #endif // cpPlugins_CONFIG_REAL_TYPES_double */ /* TODO #define cpPlugins_CONFIG_COLOR_PIXELS_RGBPixel #define cpPlugins_CONFIG_COLOR_PIXELS_RGBAPixel #define cpPlugins_CONFIG_VECTORS_CovariantVector #define cpPlugins_CONFIG_VECTORS_Point #define cpPlugins_CONFIG_VECTORS_SymmetricSecondRankTensor #define cpPlugins_CONFIG_VECTORS_Vector #define cpPlugins_CONFIG_DIFFUSIONTENSORS_DiffusionTensor3D #define cpPlugins_CONFIG_MATRICES_Matrix */ /* TODO if( !success ) { this->m_ITK = NULL; this->m_ITKvVTK = NULL; } // fi this->Modified( ); */ } // ------------------------------------------------------------------------- cpInstances::Image:: Image( ) : Superclass( ) { } // ------------------------------------------------------------------------- cpInstances::Image:: ~Image( ) { } // ------------------------------------------------------------------------- void cpInstances::Image:: _UpdateITK( ) const { // TODO: std::cout << "Create ITK representation." << std::endl; } // ------------------------------------------------------------------------- void cpInstances::Image:: _UpdateVTK( ) const { auto i = const_cast< itk::LightObject* >( this->m_ITK.GetPointer( ) ); auto v = const_cast< vtkObjectBase* >( this->m_VTK.GetPointer( ) ); if( i != NULL && v == NULL ) { cpPlugins_Demangle_Image_VisualDims_1( i, _ITK_2_VTK_0 ) cpPlugins_Demangle_Image_DiffTensors3D_1( i, _ITK_2_VTK_1 ); } // fi } // ------------------------------------------------------------------------- template< class _TImage > void cpInstances::Image:: _ITK_2_VTK_0( _TImage* image ) const { static const unsigned int d = _TImage::ImageDimension; cpPlugins_Demangle_Image_ScalarPixels_1( image, _ITK_2_VTK_1, d ) cpPlugins_Demangle_Image_ColorPixels_1( image, _ITK_2_VTK_1, d ) cpPlugins_Demangle_Image_VectorPixels_1( image, _ITK_2_VTK_1, d ); } // ------------------------------------------------------------------------- #include template< class _TImage > void cpInstances::Image:: _ITK_2_VTK_1( _TImage* image ) const { typedef itk::ImageToVTKImageFilter< _TImage > _TFilter; Self* self = const_cast< Self* >( this ); _TFilter* f = dynamic_cast< _TFilter* >( self->m_ITKvVTK.GetPointer( ) ); if( f == NULL ) { typename _TFilter::Pointer nf = _TFilter::New( ); self->m_ITKvVTK = nf; f = nf.GetPointer( ); } // fi f->SetInput( image ); f->Update( ); // Keep object track self->m_ITK = image; self->m_VTK = f->GetOutput( ); } // ------------------------------------------------------------------------- template< class _TPixel > bool cpInstances::Image:: _VTK_2_ITK_0( vtkImageData* image ) { bool success = false; unsigned int dim = image->GetDataDimension( ); #ifdef cpPlugins_CONFIG_VISUAL_DIMENSIONS_2 if( dim == 2 ) success = this->_VTK_2_ITK_1< _TPixel, 2 >( image ); #endif // cpPlugins_CONFIG_VISUAL_DIMENSIONS_2 #ifdef cpPlugins_CONFIG_VISUAL_DIMENSIONS_3 if( dim == 3 ) success = this->_VTK_2_ITK_1< _TPixel, 3 >( image ); #endif // cpPlugins_CONFIG_VISUAL_DIMENSIONS_2 return( success ); } // ------------------------------------------------------------------------- template< class _TPixel, unsigned int _VDim > bool cpInstances::Image:: _VTK_2_ITK_1( vtkImageData* image ) { typedef itk::Image< _TPixel, _VDim > _TImage; typedef itk::VTKImageToImageFilter< _TImage > _TFilter; _TFilter* f = dynamic_cast< _TFilter* >( this->m_ITKvVTK.GetPointer( ) ); if( f == NULL ) { typename _TFilter::Pointer nf = _TFilter::New( ); this->m_ITKvVTK = nf; f = nf.GetPointer( ); } // fi f->SetInput( image ); f->Update( ); // Keep object track this->m_VTK = image; this->m_ITK = f->GetOutput( ); return( true ); } // eof - $RCSfile$