From a328f39ae12e4c1ad455e3bee03b6c8edc570a21 Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Fri, 9 Sep 2016 13:54:20 +0200
Subject: [PATCH] SWIG: check a simply dynamic_cast before using
 castImageFilter (issue with numpy.float and float)

---
 .../include/otbWrapperInputImageParameter.txx | 23 ++++++++++++-------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
index ccec52397e..8a385e0c1f 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
@@ -183,18 +183,25 @@ template <class TInputImage, class TOutputImage>
 TOutputImage*
 InputImageParameter::SimpleCastImage()
 {
-  TInputImage* realInputImage = dynamic_cast<TInputImage*>(m_Image.GetPointer());
+  if ( dynamic_cast<TOutputImage*> (m_Image.GetPointer()) )
+    {
+    return dynamic_cast<TOutputImage*> (m_Image.GetPointer());
+    }
+  else
+    {
+    TInputImage* realInputImage = dynamic_cast<TInputImage*>(m_Image.GetPointer());
 
-  typedef itk::CastImageFilter<TInputImage, TOutputImage> CasterType;
-  typename CasterType::Pointer caster = CasterType::New();
+    typedef itk::CastImageFilter<TInputImage, TOutputImage> CasterType;
+    typename CasterType::Pointer caster = CasterType::New();
 
-  caster->SetInput(realInputImage);
-  caster->UpdateOutputInformation();
+    caster->SetInput(realInputImage);
+    caster->UpdateOutputInformation();
 
-  m_Image = caster->GetOutput();
-  m_Caster = caster;
+    m_Image = caster->GetOutput();
+    m_Caster = caster;
 
-  return caster->GetOutput();
+    return caster->GetOutput();
+    }
 }
 
 
-- 
GitLab