From 1767c40011d67aa9bff37ce22d32aa2dee86f5b2 Mon Sep 17 00:00:00 2001
From: Antoine Regimbeau <antoine.regimbeau@c-s.fr>
Date: Wed, 13 Dec 2017 12:05:05 +0100
Subject: [PATCH] ENH: add cint16 and cint32 pixel type + REFAX
 :InputParameterType.h and macros

---
 .../include/otbWrapperInputImageParameter.h   | 10 +++-
 .../include/otbWrapperInputImageParameter.txx | 36 +++++++++----
 .../include/otbWrapperTypes.h                 | 12 ++++-
 .../ApplicationEngine/src/CMakeLists.txt      | 19 +++----
 .../src/otbWrapperInputImageParameterMacros.h |  5 ++
 .../src/otbWrapperInputImageParameterType.cxx | 52 +++++++++++++++++++
 6 files changed, 113 insertions(+), 21 deletions(-)
 create mode 100644 Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterType.cxx

diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
index d51438cf16..2a36842218 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
@@ -80,10 +80,14 @@ public:
   UInt8RGBImageType* GetUInt8RGBImage();
   UInt8RGBAImageType* GetUInt8RGBAImage();
 
-  // Complex image 
+  // Complex image
+  ComplexInt16ImageType*  GetComplexInt16Image();
+  ComplexInt32ImageType*  GetComplexInt32Image();
   ComplexFloatImageType*  GetComplexFloatImage();
   ComplexDoubleImageType* GetComplexDoubleImage();
 
+  ComplexInt16VectorImageType*  GetComplexInt16VectorImage();
+  ComplexInt32VectorImageType*  GetComplexInt32VectorImage();
   ComplexFloatVectorImageType*  GetComplexFloatVectorImage();
   ComplexDoubleVectorImageType* GetComplexDoubleVectorImage();
 
@@ -152,9 +156,13 @@ protected:
   typedef otb::ImageFileReader<UInt8RGBAImageType> UInt8RGBAReaderType;
 
   // Complex
+  typedef otb::ImageFileReader<ComplexInt16ImageType> ComplexInt16ReaderType;
+  typedef otb::ImageFileReader<ComplexInt32ImageType> ComplexInt32ReaderType;
   typedef otb::ImageFileReader<ComplexFloatImageType> ComplexFloatReaderType;
   typedef otb::ImageFileReader<ComplexDoubleImageType> ComplexDoubleReaderType;
 
+  typedef otb::ImageFileReader<ComplexInt16VectorImageType> ComplexInt16VectorReaderType;
+  typedef otb::ImageFileReader<ComplexInt32VectorImageType> ComplexInt32VectorReaderType;
   typedef otb::ImageFileReader<ComplexFloatVectorImageType> ComplexFloatVectorReaderType;
   typedef otb::ImageFileReader<ComplexDoubleVectorImageType> ComplexDoubleVectorReaderType;
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
index b2371466a5..0ead9125d1 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
@@ -24,8 +24,8 @@
 #include "otbWrapperInputImageParameter.h"
 
 #include "itkUnaryFunctorImageFilter.h"
-#include "itkCastImageFilter.h"
-#include "otbImageToVectorImageCastFilter.h"
+// #include "itkCastImageFilter.h"
+// #include "otbImageToVectorImageCastFilter.h"
 #include "otbClampImageFilter.h"
 
 namespace otb
@@ -139,6 +139,22 @@ InputImageParameter::GetImage()
         {
         return CastImage<DoubleImageType, TImageType> ();
         }
+      else if (dynamic_cast<ComplexInt16ImageType*>(m_Image.GetPointer()))
+        {
+        return CastImage<ComplexInt16ImageType, TImageType>();
+        }
+      else if (dynamic_cast<ComplexInt32ImageType*>(m_Image.GetPointer()))
+        {
+        return CastImage<ComplexInt32ImageType, TImageType>();
+        }
+      else if (dynamic_cast<ComplexFloatImageType*>(m_Image.GetPointer()))
+        {
+        return CastImage<ComplexFloatImageType, TImageType>();
+        }
+      else if (dynamic_cast<ComplexDoubleImageType*>(m_Image.GetPointer()))
+        {
+        return CastImage<ComplexDoubleImageType, TImageType>();
+        }
       else if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer()))
         {
         return CastImage<UInt8VectorImageType, TImageType> ();
@@ -175,21 +191,21 @@ InputImageParameter::GetImage()
         {
         return CastImage<UInt8RGBImageType, TImageType> ();
         }
-      else if (dynamic_cast<ComplexFloatVectorImageType*>(m_Image.GetPointer()))
+      else if (dynamic_cast<ComplexInt16VectorImageType*>(m_Image.GetPointer()))
         {
-        return CastImage<ComplexFloatVectorImageType, TImageType>();
+        return CastImage<ComplexInt16VectorImageType, TImageType>();
         }
-      else if (dynamic_cast<ComplexDoubleVectorImageType*>(m_Image.GetPointer()))
+      else if (dynamic_cast<ComplexInt32VectorImageType*>(m_Image.GetPointer()))
         {
-        return CastImage<ComplexDoubleVectorImageType, TImageType>();
+        return CastImage<ComplexInt32VectorImageType, TImageType>();
         }
-      else if (dynamic_cast<ComplexFloatImageType*>(m_Image.GetPointer()))
+      else if (dynamic_cast<ComplexFloatVectorImageType*>(m_Image.GetPointer()))
         {
-        return CastImage<ComplexFloatImageType, TImageType>();
+        return CastImage<ComplexFloatVectorImageType, TImageType>();
         }
-      else if (dynamic_cast<ComplexDoubleImageType*>(m_Image.GetPointer()))
+      else if (dynamic_cast<ComplexDoubleVectorImageType*>(m_Image.GetPointer()))
         {
-        return CastImage<ComplexDoubleImageType, TImageType>();
+        return CastImage<ComplexDoubleVectorImageType, TImageType>();
         }
       else
         {
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperTypes.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperTypes.h
index f78fb1f7e0..8a31e1f2c4 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperTypes.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperTypes.h
@@ -77,12 +77,16 @@ typedef enum
   ImagePixelType_uint32,
   ImagePixelType_float,
   ImagePixelType_double,
+  ImagePixelType_cint16,
+  ImagePixelType_cint32,
   ImagePixelType_cfloat,
   ImagePixelType_cdouble,
 } ImagePixelType;
 
 typedef enum
 {
+  ComplexImagePixelType_int16,
+  ComplexImagePixelType_int32,
   ComplexImagePixelType_float,
   ComplexImagePixelType_double,
 } ComplexImagePixelType;
@@ -121,13 +125,19 @@ typedef otb::VectorImage<double>         DoubleVectorImageType;
 typedef otb::Image< itk::RGBPixel<unsigned char> >  UInt8RGBImageType;
 typedef otb::Image< itk::RGBAPixel<unsigned char> > UInt8RGBAImageType;
 
+typedef std::complex<short>  Int16ComplexPixelType;
+typedef std::complex<int>    Int32ComplexPixelType;
 typedef std::complex<float>  FloatComplexPixelType;
 typedef std::complex<double> DoubleComplexPixelType;
 
-// Complex Image Type (first : double and float)
+// Complex Image Type
+typedef otb::Image< Int16ComplexPixelType, 2 >  ComplexInt16ImageType;
+typedef otb::Image< Int32ComplexPixelType, 2 >  ComplexInt32ImageType;
 typedef otb::Image< FloatComplexPixelType, 2 >  ComplexFloatImageType;
 typedef otb::Image< DoubleComplexPixelType, 2 > ComplexDoubleImageType;
 
+typedef otb::VectorImage< Int16ComplexPixelType, 2 >  ComplexInt16VectorImageType;
+typedef otb::VectorImage< Int32ComplexPixelType, 2 >  ComplexInt32VectorImageType;
 typedef otb::VectorImage<FloatComplexPixelType, 2 >   ComplexFloatVectorImageType;
 typedef otb::VectorImage< DoubleComplexPixelType, 2 > ComplexDoubleVectorImageType;
 
diff --git a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
index cd0be0bd4b..671b314aab 100644
--- a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
+++ b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
@@ -31,15 +31,16 @@ set( OTBApplicationEngine_SRC
   otbWrapperInputFilenameListParameter.cxx
   otbWrapperOutputImageParameter.cxx
   otbWrapperInputImageParameter.cxx
-  otbWrapperInputImageParameterUInt8.cxx
-  otbWrapperInputImageParameterInt16.cxx
-  otbWrapperInputImageParameterUInt16.cxx
-  otbWrapperInputImageParameterInt32.cxx
-  otbWrapperInputImageParameterUInt32.cxx
-  otbWrapperInputImageParameterFloat.cxx
-  otbWrapperInputImageParameterDouble.cxx
-  otbWrapperInputImageParameterCFloat.cxx
-  otbWrapperInputImageParameterCDouble.cxx
+  otbWrapperInputImageParameterType.cxx
+  #otbWrapperInputImageParameterUInt8.cxx
+  #otbWrapperInputImageParameterInt16.cxx
+  #otbWrapperInputImageParameterUInt16.cxx
+  #otbWrapperInputImageParameterInt32.cxx
+  #otbWrapperInputImageParameterUInt32.cxx
+  #otbWrapperInputImageParameterFloat.cxx
+  #otbWrapperInputImageParameterDouble.cxx
+  #otbWrapperInputImageParameterCFloat.cxx
+  #otbWrapperInputImageParameterCDouble.cxx
   otbWrapperParameterKey.cxx
   otbWrapperDocExampleStructure.cxx
   otbWrapperInputVectorDataParameter.cxx
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterMacros.h b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterMacros.h
index 42f88dfbea..3f3525af7a 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterMacros.h
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterMacros.h
@@ -28,6 +28,11 @@
     return this->GetImage< image##Type > ();          \
   }
 
+#define otbGetImageAndVectorImageMacro(type) \
+  otbGetImageMacro(type##Image);             \
+  otbGetImageMacro(type##VectorImage); 
+
+
 /*
 #define otbCastImageMacro(InputImageType, OutputImageType, theMethod)   \
   template<> OutputImageType *                                          \
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterType.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterType.cxx
new file mode 100644
index 0000000000..da88c171dc
--- /dev/null
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameterType.cxx
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "otbWrapperInputImageParameter.h"
+#include "otbWrapperTypes.h"
+#include "otbWrapperInputImageParameterMacros.h"
+
+namespace otb
+{
+namespace Wrapper
+{
+otbGetImageAndVectorImageMacro(UInt8);
+// otbGetImageMacro(UInt8VectorImage);
+otbGetImageAndVectorImageMacro(UInt16);
+// otbGetImageMacro(UInt16VectorImage);
+otbGetImageAndVectorImageMacro(UInt32);
+// otbGetImageMacro(UInt32VectorImage);
+otbGetImageAndVectorImageMacro(Int16);
+// otbGetImageMacro(Int16VectorImage);
+otbGetImageAndVectorImageMacro(Int32);
+// otbGetImageMacro(Int32VectorImage);
+otbGetImageAndVectorImageMacro(Float);
+// otbGetImageMacro(FloatVectorImage);
+otbGetImageAndVectorImageMacro(Double);
+// otbGetImageMacro(DoubleVectorImage);
+otbGetImageAndVectorImageMacro(ComplexInt16);
+// otbGetImageMacro(ComplexInt16VectorImage);
+otbGetImageAndVectorImageMacro(ComplexInt32);
+// otbGetImageMacro(ComplexInt32VectorImage);
+otbGetImageAndVectorImageMacro(ComplexFloat);
+// otbGetImageMacro(ComplexFloatVectorImage);
+otbGetImageAndVectorImageMacro(ComplexDouble);
+// otbGetImageMacro(ComplexDoubleVectorImage);
+} // end namespace wrapper
+} // end namespace otb
-- 
GitLab