]> Creatis software - bbtk.git/commitdiff
3480 Bug typeid in Macos
authorEduardo DAVILA <davila@creatis.insa-lyon.fr>
Tue, 21 Dec 2021 16:14:03 +0000 (17:14 +0100)
committerEduardo DAVILA <davila@creatis.insa-lyon.fr>
Tue, 21 Dec 2021 16:14:03 +0000 (17:14 +0100)
kernel/src/bbtkAny.h
packages/itk/src/bbitkImage.h
packages/itk/src/bbitkImageProperties.cxx
packages/itk/src/bbitkResampleImageFilter.h
packages/itkvtk/src/bbitkvtkitkImage2vtkImageData.cxx
packages/itkvtk/src/bbitkvtkitkImageVector2vtkImageDataVector.cxx
packages/itkvtk/src/bbitkvtkvtkImageData2itkImage.cxx

index 71edc872f423209239dde51d298720b0329c72b0..9f161c97f08842ef35765a38323c2988d455fc06 100644 (file)
@@ -311,7 +311,13 @@ namespace bbtk
     template<typename Type>
     inline bool contains()
     {
-      return ( type() == typeid(Type) );
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+             if ( strcmp( type().name()  , typeid(Type).name() ) ==0 ) return true; else return false;
+#else
+             return ( type() == typeid(Type) );
+#endif
     }
 
     /// Returns true iff the contained type is a pointer
@@ -323,7 +329,14 @@ namespace bbtk
     /// Returns true iff the contained type is t
     inline bool contains(TypeInfo t)
     {
-      return ( (bool)((type() == t)!=0) );
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+        bool compTmp = (strcmp( type().name()  , t.name() ) == 0);
+        return ( compTmp!=0 );
+#else
+        return ( (bool)((type() == t)!=0) );
+#endif
      }
 
     /// Returns true iff any of type ValueType can be held 
@@ -344,14 +357,13 @@ namespace bbtk
                         <<"> with content : "
                         <<HumanTypeName(type())<<std::endl);
 
-        printf("EED bbtkAny get()   self=%s \n" , HumanTypeName<self >().c_str() );
-        printf("EED bbtkAny get()   ValueType=%s \n" , bbtk::HumanTypeName<ValueType>().c_str() );
-        printf("EED bbtkAny get()   Type=%s \n" , bbtk::HumanTypeName<>(type()).c_str()  );
-        printf("EED bbtkAny get()   type name=(-%s-) \n" , type().name()  );
-        printf("EED bbtkAny get()   ValueType name=(-%s-) \n" , typeid(ValueType).name()  );
-// 2021-12-15
-        if ( strcmp( type().name()  , typeid(ValueType).name() ) ==0 )
-//        if ( type() == typeid(ValueType) )
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+    if ( strcmp( type().name()  , typeid(ValueType).name() ) ==0 )
+#else
+    if ( type() == typeid(ValueType) )
+#endif
         {
             return static_cast< anyholder<ValueType> *>(content)->held;
         }
@@ -366,7 +378,13 @@ namespace bbtk
     template<typename ValueType>
     inline const ValueType* getP() const
     {
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+      if ( strcmp( type().name()  , typeid(ValueType).name() ) ==0 )
+#else
       if ( type() == typeid(ValueType) )
+#endif
        return &static_cast< anyholder<ValueType> *>(content)->held;
  
       bbtkError(HumanTypeName<self >()
index 8cc1a9482e1723eac5d0b809a447610af7ced4b0..cc754d5ebfc83714853272fbc6683dbf088c65c6 100644 (file)
@@ -72,14 +72,8 @@ namespace bbitk
   //BBTK_TYPEDEF_ITK_IMAGES_DIM(5)
 
 
-//  printf("EEDitk TYPE_INFO=%s  %s\n", TYPE_INFO.name(),  typeid(bbitk::Image_int8_t_3_##CONST##ptr).name()  ); \
 
 #define BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO)  \
-if ( TYPE_INFO == typeid(bbitk::Image_uint16_t_3_ptr) )  { printf ("Yes\n"); }else{  printf ("No\n"); } \
-if ( strcmp(TYPE_INFO.name()  , typeid(bbitk::Image_uint16_t_3_ptr).name() ) ==0 )  { printf ("Yes\n"); }else{  printf ("No\n"); } \
-  printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint8_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint8_t_3_ptr).name()  ); \
-  printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint16_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint16_t_3_ptr).name()  ); \
-  printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint32_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint32_t_3_ptr).name()  ); \
 if (false) {}
 
 #define BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) else { bbtkError("bbtk was not built for itk images of type <"<< bbtk::demangle_type_name(TYPE_INFO.name())<<">"); }
@@ -91,12 +85,17 @@ if (false) {}
   /// This macro must be used (maybe several times) between a pair of BEGIN_TEMPLATE_SWITCH and END_TEMPLATE_SWITCH macros
 
 
-// 2021-12-15
-// else if (TYPE_INFO == typeid(bbitk::TEST_TYPE))                                       \
-
-#define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE)            \
-    else if ( strcmp(TYPE_INFO.name()  , typeid(bbitk::TEST_TYPE).name() ) ==0 )        \
-    { TEMPLATE_FUNCTION<bbitk::TEMPLATE_TYPE>(); }
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+   #define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE)            \
+       else if ( strcmp(TYPE_INFO.name()  , typeid(bbitk::TEST_TYPE).name() ) ==0 )        \
+       { TEMPLATE_FUNCTION<bbitk::TEMPLATE_TYPE>(); }
+#else
+   #define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE)            \
+       else if (TYPE_INFO == typeid(bbitk::TEST_TYPE))                                     \
+       { TEMPLATE_FUNCTION<bbitk::TEMPLATE_TYPE>(); }
+#endif
 
 
 // DIMENSION 2
@@ -221,72 +220,6 @@ if (false) {}
 #  define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
 #endif
 
-
-/* EED
-// DIMENSION 3
-#ifdef BBTK_ITK_IMAGE_DIM_3
-#  ifdef BBTK_ITK_IMAGE_TYPE_int8_t
-#    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)                 \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_3_ptr,FUN,Image_int8_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_int16_t
-#    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)        \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_3_ptr,FUN,Image_int16_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_int32_t
-#    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)        \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_int32_t_3_ptr,FUN,Image_int32_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t
-#    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)        \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_uint8_t_3_ptr,FUN,Image_uint8_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t
-#    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)        \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_3_,FUN,Image_uint16_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t
-#    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)        \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_3_ptr,FUN,Image_uint32_t_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_float
-#    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)                  \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_float_3_ptr,FUN,Image_float_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
-#  endif
-#  ifdef BBTK_ITK_IMAGE_TYPE_double
-#    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)                 \
-  TEMPLATE_SWITCH(TYPE_INFO,Image_double_3_ptr,FUN,Image_double_3)
-#  else
-#    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
-#  endif
-#else
-#  define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
-#  define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
-#endif
-*/
-
-
-
   // DIMENSION 4
 #ifdef BBTK_ITK_IMAGE_DIM_4
 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
index 17b07cfc4ae520647d3d8b5dee96644c9fe2ee06..d2f8890faafc347cdaee1b8d20a66f61b87fa467 100644 (file)
@@ -68,9 +68,7 @@ namespace bbitk
 
   void ImageProperties::DoIt()
   {
-      printf("EED ImageProperties::DoIt Start \n");
     BBTK_TEMPLATE_ITK_IMAGE_SWITCH(bbGetInputIn().type(),DoIt);
-      printf("EED ImageProperties::DoIt End \n");
   }
 
   /** 
@@ -79,25 +77,17 @@ namespace bbitk
   template<class itkImageType>
   void ImageProperties::DoIt()
   {
-      printf("EED <template>ImageProperties::DoIt Start \n");
     bbtkDebugMessageInc("Core",9,"bbitk::ImageProperties::DoIt<"
                        <<bbtk::TypeName<itkImageType>()
                        <<">()"<<std::endl);
 
     itkImageType* im = bbGetInputIn().get<itkImageType*>();
-      
-      printf("EED <template>ImageProperties::DoIt 1 \n");
-
     unsigned int dim = im->GetImageDimension();
-
-      
     bbSetOutputTypeName(bbtk::TypeName<typename itkImageType::PixelType>());
     bbSetOutputDimension(dim);
     const typename itkImageType::RegionType& r =im->GetLargestPossibleRegion();
     bbSetOutputLargestPossibleRegion(r);
-
-      printf("EED <template>ImageProperties::DoIt 2 \n");
-
+      
     const typename itkImageType::IndexType& ind = r.GetIndex();
     std::vector<int> vind;
     for (unsigned int i=0;i<dim;++i) 
@@ -109,8 +99,6 @@ namespace bbitk
     for (unsigned int i=0;i<dim;++i) 
        vsz.push_back(sz[i]);
 
-      printf("EED <template>ImageProperties::DoIt 3 \n");
-
   // brute hack to avoid failure of most black boxes that expects 3D images. // JPR
    if (dim==2)
         vsz.push_back(1);
@@ -126,7 +114,6 @@ namespace bbitk
        vog.push_back(1.0);
   
     bbSetOutputOrigin(vog);
-      printf("EED <template>ImageProperties::DoIt 4 \n");
 
     typename itkImageType::SpacingType sp = im->GetSpacing();
     std::vector<double> vsp;
@@ -149,12 +136,8 @@ namespace bbitk
          vminmax.push_back( (float) (minMaxCalculator->GetMinimum()) );
          vminmax.push_back( (float) (minMaxCalculator->GetMaximum()) );          
          bbSetOutputMinMax(vminmax);
-      
-      printf("EED <template>ImageProperties::DoIt 5 \n");
 
-      
-    bbtkDebugDecTab("Core",9);
-      printf("EED <template>ImageProperties::DoIt End \n");
+      bbtkDebugDecTab("Core",9);
   }
 
 
index c00bdda678f1f2aae9d22b959189f7e8cde0640b..da653e691025635a64438390c83ad3f1a4404e86 100644 (file)
@@ -90,10 +90,8 @@ namespace bbitk
  //===================================================
    void ResampleImageFilter::ProcessSwitch()
   {
-       printf("EED ResampleImageFilter::ProcessSwitch Start \n");
     bbtk::TypeInfo t = bbGetInputIn().type();
     BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t, this->Process);
-       printf("EED ResampleImageFilter::ProcessSwitch End \n");
   }
  //===================================================
  
@@ -101,24 +99,18 @@ namespace bbitk
    template <class T> 
   void ResampleImageFilter::Process()
   {
-      printf("EED ResampleImageFilter::Process Start \n");
     bbtkDebugMessageInc("Core",9,
                        "bbitk::ResampleImageFilter::Process<"
                        <<bbtk::TypeName<T>()<<">()"<<std::endl);
  
     typedef T ImageType;
-      printf("EED ResampleImageFilter::Process 1 \n");
     typedef itk::ResampleImageFilter<ImageType,ImageType> FilterType;
-      printf("EED ResampleImageFilter::Process 2 \n");
     typename FilterType::Pointer filter = FilterType::New();
     const unsigned int Dimension = ImageType::ImageDimension;
 
     // Input
-      printf("EED ResampleImageFilter::Process 3 \n");
     T* in = this->bbGetInputIn().get<T*>();
-      printf("EED ResampleImageFilter::Process 4 \n");
     filter->SetInput( in );
-      printf("EED ResampleImageFilter::Process 5 \n");
 
     // Size, Spacing, Origin and DefaultPixelVal
     typename ImageType::SizeType size;
@@ -189,9 +181,6 @@ namespace bbitk
     mOutput = filter->GetOutput();
 
     bbtkDebugDecTab("Core",9);
-      
-      printf("EED ResampleImageFilter::Process End \n");
-
   }
    //===================================================
  
index 13dae0557d8a2266dee56d6681bdf7ef2f828406..8347241b41dfad329e3bc9c5728a1a00b9f4356c 100644 (file)
     this->Convert< itk::Image< ty, di > >( )
 */
 
+
+
+
 // -------------------------------------------------------------------------
 // LFV: avoid itk::Concept check on 4d or superior images
-#define BBITKVTK_itkImage2vtkImageData_Template( t, ty, di )            \
-  if( t == typeid( itk::Image< ty, di >* ) )                             \
-    this->Convert< itk::Image< ty, di > >( )
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+   #define BBITKVTK_itkImage2vtkImageData_Template( t, ty, di )               \
+     if ( strcmp(t.name()  , typeid( itk::Image< ty, di >* ).name() ) == 0 )  \
+       this->Convert< itk::Image< ty, di > >( )
+#else
+   #define BBITKVTK_itkImage2vtkImageData_Template( t, ty, di )               \
+     if( t == typeid( itk::Image< ty, di >* ) )                               \
+       this->Convert< itk::Image< ty, di > >( )
+#endif
 // -------------------------------------------------------------------------
 
+
+
 namespace bbitkvtk 
 {
   BBTK_BLACK_BOX_IMPLEMENTATION(itkImage2vtkImageData,bbtk::AtomicBlackBox);
@@ -102,7 +115,10 @@ namespace bbitkvtk
     else BBITKVTK_itkImage2vtkImageData_Template( t, unsigned short, 3 );
     else BBITKVTK_itkImage2vtkImageData_Template( t, unsigned int, 3 );
     else BBITKVTK_itkImage2vtkImageData_Template( t, unsigned long, 3 );
-       
+    else {
+        printf("Warnning! EED itkImage2vtkImageData::Convert Type not found for: <%s>\n", bbtk::demangle_type_name(t.name()).c_str()   );
+    }
+      
     /* Deprecated
        BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t,Convert);
     */
index c26717aeee183ff5e7b992cd8c26ec8543f347b3..2caf261bf09b4d1bb44a1bf1755bf4b81d97af81 100644 (file)
 #include "bbitkvtkPackage.h"
 #include "itkImageToVTKImageFilter.h"
 
+
+/*
+#EED 2017-08-29 itk3toitk4
+ #define BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, ty, di ) \
+   if( t == typeid( itk::Image< ty, di > ) )                             \
+     this->Convert< itk::Image< ty, di > >( )
+*/
+
+
 // -------------------------------------------------------------------------
 // LFV: avoid itk::Concept check on 4d or superior images
-#define BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, ty, di ) \
-  if( t == typeid( itk::Image< ty, di > ) )                             \
-    this->Convert< itk::Image< ty, di > >( )
+//EED 2021-12-15 typeid comparation is not working in MacOs for objects declared  in different libraries
+// ex: itk <-> vtk templates convertion
+#if defined(MACOSX)
+   #define BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, ty, di ) \
+   if ( strcmp(t.name()  , typeid( itk::Image< ty, di >* ).name() ) == 0 )  \
+       this->Convert< itk::Image< ty, di > >( )
+#else
+   #define BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, ty, di ) \
+   if( t == typeid( itk::Image< ty, di >* ) )                               \
+       this->Convert< itk::Image< ty, di > >( )
+#endif
 // -------------------------------------------------------------------------
 
+
 namespace bbitkvtk 
 {
   BBTK_BLACK_BOX_IMPLEMENTATION(itkImageVector2vtkImageDataVector,bbtk::AtomicBlackBox);
@@ -95,6 +113,9 @@ namespace bbitkvtk
     else BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, unsigned short, 3 );
     else BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, unsigned int, 3 );
     else BBITKVTK_itkImageVector2vtkImageDataVector_Template( t, unsigned long, 3 );
+      else {
+          printf("Warnning! EED itkImageVector2vtkImageDataVector::Convert Type not found for: <%s>\n", bbtk::demangle_type_name(t.name()).c_str()   );
+      }
 
     /* Deprecated
        BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t,Convert);
index f12b52566de25d03712a9f53dcc800412f22b9c4..45bb40289c41e24133f37c25bc6f320995d7c9a1 100644 (file)
@@ -84,8 +84,6 @@ namespace bbitkvtk
    template<class T, unsigned int D>
    void vtkImageData2itkImage::Convert()
    {
-       printf("vtkImageData2itkImage::Convert A \n");
-
     bbtkDebugMessage("process",5,"==> ["<<bbGetFullName()<<"] : Convert<"
                        <<bbtk::TypeName<T>()<<","<<D
                        <<">()"<<std::endl);
@@ -95,12 +93,9 @@ namespace bbitkvtk
     typedef itk::VTKImageToImageFilter< itkImageType > VtkToItkConnection;
     typename VtkToItkConnection::Pointer conv;
 
-       printf("vtkImageData2itkImage::Convert B \n");
-
     // No converter yet : create it and set its input
     if (!mConverter) 
       {
-          printf("vtkImageData2itkImage::Convert C \n");
        bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : No converter yet : creating it"<<std::endl);
        conv = VtkToItkConnection::New();
        mConverter = conv;
@@ -115,7 +110,6 @@ namespace bbitkvtk
                           ((itk::ProcessObject*)mConverter);
        if (!conv) 
          {
-          printf("vtkImageData2itkImage::Convert 1 \n");
           bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Converter of wrong input type : reacreating it "<<std::endl);
 
            mConverter->UnRegister();
@@ -127,14 +121,12 @@ namespace bbitkvtk
        // set new input
        else if ( this->bbGetInputIn() != conv->GetExporter()->GetInput())
          {
-          printf("vtkImageData2itkImage::Convert 2 \n");
            bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Converter input changed : resetting it"<<std::endl);
 
            conv->SetInput( this->bbGetInputIn() );
          }
        else 
          {
-          printf("vtkImageData2itkImage::Convert 3 \n");
            bbtkDebugMessage("process",5,"    ["<<bbGetFullName()<<"] : Nothing changed"<<std::endl);
          }
       }