From f6119e774dc6d5087abbf9202bbd878c238501c5 Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@orfeo-toolbox.org>
Date: Thu, 12 Sep 2019 09:16:05 +0000
Subject: [PATCH] BUG: Fix bug #1963 by changing default requested region when
 completely outside of input largest possible region

---
 .../include/otbStreamingWarpImageFilter.hxx   | 30 +++++++++++--------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/Modules/Core/Transform/include/otbStreamingWarpImageFilter.hxx b/Modules/Core/Transform/include/otbStreamingWarpImageFilter.hxx
index dcd43c075f..fffcf6346f 100644
--- a/Modules/Core/Transform/include/otbStreamingWarpImageFilter.hxx
+++ b/Modules/Core/Transform/include/otbStreamingWarpImageFilter.hxx
@@ -232,21 +232,27 @@ StreamingWarpImageFilter<TInputImage, TOutputImage, TDisplacementField>
     }
   else
     {
+    // In this case we need to generate an empty region compatible
+    // with cropping by input largest possible region.
 
-    inputFinalSize.Fill(0);
-    inputRequestedRegion.SetSize(inputFinalSize);
-    inputFinalIndex.Fill(0);
-    inputRequestedRegion.SetIndex(inputFinalIndex);
 
-    // store what we tried to request (prior to trying to crop)
-    inputPtr->SetRequestedRegion(inputRequestedRegion);
+    for(auto dim = 0U; dim < InputImageType::ImageDimension; ++dim)
+      {
+      if(inputPtr->GetLargestPossibleRegion().GetSize()[dim]>1)
+        {
+        inputFinalIndex[dim] = inputPtr->GetLargestPossibleRegion().GetIndex()[dim]+1;
+        inputFinalSize[dim] = 0;
+        }
+      else
+        {
+        inputFinalIndex[dim] = inputPtr->GetLargestPossibleRegion().GetIndex()[dim];
+        inputFinalSize[dim] = inputPtr->GetLargestPossibleRegion().GetSize()[dim];
+        }        
+      }
 
-//    // build an exception
-//    itk::InvalidRequestedRegionError e(__FILE__, __LINE__);
-//    e.SetLocation(ITK_LOCATION);
-//    e.SetDescription("Requested region is (at least partially) outside the largest possible region.");
-//    e.SetDataObject(inputPtr);
-//    throw e;
+      inputRequestedRegion.SetSize(inputFinalSize);
+      inputRequestedRegion.SetIndex(inputFinalIndex);
+      inputPtr->SetRequestedRegion(inputRequestedRegion);
     }
  }
 
-- 
GitLab