+ // Define output region
+ m_OutputRegion.SetIndex(likeStart);
+ m_OutputRegion.SetSize(likeSize);
+ output->SetRegions(m_OutputRegion);
+ output->SetRequestedRegion(m_OutputRegion);
+ output->SetBufferedRegion(m_OutputRegion);
+ output->SetSpacing(likeSpacing);
+ output->SetOrigin(likeOrigin);
+
+ // get startpoint source/dest
+ // for each dim
+ // if source < dest -> start from dest, compute in source
+ // if source > dest -> start from source, compute in dest
+ m_StartDestIndex = output->GetLargestPossibleRegion().GetIndex();
+ m_StartSourceIndex = input->GetLargestPossibleRegion().GetIndex();
+ PointType m_StartPointInSource;
+ PointType m_StartPointInDest;
+ m_StartSourceIndex = input->GetLargestPossibleRegion().GetIndex();
+ input->TransformIndexToPhysicalPoint(m_StartSourceIndex, m_StartPointInSource);
+ m_StartDestIndex = output->GetLargestPossibleRegion().GetIndex();
+ output->TransformIndexToPhysicalPoint(m_StartDestIndex, m_StartPointInDest);
+ IndexType startDestInSource;
+ IndexType startSourceInDest;
+ input->TransformPhysicalPointToIndex(m_StartPointInDest, startDestInSource);
+ output->TransformPhysicalPointToIndex(m_StartPointInSource, startSourceInDest);
+ for(int i=0; i<ImageType::ImageDimension; i++) {
+ if (m_StartPointInSource[i] < m_StartPointInDest[i]) {
+ m_StartSourceIndex[i] = startDestInSource[i];
+ }
+ else {
+ m_StartDestIndex[i] = startSourceInDest[i];
+ }
+ }
+ m_Region.SetIndex(m_StartSourceIndex);
+
+ // Stop index
+ m_StopSourceIndex = input->GetLargestPossibleRegion().GetIndex()+
+ input->GetLargestPossibleRegion().GetSize();
+ m_StopDestIndex = output->GetLargestPossibleRegion().GetIndex()+
+ output->GetLargestPossibleRegion().GetSize();
+ PointType m_StopPointInSource;
+ PointType m_StopPointInDest;
+ input->TransformIndexToPhysicalPoint(m_StopSourceIndex, m_StopPointInSource);
+ output->TransformIndexToPhysicalPoint(m_StopDestIndex, m_StopPointInDest);
+ IndexType stopDestInSource;
+ IndexType stopSourceInDest;
+ input->TransformPhysicalPointToIndex(m_StopPointInDest, stopDestInSource);
+ output->TransformPhysicalPointToIndex(m_StopPointInSource, stopSourceInDest);
+
+ for(int i=0; i<ImageType::ImageDimension; i++) {
+ if (m_StopPointInSource[i] > m_StopPointInDest[i]) {
+ m_StopSourceIndex[i] = stopDestInSource[i];
+ }
+ else {
+ m_StopDestIndex[i] = stopSourceInDest[i];
+ }
+ }