+++ /dev/null
-#ifndef __CPEXTENSIONS__ALGORITHMS__SPATIALOBJECTMASKIMAGEFILTER__HXX__
-#define __CPEXTENSIONS__ALGORITHMS__SPATIALOBJECTMASKIMAGEFILTER__HXX__
-
-#include <itkImageScanlineIterator.h>
-#include <itkProgressReporter.h>
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-O* cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-GetPositiveOutput( )
-{
- return( this->GetOutput( 0 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const O* cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-GetPositiveOutput( ) const
-{
- return( this->GetOutput( 0 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-O* cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-GetNegativeOutput( )
-{
- return( this->GetOutput( 1 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const O* cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-GetNegativeOutput( ) const
-{
- return( this->GetOutput( 1 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-SpatialObjectMaskImageFilter( )
- : Superclass( )
-{
- this->SetNumberOfRequiredInputs( 1 );
- this->SetNumberOfRequiredOutputs( 2 );
- this->SetNthOutput( 0, O::New( ) );
- this->SetNthOutput( 1, O::New( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-~SpatialObjectMaskImageFilter( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-GenerateOutputInformation( )
-{
- const I* in =
- dynamic_cast< const I* >( this->itk::ProcessObject::GetInput( 0 ) );
- for( unsigned int idx = 0; idx < this->GetNumberOfOutputs( ); ++idx )
- {
- itk::DataObject* out = this->GetOutput( idx );
- if( out )
- out->CopyInformation( in );
-
- } // rof
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void cpExtensions::Algorithms::SpatialObjectMaskImageFilter< I, O >::
-ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId )
-{
- if( this->m_SpatialObject.IsNull( ) )
- {
- itkGenericExceptionMacro( << "No itk::SpatialObject given." );
- return;
-
- } // fi
-
- // Get inputs
- const I* in =
- dynamic_cast< const I* >( this->itk::ProcessObject::GetInput( 0 ) );
- O* pos_out = this->GetPositiveOutput( );
- O* neg_out = this->GetNegativeOutput( );
- const auto size0 = region.GetSize( 0 );
- if( size0 == 0 )
- return;
- const auto nLines = region.GetNumberOfPixels( ) / size0;
-
- // Create iterators
- itk::ImageScanlineConstIterator< I > iIt( in, region );
- itk::ImageScanlineIterator< O > pos_oIt( pos_out, region );
- itk::ImageScanlineIterator< O > neg_oIt( neg_out, region );
- itk::ProgressReporter progress( this, threadId, nLines );
-
- // Main loop
- typename TSpatialObject::PointType pnt;
- while( !iIt.IsAtEnd( ) )
- {
- while( !iIt.IsAtEndOfLine( ) )
- {
- auto idx = iIt.GetIndex( );
- in->TransformIndexToPhysicalPoint( idx, pnt );
- if( this->m_SpatialObject->IsInside( pnt ) )
- {
- pos_oIt.Set( TOutPixel( iIt.Get( ) ) );
- neg_oIt.Set( this->m_OutsideValue );
- }
- else
- {
- neg_oIt.Set( TOutPixel( iIt.Get( ) ) );
- pos_oIt.Set( this->m_OutsideValue );
-
- } // fi
- ++iIt;
- ++pos_oIt;
- ++neg_oIt;
-
- } // elihw
- iIt.NextLine( );
- pos_oIt.NextLine( );
- neg_oIt.NextLine( );
- progress.CompletedPixel( );
-
- } // elihw
-}
-
-#endif // __CPEXTENSIONS__ALGORITHMS__SPATIALOBJECTMASKIMAGEFILTER__HXX__
-
-// eof - $RCSfile$