00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef __itkPointSet_h
00021
#define __itkPointSet_h
00022
00023
#include "itkDataObject.h"
00024
#include "itkPoint.h"
00025
#include "itkDefaultStaticMeshTraits.h"
00026
#include "itkPointLocator.h"
00027
#include "itkBoundingBox.h"
00028
#include <vector>
00029
#include <set>
00030
00031
00032
namespace itk
00033 {
00034
00041
template <
typename TPo
intSet>
00042 struct GetPointSetDimension
00043 {
00044
itkStaticConstMacro(PointDimension,
unsigned int, TPointSet::PointDimension);
00045 };
00046
00086
template <
00087
typename TPixelType,
00088
unsigned int VDimension = 3,
00089
typename TMeshTraits =
DefaultStaticMeshTraits< TPixelType, VDimension, VDimension >
00090 >
00091 class ITK_EXPORT PointSet:
public DataObject
00092 {
00093
public:
00095 typedef PointSet
Self;
00096 typedef DataObject Superclass;
00097 typedef SmartPointer<Self> Pointer;
00098 typedef SmartPointer<const Self> ConstPointer;
00099
00101
itkNewMacro(
Self);
00102
00104
itkTypeMacro(PointSet,
Object);
00105
00107 typedef TMeshTraits
MeshTraits;
00108 typedef typename MeshTraits::PixelType
PixelType;
00109
00111 typedef typename MeshTraits::CoordRepType
CoordRepType;
00112 typedef typename MeshTraits::PointIdentifier
PointIdentifier;
00113 typedef typename MeshTraits::PointType
PointType;
00114 typedef typename MeshTraits::PointsContainer
PointsContainer;
00115 typedef typename MeshTraits::PointDataContainer
PointDataContainer;
00116
00118
itkStaticConstMacro(PointDimension,
unsigned int,
00119 TMeshTraits::PointDimension);
00120
00123
typedef PointLocator<
PointIdentifier,
itkGetStaticConstMacro(PointDimension),
00124 CoordRepType,
PointsContainer>
PointLocatorType;
00125
typedef BoundingBox<
PointIdentifier,
itkGetStaticConstMacro(PointDimension),
00126 CoordRepType,
PointsContainer>
BoundingBoxType;
00127
00129
typedef typename PointsContainer::Pointer
PointsContainerPointer;
00130 typedef typename PointsContainer::ConstPointer
PointsContainerConstPointer;
00131 typedef typename PointDataContainer::Pointer
PointDataContainerPointer;
00132 typedef typename PointDataContainer::ConstPointer
PointDataContainerConstPointer;
00133 typedef typename PointLocatorType::Pointer
PointLocatorPointer;
00134 typedef typename BoundingBoxType::Pointer
BoundingBoxPointer;
00135
00137
typedef typename
00138 PointsContainer::ConstIterator
PointsContainerConstIterator;
00139 typedef typename
00140 PointsContainer::Iterator
PointsContainerIterator;
00141 typedef typename
00142 PointDataContainer::ConstIterator
PointDataContainerIterator;
00143
00145
typedef int RegionType;
00146
00149
int GetMaximumNumberOfRegions()
const
00150 {
return m_MaximumNumberOfRegions;}
00151
00152
protected:
00155 PointsContainerPointer m_PointsContainer;
00156
00161
PointDataContainerPointer m_PointDataContainer;
00162
00165
PointLocatorPointer m_PointLocator;
00166
00169
BoundingBoxPointer m_BoundingBox;
00170
00171
public:
00173
void PassStructure(
Self* inputPointSet);
00174
virtual void Initialize(
void);
00175
unsigned long GetNumberOfPoints(
void) const;
00176
00180
void SetPoints(
PointsContainer*);
00181 PointsContainer * GetPoints(
void);
00182 const PointsContainer * GetPoints(
void) const;
00183
void SetPointData(
PointDataContainer*);
00184 PointDataContainer * GetPointData(
void);
00185 const PointDataContainer * GetPointData(
void) const;
00186
00189
void SetPoint(
PointIdentifier,
PointType);
00190
bool GetPoint(PointIdentifier, PointType*) const;
00191
00194
void SetPointData(PointIdentifier,
PixelType);
00195
bool GetPointData(PointIdentifier, PixelType*) const;
00196
00199 const
BoundingBoxType * GetBoundingBox(
void) const;
00200
00203
bool FindClosestPoint(
CoordRepType coords[PointDimension],
00204 PointIdentifier* pointId);
00205
00207 virtual
void UpdateOutputInformation();
00208 virtual
void SetRequestedRegionToLargestPossibleRegion();
00209 virtual
void CopyInformation(const
DataObject *data);
00210 virtual
bool RequestedRegionIsOutsideOfTheBufferedRegion();
00211 virtual
bool VerifyRequestedRegion();
00212
00217 virtual
void SetRequestedRegion(
DataObject *data);
00218
00220 virtual
void SetRequestedRegion( const
RegionType & region );
00221 itkGetMacro( RequestedRegion,
RegionType );
00222
00224 virtual
void SetBufferedRegion( const RegionType & region );
00225 itkGetMacro( BufferedRegion, RegionType );
00226
00227
00228 protected:
00230 PointSet();
00231 ~PointSet() {}
00232
virtual void PrintSelf(std::ostream& os,
Indent indent)
const;
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
int m_MaximumNumberOfRegions;
00245
int m_NumberOfRegions;
00246
int m_RequestedNumberOfRegions;
00247
RegionType m_BufferedRegion;
00248
RegionType m_RequestedRegion;
00249
00250
private:
00251 PointSet(
const Self&);
00252
void operator=(
const Self&);
00253
00254 };
00255
00256 }
00257
00258
#ifndef ITK_MANUAL_INSTANTIATION
00259
#include "itkPointSet.txx"
00260
#endif
00261
00262
#endif