+ if (likeSpacing[i] != input->GetSpacing()[i]) {
+ clitkExceptionMacro("Images must have the same spacing, but input's spacing(" << i
+ <<") is " << input->GetSpacing()[i] << " while the spacing(" << i
+ << ") of 'like' is " << likeSpacing[i] << ".");
+ }
+ }
+
+ // Check that we must crop along each dimension. If not, we use the
+ // size of the input image
+ for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+ if (m_CropAlongThisDimension[i] == false) {
+ likeStart[i] = input->GetLargestPossibleRegion().GetIndex()[i];
+ likeSize[i] = input->GetLargestPossibleRegion().GetSize()[i];
+ }
+ }
+
+ // 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);
+ output->Allocate(); // Needed ?
+
+ // 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];