17 #ifndef __itkPasteImageFilter_txx
18 #define __itkPasteImageFilter_txx
33 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
40 m_DestinationIndex.Fill(0);
43 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
49 this->SetNthInput(1, const_cast<SourceImageType *>( src ));
52 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
62 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
68 this->SetNthInput(0, const_cast<InputImageType *>( src ));
71 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
78 return destinationImage;
84 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
89 Superclass::PrintSelf(os,indent);
91 os << indent <<
"DestinationIndex: " << m_DestinationIndex << std::endl;
92 os << indent <<
"SourceRegion: " << m_SourceRegion << std::endl;
98 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
104 Superclass::GenerateInputRequestedRegion();
111 if( !destPtr || !sourcePtr || !outputPtr )
117 sourcePtr->SetRequestedRegion( m_SourceRegion );
120 destPtr->SetRequestedRegion( outputPtr->GetRequestedRegion() );
135 template <
class TInputImage,
class TSourceImage,
class TOutputImage>
141 itkDebugMacro(<<
"Actually executing");
149 ProgressReporter progress(
this, threadId, outputRegionForThread.GetNumberOfPixels());
157 sourceRegionInDestinationImage.SetIndex( m_DestinationIndex );
158 sourceRegionInDestinationImage.SetSize( m_SourceRegion.GetSize() );
160 if ( sourceRegionInDestinationImage.Crop( outputRegionForThread ) )
164 sourceRegionInDestinationImageCropped = sourceRegionInDestinationImage;
176 if ( useSource && (sourceRegionInDestinationImageCropped == outputRegionForThread) )
180 useOnlySource =
true;
187 useOnlySource =
false;
197 originalOffsetFromDestinationToSource = m_SourceRegion.GetIndex() - m_DestinationIndex;
201 sourceIndexInSourceImageCropped = sourceRegionInDestinationImageCropped.GetIndex()
202 + originalOffsetFromDestinationToSource;
205 sourceRegionInSourceImageCropped.SetIndex( sourceIndexInSourceImageCropped );
206 sourceRegionInSourceImageCropped.SetSize( sourceRegionInDestinationImageCropped.GetSize() );
227 if ( !useSource && !(this->GetInPlace() && this->CanRunInPlace()))
231 OutputIterator outIt(outputPtr, outputRegionForThread);
232 InputIterator destIt(destPtr, outputRegionForThread);
235 while( !outIt.IsAtEnd() )
238 outIt.Set( static_cast<OutputImagePixelType>(destIt.Get()) );
241 progress.CompletedPixel();
244 else if ( useOnlySource )
249 OutputIterator outIt(outputPtr, outputRegionForThread);
250 SourceIterator sourceIt(sourcePtr, sourceRegionInSourceImageCropped);
253 while( !outIt.IsAtEnd() )
256 outIt.Set( static_cast<OutputImagePixelType>( sourceIt.Get()) );
259 progress.CompletedPixel();
277 OutputIterator outIt(outputPtr, outputRegionForThread);
278 InputIterator destIt(destPtr, outputRegionForThread);
281 if (!(this->GetInPlace() && this->CanRunInPlace()))
283 while( !outIt.IsAtEnd() )
286 outIt.Set( static_cast<OutputImagePixelType>(destIt.Get()) );
289 progress.CompletedPixel();
295 SourceIterator sourceIt(sourcePtr, sourceRegionInSourceImageCropped);
299 outIt = OutputIterator(outputPtr, sourceRegionInDestinationImageCropped);
302 while( !outIt.IsAtEnd() )
305 outIt.Set( static_cast<OutputImagePixelType>(sourceIt.Get()) );
308 progress.CompletedPixel();