17 #ifndef __itkSpatialObjectToImageFilter_txx
18 #define __itkSpatialObjectToImageFilter_txx
27 template <
class TInputSpatialObject,
class TOutputImage>
31 this->SetNumberOfRequiredInputs( 1 );
32 m_ChildrenDepth = 999999;
34 m_Direction.SetIdentity();
36 for (
unsigned int i = 0; i < OutputImageDimension; i++)
44 m_UseObjectValue =
false;
48 template <
class TInputSpatialObject,
class TOutputImage>
56 template <
class TInputSpatialObject,
class TOutputImage>
63 const_cast< InputSpatialObjectType * >( input ) );
68 template <
class TInputSpatialObject,
class TOutputImage>
71 ::SetInput(
unsigned int index,
const TInputSpatialObject *
object )
75 const_cast< TInputSpatialObject *>(
object ) );
79 template <
class TInputSpatialObject,
class TOutputImage>
84 if (this->GetNumberOfInputs() < 1)
89 return static_cast<const TInputSpatialObject *
>
94 template <
class TInputSpatialObject,
class TOutputImage>
99 return static_cast< const TInputSpatialObject *
>
105 template <
class TInputSpatialObject,
class TOutputImage>
111 for (i=0; i<TOutputImage::ImageDimension; i++)
113 if ( (
double)spacing[i] != m_Spacing[i] )
118 if ( i < TOutputImage::ImageDimension )
120 for (i=0; i<TOutputImage::ImageDimension; i++)
122 m_Spacing[i] = spacing[i];
129 template <
class TInputSpatialObject,
class TOutputImage>
135 for (i=0; i<OutputImageDimension; i++)
137 if ( spacing[i] != m_Spacing[i] )
142 if ( i < OutputImageDimension )
144 for (i=0; i<OutputImageDimension; i++)
146 m_Spacing[i] = spacing[i];
152 template <
class TInputSpatialObject,
class TOutputImage>
158 for (i=0; i<OutputImageDimension; i++)
160 if ( (
double)spacing[i] != m_Spacing[i] )
165 if ( i < OutputImageDimension )
167 for (i=0; i<OutputImageDimension; i++)
169 m_Spacing[i] = spacing[i];
175 template <
class TInputSpatialObject,
class TOutputImage>
185 template <
class TInputSpatialObject,
class TOutputImage>
191 for (i=0; i<OutputImageDimension; i++)
193 if ( (
double)origin[i] != m_Origin[i] )
198 if ( i < OutputImageDimension )
200 for (i=0; i<OutputImageDimension; i++)
202 m_Origin[i] = origin[i];
209 template <
class TInputSpatialObject,
class TOutputImage>
215 for (i=0; i<OutputImageDimension; i++)
217 if ( origin[i] != m_Origin[i] )
222 if ( i < OutputImageDimension )
224 for (i=0; i<OutputImageDimension; i++)
226 m_Origin[i] = origin[i];
232 template <
class TInputSpatialObject,
class TOutputImage>
238 for (i=0; i<OutputImageDimension; i++)
240 if ( (
double)origin[i] != m_Origin[i] )
245 if ( i < OutputImageDimension )
247 for (i=0; i<OutputImageDimension; i++)
249 m_Origin[i] = origin[i];
255 template <
class TInputSpatialObject,
class TOutputImage>
265 template <
class TInputSpatialObject,
class TOutputImage>
275 template <
class TInputSpatialObject,
class TOutputImage>
287 template <
class TInputSpatialObject,
class TOutputImage>
293 itkDebugMacro(<<
"SpatialObjectToImageFilter::Update() called");
302 InputObject->ComputeBoundingBox();
303 for(i=0;i<ObjectDimension;i++)
305 size[i] = (
long unsigned int)(InputObject->GetBoundingBox()->GetMaximum()[i]
306 - InputObject->GetBoundingBox()->GetMinimum()[i]);
309 typename OutputImageType::IndexType index;
311 typename OutputImageType::RegionType region;
317 bool specified =
false;
318 for (i = 0; i < OutputImageDimension; i++)
329 region.SetSize( m_Size );
333 region.SetSize( size );
335 region.SetIndex( index );
337 OutputImage->SetLargestPossibleRegion( region);
338 OutputImage->SetBufferedRegion( region );
339 OutputImage->SetRequestedRegion( region );
345 for (i = 0; i < OutputImageDimension; i++)
347 if (m_Spacing[i] != 0)
356 OutputImage->SetSpacing(this->m_Spacing);
360 OutputImage->SetSpacing(InputObject->GetIndexToObjectTransform()->GetScaleComponent());
362 OutputImage->SetOrigin( m_Origin );
363 OutputImage->SetDirection( m_Direction );
364 OutputImage->Allocate();
368 myIteratorType it(OutputImage, region);
376 OutputImage->TransformIndexToPhysicalPoint(it.GetIndex(), imagePoint);
377 for(i=0; i<ObjectDimension; i++)
379 objectPoint[i] = imagePoint[i];
384 bool evaluable = InputObject->ValueAt(objectPoint, val, m_ChildrenDepth);
385 if( m_InsideValue != 0 || m_OutsideValue != 0 )
391 it.Set(static_cast<ValueType>(val));
395 it.Set(m_InsideValue);
400 it.Set(m_OutsideValue);
405 it.Set(static_cast<ValueType>(val));
410 itkDebugMacro(<<
"SpatialObjectToImageFilter::Update() finished");
415 template<
class TInputSpatialObject,
class TOutputImage>
420 Superclass::PrintSelf(os, indent);
421 os << indent <<
"Size : " << m_Size << std::endl;
422 os << indent <<
"Children depth : " << m_ChildrenDepth << std::endl;
423 os << indent <<
"Inside Value : " << m_InsideValue << std::endl;
424 os << indent <<
"Outside Value : " << m_OutsideValue << std::endl;
427 os << indent <<
"Using Object Value : ON" << std::endl;
431 os << indent <<
"Using Object Value : OFF" << std::endl;