18 #ifndef itkHilbertPath_h
19 #define itkHilbertPath_h
52 template<
typename TIndexValue =
unsigned int,
unsigned int VDimension = 3>
54 :
public Path<TIndexValue, Index<VDimension>, VDimension>
71 itkStaticConstMacro(
Dimension,
unsigned int, VDimension );
90 return this->m_HilbertPath[input];
95 return this->m_HilbertPath[input];
101 return this->TransformMultiDimensionalIndexToPathIndex( input );
107 return static_cast<InputType>( this->NumberOfSteps() );
115 itkExceptionMacro(
"Not implemented." );
121 this->m_HilbertPath.clear();
129 return m_HilbertPath.size();
136 this->ConstructHilbertPath();
144 itkGetConstMacro( HilbertOrder, HilbertOrderType );
148 IndexType TransformPathIndexToMultiDimensionalIndex(
const PathIndexType
id );
151 PathIndexType TransformMultiDimensionalIndexToPathIndex(
const IndexType & index );
156 void PrintSelf( std::ostream & os,
Indent indent )
const ITK_OVERRIDE;
161 void ConstructHilbertPath();
163 PathIndexType GetTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
165 PathIndexType GetInverseTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
167 PathIndexType GetGrayCode(
const PathIndexType );
169 PathIndexType GetInverseGrayCode(
const PathIndexType );
171 PathIndexType SetBit(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
173 PathIndexType GetRightBitRotation( PathIndexType, PathIndexType,
const PathIndexType );
175 PathIndexType GetLeftBitRotation( PathIndexType, PathIndexType,
const PathIndexType );
177 PathIndexType GetTrailingSetBits(
const PathIndexType,
const PathIndexType );
179 PathIndexType GetDirection(
const PathIndexType,
const PathIndexType );
181 PathIndexType GetEntry(
const PathIndexType );
183 PathIndexType GetBitRange(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
190 #ifndef ITK_MANUAL_INSTANTIATION
191 #include "itkHilbertPath.hxx"
virtual InputType EndOfInput() const override
virtual OutputType EvaluateToIndex(const PathIndexType &input) const override
HilbertPathType::size_type HilbertPathSizeType
Represent an n-dimensional Hilbert path for a given order.
SmartPointer< const Self > ConstPointer
Superclass::OffsetType OffsetType
virtual OutputType Evaluate(const PathIndexType &input) const override
std::vector< IndexType > HilbertPathType
Represent a path through ND Space.
HilbertPathType m_HilbertPath
HilbertPath< TIndexValue, VDimension > Self
virtual void Initialize(void) override
const unsigned int Dimension
SmartPointer< Self > Pointer
virtual InputType EvaluateInverse(const IndexType &input)
Control indentation during Print() invocation.
Path< unsigned int, Index< VDimension >, VDimension > Superclass
Superclass::OutputType OutputType
Superclass::InputType InputType
Define additional traits for native types such as int or float.
virtual OffsetType IncrementInput(InputType &) const override
unsigned int HilbertOrderType
virtual HilbertPathSizeType NumberOfSteps() const
Base class for all data objects in ITK.
ImageBaseType::IndexType IndexType
HilbertOrderType m_HilbertOrder