00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkPointSetToListAdaptor_h
00018 #define __itkPointSetToListAdaptor_h
00019
00020 #include <typeinfo>
00021
00022 #include "itkPointSet.h"
00023 #include "itkListSampleBase.h"
00024 #include "itkSmartPointer.h"
00025
00026 namespace itk{
00027 namespace Statistics{
00028
00042 template < class TPointSet >
00043 class ITK_EXPORT PointSetToListAdaptor :
00044 public ListSampleBase< typename TPointSet::PointType >
00045 {
00046 public:
00048 typedef PointSetToListAdaptor Self;
00049 typedef ListSampleBase< typename TPointSet::PointType > Superclass ;
00050 typedef SmartPointer< Self > Pointer;
00051 typedef SmartPointer<const Self> ConstPointer;
00052
00054 itkTypeMacro(PointSetToListAdaptor, ListSampleBase) ;
00055
00057 itkNewMacro(Self) ;
00058
00060 itkStaticConstMacro(MeasurementVectorSize, unsigned int,
00061 TPointSet::PointDimension);
00062
00064 typedef TPointSet PointSetType;
00065 typedef typename TPointSet::Pointer PointSetPointer ;
00066 typedef typename TPointSet::PointIdentifier InstanceIdentifier;
00067 typedef typename TPointSet::PointsContainerPointer PointsContainerPointer ;
00068 typedef typename TPointSet::PointsContainerIterator PointsContainerIterator ;
00069 typedef typename TPointSet::PointType PointType ;
00070
00071
00074 typedef typename Superclass::MeasurementType MeasurementType ;
00075 typedef typename Superclass::MeasurementVectorType MeasurementVectorType;
00076 typedef MeasurementVectorType ValueType ;
00077 typedef typename Superclass::FrequencyType FrequencyType ;
00078
00080 void SetPointSet(TPointSet* pointSet) ;
00081
00083 TPointSet* GetPointSet() ;
00084
00086 unsigned int Size() const ;
00087
00090 const MeasurementVectorType & GetMeasurementVector(const InstanceIdentifier &id) const;
00091
00094 void SetMeasurement(const InstanceIdentifier &id,
00095 const unsigned int &dim,
00096 const MeasurementType &value) ;
00097
00099 FrequencyType GetFrequency(const InstanceIdentifier &id) const ;
00100
00102 FrequencyType GetTotalFrequency() const ;
00103
00104
00105 class Iterator
00106 {
00107 public:
00108
00109 Iterator(){}
00110
00111 Iterator(PointsContainerIterator iter)
00112 :m_Iter(iter)
00113 {}
00114
00115 FrequencyType GetFrequency() const
00116 { return 1 ;}
00117
00118 const MeasurementVectorType & GetMeasurementVector() const
00119 { return (MeasurementVectorType&) m_Iter.Value() ;}
00120
00121 InstanceIdentifier GetInstanceIdentifier() const
00122 { return m_Iter.Index() ;}
00123
00124 Iterator& operator++()
00125 { ++m_Iter ; return *this ;}
00126
00127 Iterator& operator--()
00128 { --m_Iter ; return *this ;}
00129
00130 bool operator!=(const Iterator &it)
00131 { return (m_Iter != it.m_Iter) ;}
00132
00133 bool operator==(const Iterator &it)
00134 { return (m_Iter == it.m_Iter) ;}
00135
00136 Iterator& operator = (const Iterator &iter)
00137 {
00138 m_Iter = iter.m_Iter;
00139 return iter ;
00140 }
00141
00142 Iterator(const Iterator &iter)
00143 { m_Iter = iter.m_Iter; }
00144
00145 private:
00146 PointsContainerIterator m_Iter ;
00147 } ;
00148
00149
00150 class ConstIterator
00151 {
00152 public:
00153
00154 ConstIterator(){}
00155
00156 ConstIterator(PointsContainerIterator iter)
00157 :m_Iter(iter)
00158 {}
00159
00160 FrequencyType GetFrequency() const
00161 { return 1 ;}
00162
00163 const MeasurementVectorType & GetMeasurementVector() const
00164 { return (MeasurementVectorType&) m_Iter.Value() ;}
00165
00166 InstanceIdentifier GetInstanceIdentifier() const
00167 { return m_Iter.Index() ;}
00168
00169 ConstIterator& operator++()
00170 { ++m_Iter ; return *this ;}
00171
00172 ConstIterator& operator--()
00173 { --m_Iter ; return *this ;}
00174
00175 bool operator!=(const ConstIterator &it)
00176 { return (m_Iter != it.m_Iter) ;}
00177
00178 bool operator==(const ConstIterator &it)
00179 { return (m_Iter == it.m_Iter) ;}
00180
00181 ConstIterator& operator = (const ConstIterator &iter)
00182 {
00183 m_Iter = iter.m_Iter;
00184 return iter ;
00185 }
00186
00187 ConstIterator(const ConstIterator &iter)
00188 { m_Iter = iter.m_Iter; }
00189
00190 private:
00191 PointsContainerIterator m_Iter ;
00192 } ;
00193
00195 Iterator Begin()
00196 {
00197 Iterator iter(m_PointsContainer->Begin());
00198 return iter;
00199 }
00200
00202 Iterator End()
00203 {
00204 Iterator iter(m_PointsContainer->End());
00205 return iter;
00206 }
00207
00209 ConstIterator Begin() const
00210 {
00211 ConstIterator iter(m_PointsContainer->Begin());
00212 return iter;
00213 }
00214
00216 ConstIterator End() const
00217 {
00218 ConstIterator iter(m_PointsContainer->End());
00219 return iter;
00220 }
00221
00222 protected:
00223 PointSetToListAdaptor() ;
00224 virtual ~PointSetToListAdaptor() {}
00225 void PrintSelf(std::ostream& os, Indent indent) const;
00226
00227 private:
00228 PointSetToListAdaptor(const Self&) ;
00229 void operator=(const Self&) ;
00230
00232 mutable PointSetPointer m_PointSet ;
00235 PointsContainerPointer m_PointsContainer ;
00237 mutable PointType m_TempPoint ;
00238 } ;
00239
00240 }
00241 }
00242
00243
00244 #ifndef ITK_MANUAL_INSTANTIATION
00245 #include "itkPointSetToListAdaptor.txx"
00246 #endif
00247
00248 #endif