#ifndef __CPEXTENSIONS__DATASTRUCTURES__INFINITEPLANESPATIALOBJECT__H__ #define __CPEXTENSIONS__DATASTRUCTURES__INFINITEPLANESPATIALOBJECT__H__ #include namespace cpExtensions { namespace DataStructures { /** */ template< unsigned int D > class InfinitePlaneSpatialObject : public itk::SpatialObject< D > { public: typedef InfinitePlaneSpatialObject Self; typedef itk::SpatialObject< D > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef double ScalarType; typedef typename Superclass::PointType PointType; typedef typename Superclass::TransformType TransformType; typedef typename Superclass::BoundingBoxType BoundingBoxType; typedef typename PointType::VectorType VectorType; itkStaticConstMacro( NumberOfDimension, unsigned int, D ); public: itkNewMacro( Self ); itkTypeMacro( InfinitePlaneSpatialObject, itk::SpatialObject ); itkGetConstMacro( Center, PointType ); itkGetConstMacro( Normal, VectorType ); public: template< class P > void SetCenter( const P& p ); template< class N > void SetNormal( const N& n ); virtual bool ValueAt( const PointType& point, double& value, unsigned int depth = 0, char* name = NULL ) const; virtual bool IsEvaluableAt( const PointType& point, unsigned int depth = 0, char* name = NULL ) const; virtual bool IsInside( const PointType& point, unsigned int depth, char* name ) const; virtual bool IsInside( const PointType& point ) const; virtual bool ComputeLocalBoundingBox( ) const; protected: InfinitePlaneSpatialObject( ); virtual ~InfinitePlaneSpatialObject( ); virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const; private: // Purposely not implemented. InfinitePlaneSpatialObject( const Self& other ); Self& operator=( const Self& other ); protected: PointType m_Center; VectorType m_Normal; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION #include #endif // ITK_MANUAL_INSTANTIATION #endif // __CPEXTENSIONS__DATASTRUCTURES__INFINITEPLANESPATIALOBJECT__H__ // eof - $RCSfile$