]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/BaseProcessObjects.h
...
[cpPlugins.git] / lib / cpPlugins / Interface / BaseProcessObjects.h
index 687a00fa6a80a399209699390277c09315a0b404..a120b8446398233ca6a964161fb9ce0c2cc7b79d 100644 (file)
 #include <cpPlugins/Interface/ProcessObject.h>
 
 // -------------------------------------------------------------------------
-#define cpPlugins_Interface_Define_ProcessObject( O, S )        \
-  class cpPlugins_Interface_EXPORT O                            \
-    : public S                                                  \
-  {                                                             \
-  public:                                                       \
-    typedef O                               Self;               \
-    typedef S                               Superclass;         \
-    typedef itk::SmartPointer< Self >       Pointer;            \
-    typedef itk::SmartPointer< const Self > ConstPointer;       \
-  public:                                                       \
-    itkTypeMacro( O, S );                                       \
-  protected:                                                    \
-    O( );                                                       \
-    virtual ~O( );                                              \
-  private:                                                      \
-    O( const Self& );                                           \
-    Self& operator=( const Self& );                             \
+#define cpPlugins_Define_ProcessObject( O, S )                          \
+  class cpPlugins_Interface_EXPORT O                                    \
+    : public S                                                          \
+  {                                                                     \
+  public:                                                               \
+    typedef O                               Self;                       \
+    typedef S                               Superclass;                 \
+    typedef itk::SmartPointer< Self >       Pointer;                    \
+    typedef itk::SmartPointer< const Self > ConstPointer;               \
+  public:                                                               \
+    itkTypeMacro( O, S );                                               \
+    cpPlugins_Id_Macro( cpPlugins::Interface::O, ProcessObject );       \
+  protected:                                                            \
+    O( );                                                               \
+    virtual ~O( );                                                      \
+  private:                                                              \
+    O( const Self& );                                                   \
+    Self& operator=( const Self& );                                     \
   }
 
 // -------------------------------------------------------------------------
-#define cpPlugins_Interface_Code_ProcessObject( O )     \
-  cpPlugins::Interface::O::O( ) : Superclass( )         \
-  {                                                     \
-    this->m_ClassName = "cpPlugins::Interface::#O";     \
-    this->m_ClassCategory = "#O";                       \
-  }                                                     \
+#define cpPlugins_Code_ProcessObject( O )               \
+  cpPlugins::Interface::O::O( ) : Superclass( ) { }     \
   cpPlugins::Interface::O::~O( ) { }
 
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle( T, D, I, O, R, F )            \
+  if( ( O = I->GetITK< itk::Image< T, D > >( ) ) != NULL )      \
+    R = this->F< itk::Image< T, D > >( O )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayImage_Demangle( A, T, DI, DA, I, O, R, F )       \
+  if( ( O = I->GetITK< itk::Image< A< T, DA >, DI > >( ) ) != NULL )    \
+    R = this->F< itk::Image< A< T, DA >, DI > >( O )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle( T, D, I, O, R, F )              \
+  if( ( O = I->GetITK< itk::VectorImage< T, D > >( ) ) != NULL )        \
+    R = this->F< itk::VectorImage< T, D > >( O )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayVectorImage_Demangle( A, T, DI, DA, I, O, R, F ) \
+  if( ( O = I->GetITK< itk::VectorImage< A< T, DA >, DI > >( ) ) != NULL ) \
+   r = this->F< itk::VectorImage< A< T, DA >, DI > >( O )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllScalarTypes( D, I, O, R, F )        \
+  cpPlugins_Image_Demangle( char, D, I, O, R, F );                      \
+  else cpPlugins_Image_Demangle( short, D, I, O, R, F );                \
+  else cpPlugins_Image_Demangle( int, D, I, O, R, F );                  \
+  else cpPlugins_Image_Demangle( long, D, I, O, R, F );                 \
+  else cpPlugins_Image_Demangle( unsigned char, D, I, O, R, F );        \
+  else cpPlugins_Image_Demangle( unsigned short, D, I, O, R, F );       \
+  else cpPlugins_Image_Demangle( unsigned int, D, I, O, R, F );         \
+  else cpPlugins_Image_Demangle( unsigned long, D, I, O, R, F );        \
+  else cpPlugins_Image_Demangle( float, D, I, O, R, F );                \
+  else cpPlugins_Image_Demangle( double, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllComplexTypes( D, I, O, R, F )       \
+  cpPlugins_Image_Demangle( std::complex< float >, D, I, O, R, F );     \
+  else cpPlugins_Image_Demangle( std::complex< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllRGBTypes( D, I, O, R, F )           \
+  cpPlugins_Image_Demangle( itk::RGBPixel< char >, D, I, O, R, F );     \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< short >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< int >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< long >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned char >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned short >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned int >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned long >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< float >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBPixel< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllRGBATypes( D, I, O, R, F )           \
+  cpPlugins_Image_Demangle( itk::RGBAPixel< char >, D, I, O, R, F );     \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< short >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< int >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< long >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned char >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned short >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned int >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned long >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< float >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::RGBAPixel< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ) \
+  cpPlugins_Image_Demangle( itk::DiffusionTensor3D< float >, D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::DiffusionTensor3D< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayImage_Demangle_AllVectorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayImage_Demangle( itk::Vector, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle( itk::Vector, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayImage_Demangle_AllCovariantVectorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayImage_Demangle( itk::CovariantVector, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle( itk::CovariantVector, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayImage_Demangle_AllPointTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayImage_Demangle( itk::Point, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle( itk::Point, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayImage_Demangle_AllSymmetricSecondRankTensorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayImage_Demangle( itk::SymmetricSecondRankTensor, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle( itk::SymmetricSecondRankTensor, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Image_Demangle_AllTypes( D, I, O, R, F )              \
+  cpPlugins_Image_Demangle_AllScalarTypes( D, I, O, R, F );             \
+  else cpPlugins_Image_Demangle_AllComplexTypes( D, I, O, R, F );       \
+  else cpPlugins_Image_Demangle_AllRGBTypes( D, I, O, R, F );           \
+  else cpPlugins_Image_Demangle_AllRGBATypes( D, I, O, R, F );          \
+  else cpPlugins_Image_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ); \
+  else cpPlugins_Image_Demangle( itk::Offset< D >, D, I, O, R, F );     \
+  else cpPlugins_ArrayImage_Demangle_AllVectorTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle_AllCovariantVectorTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle_AllPointTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayImage_Demangle_AllSymmetricSecondRankTensorTypes( D, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllScalarTypes( D, I, O, R, F )  \
+  cpPlugins_VectorImage_Demangle( char, D, I, O, R, F );                \
+  else cpPlugins_VectorImage_Demangle( short, D, I, O, R, F );          \
+  else cpPlugins_VectorImage_Demangle( int, D, I, O, R, F );            \
+  else cpPlugins_VectorImage_Demangle( long, D, I, O, R, F );           \
+  else cpPlugins_VectorImage_Demangle( unsigned char, D, I, O, R, F );  \
+  else cpPlugins_VectorImage_Demangle( unsigned short, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( unsigned int, D, I, O, R, F );   \
+  else cpPlugins_VectorImage_Demangle( unsigned long, D, I, O, R, F );  \
+  else cpPlugins_VectorImage_Demangle( float, D, I, O, R, F );          \
+  else cpPlugins_VectorImage_Demangle( double, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllComplexTypes( D, I, O, R, F ) \
+  cpPlugins_VectorImage_Demangle( std::complex< float >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( std::complex< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllRGBTypes( D, I, O, R, F )     \
+  cpPlugins_VectorImage_Demangle( itk::RGBPixel< char >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< short >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< int >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< long >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned char >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned short >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned int >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned long >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< float >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBPixel< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllRGBATypes( D, I, O, R, F )    \
+  cpPlugins_VectorImage_Demangle( itk::RGBAPixel< char >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< short >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< int >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< long >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned char >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned short >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned int >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned long >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< float >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ) \
+  cpPlugins_VectorImage_Demangle( itk::DiffusionTensor3D< float >, D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::DiffusionTensor3D< double >, D, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayVectorImage_Demangle_AllVectorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayVectorImage_Demangle( itk::Vector, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle( itk::Vector, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayVectorImage_Demangle_AllCovariantVectorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayVectorImage_Demangle( itk::CovariantVector, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle( itk::CovariantVector, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayVectorImage_Demangle_AllPointTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayVectorImage_Demangle( itk::Point, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle( itk::Point, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_ArrayVectorImage_Demangle_AllSymmetricSecondRankTensorTypes( DI, DA, I, O, R, F ) \
+  cpPlugins_ArrayVectorImage_Demangle( itk::SymmetricSecondRankTensor, float, DI, DA, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle( itk::SymmetricSecondRankTensor, double, DI, DA, I, O, R, F )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_VectorImage_Demangle_AllTypes( D, I, O, R, F )        \
+  cpPlugins_VectorImage_Demangle_AllScalarTypes( D, I, O, R, F );       \
+  else cpPlugins_VectorImage_Demangle_AllComplexTypes( D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle_AllRGBTypes( D, I, O, R, F );     \
+  else cpPlugins_VectorImage_Demangle_AllRGBATypes( D, I, O, R, F );    \
+  else cpPlugins_VectorImage_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ); \
+  else cpPlugins_VectorImage_Demangle( itk::Offset< D >, D, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle_AllVectorTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle_AllCovariantVectorTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle_AllPointTypes( D, D, I, O, R, F ); \
+  else cpPlugins_ArrayVectorImage_Demangle_AllSymmetricSecondRankTensorTypes( D, D, I, O, R, F )
+
 namespace cpPlugins
 {
   namespace Interface
   {
-    cpPlugins_Interface_Define_ProcessObject( SourceObject, ProcessObject );
-    cpPlugins_Interface_Define_ProcessObject( SinkObject, ProcessObject );
-    cpPlugins_Interface_Define_ProcessObject( FilterObject, ProcessObject );
-    cpPlugins_Interface_Define_ProcessObject( ImageSource, SourceObject );
-    cpPlugins_Interface_Define_ProcessObject( MeshSource, SourceObject );
-    cpPlugins_Interface_Define_ProcessObject( ImageSink, SinkObject );
-    cpPlugins_Interface_Define_ProcessObject( MeshSink, SinkObject );
-    cpPlugins_Interface_Define_ProcessObject( ImageToImageFitler, FilterObject );
-    cpPlugins_Interface_Define_ProcessObject( ImageToMeshFitler, FilterObject );
-    cpPlugins_Interface_Define_ProcessObject( MeshToImageFitler, FilterObject );
-    cpPlugins_Interface_Define_ProcessObject( MeshToMeshFitler, FilterObject );
+    cpPlugins_Define_ProcessObject( SourceObject, ProcessObject );
+    cpPlugins_Define_ProcessObject( SinkObject, ProcessObject );
+    cpPlugins_Define_ProcessObject( FilterObject, ProcessObject );
+    cpPlugins_Define_ProcessObject( ImageSource, SourceObject );
+    cpPlugins_Define_ProcessObject( MeshSource, SourceObject );
+    cpPlugins_Define_ProcessObject( ImageSink, SinkObject );
+    cpPlugins_Define_ProcessObject( MeshSink, SinkObject );
+    cpPlugins_Define_ProcessObject( ImageToImageFilter, FilterObject );
+    cpPlugins_Define_ProcessObject( ImageToMeshFilter, FilterObject );
+    cpPlugins_Define_ProcessObject( MeshToImageFilter, FilterObject );
+    cpPlugins_Define_ProcessObject( MeshToMeshFilter, FilterObject );
 
   } // ecapseman