MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //----------------------------------------------------------------------------- 00005 00010 //----------------------------------------------------------------------------- 00011 00012 #ifndef __CSOPathPointIterator_H 00013 #define __CSOPathPointIterator_H 00014 00015 #include "CSOBase/CSO.h" 00016 #include "MLCSOIncludes.h" 00017 00018 ML_START_NAMESPACE 00019 00020 class MLCSO_EXPORT CSOPathPointIterator 00021 { 00022 public: 00023 00025 00026 static const unsigned int INVALID_INDEX; 00027 00029 00031 CSOPathPointIterator(); 00033 CSOPathPointIterator(CSO* cso, unsigned int startPathIndex=0, unsigned int startPointIndex=0); 00035 CSOPathPointIterator(CSO* cso, CSOPathPoints* pathPoints, unsigned int startPathIndex, unsigned int startPointIndex=0); 00037 CSOPathPointIterator(CSO* cso, CSOPathPoints* pathPoints, unsigned int startPointIndex=0); 00039 CSOPathPointIterator(CSO* cso, CSOSeedPoint* startSeedPoint); 00041 CSOPathPointIterator(const CSOPathPointIterator& rhs); 00042 00044 ~CSOPathPointIterator() {} 00045 00047 00049 CSOPathPointIterator& operator++ (); 00051 CSOPathPointIterator operator++ (int dummy); 00052 00054 CSOPathPointIterator& operator-- (); 00056 CSOPathPointIterator operator-- (int dummy); 00057 00059 CSOPathPointIterator& operator+= (int offset); 00061 CSOPathPointIterator& operator-= (int offset); 00062 00064 CSOPathPointIterator operator+ (int offset) const; 00066 CSOPathPointIterator operator- (int offset) const; 00067 00069 CSOPathPointIterator& operator= (const CSOPathPointIterator& rhs); 00070 00072 bool operator== (const CSOPathPointIterator& rhs) const; 00074 bool operator!= (const CSOPathPointIterator& rhs) const; 00076 bool operator> (const CSOPathPointIterator& rhs) const; 00078 bool operator>= (const CSOPathPointIterator& rhs) const; 00080 bool operator< (const CSOPathPointIterator& rhs) const; 00082 bool operator<= (const CSOPathPointIterator& rhs) const; 00083 00085 00087 inline const CSO* getCSO () const { return _cso; } 00089 inline CSO* getCSO () { return _cso; } 00090 00092 inline unsigned int getPathIndex () const { return _pathIndex; } 00094 inline unsigned int getPointIndex () const { return _pointIndex; } 00095 00096 // Returns a pointer to the current path point list. 00097 inline const CSOPathPoints* getPathPoints() const { return _pathPoints; } 00098 // Returns a pointer to the current path point list. 00099 inline CSOPathPoints* getPathPoints() { return _pathPoints; } 00100 00102 inline Vector3 getPos () const { return _pathPoints->getPosAt(_pointIndex); } 00104 inline const Vector4& getPosValue () const { return _pathPoints->getPosValueAt(_pointIndex); } 00106 inline double getValue () const { return _pathPoints->getValueAt(_pointIndex); } 00107 00109 inline void setPos(const Vector3& p) { _pathPoints->setPosAt(p, _pointIndex); } 00111 inline void setPosValue(const Vector4& p) { _pathPoints->setPosValueAt(p, _pointIndex); } 00113 inline void setValue(const double& v) { _pathPoints->setValueAt(static_cast<float>(v), _pointIndex); } 00114 00116 inline unsigned int numPoints () const { return _numPoints; } 00119 inline unsigned int numProcessedPoints () const { return mlAbs(_pointCounterInc-_pointCounterDec); } 00122 inline unsigned int numTotalProcessedPoints () const { return isEnd() ? _pointCounterInc+_pointCounterDec : _pointCounterInc+_pointCounterDec+1; } 00123 00125 00127 void resetCounters() { _pointCounterInc = _pointCounterDec = 0; } 00128 00130 00132 void makeEnd(); 00135 inline bool isEnd() const { return (_pathIndex == INVALID_INDEX) && (_pointIndex == INVALID_INDEX); } 00136 00138 CSOPathPointIterator next() const; 00140 CSOPathPointIterator prev() const; 00141 00142 private: 00143 00145 void _copy(const CSOPathPointIterator& rhs); 00146 00148 bool _valid() const; 00149 00152 bool _findValidPathPointList(); 00153 00155 CSO* _cso; 00157 CSOPathPoints* _pathPoints; 00158 00160 unsigned int _pathIndex; 00162 unsigned int _pointIndex; 00163 00165 unsigned int _numPathPointLists; 00167 unsigned int _numPoints; 00168 00170 unsigned int _startPathIndex; 00172 unsigned int _startPointIndex; 00173 00175 unsigned int _pointCounterInc; 00176 00178 unsigned int _pointCounterDec; 00179 00180 }; 00181 00182 class MLCSO_EXPORT CSOPathPointConstIterator 00183 { 00184 public: 00185 00187 00188 static const unsigned int INVALID_INDEX; 00189 00191 00193 CSOPathPointConstIterator(); 00195 CSOPathPointConstIterator(const CSO* cso, unsigned int startPathIndex=0, unsigned int startPointIndex=0); 00197 CSOPathPointConstIterator(const CSO* cso, const CSOPathPoints* pathPoints, unsigned int startPathIndex, unsigned int startPointIndex=0); 00199 CSOPathPointConstIterator(const CSO* cso, const CSOPathPoints* pathPoints, unsigned int startPointIndex=0); 00201 CSOPathPointConstIterator(const CSO* cso, const CSOSeedPoint* startSeedPoint); 00203 CSOPathPointConstIterator(const CSOPathPointConstIterator& rhs); 00204 00206 ~CSOPathPointConstIterator() {} 00207 00209 00211 CSOPathPointConstIterator& operator++ (); 00213 CSOPathPointConstIterator operator++ (int dummy); 00214 00216 CSOPathPointConstIterator& operator-- (); 00218 CSOPathPointConstIterator operator-- (int dummy); 00219 00221 CSOPathPointConstIterator& operator+= (int offset); 00223 CSOPathPointConstIterator& operator-= (int offset); 00224 00226 CSOPathPointConstIterator operator+ (int offset) const; 00228 CSOPathPointConstIterator operator- (int offset) const; 00229 00231 CSOPathPointConstIterator& operator= (const CSOPathPointConstIterator& rhs); 00232 00234 bool operator== (const CSOPathPointConstIterator& rhs) const; 00236 bool operator!= (const CSOPathPointConstIterator& rhs) const; 00238 bool operator> (const CSOPathPointConstIterator& rhs) const; 00240 bool operator>= (const CSOPathPointConstIterator& rhs) const; 00242 bool operator< (const CSOPathPointConstIterator& rhs) const; 00244 bool operator<= (const CSOPathPointConstIterator& rhs) const; 00245 00247 00249 inline const CSO* getCSO () const { return _cso; } 00250 00252 inline unsigned int getPathIndex () const { return _pathIndex; } 00254 inline unsigned int getPointIndex () const { return _pointIndex; } 00255 00256 // Returns a pointer to the current path point list. 00257 inline const CSOPathPoints* getPathPoints () const { return _pathPoints; } 00258 00260 inline Vector3 getPos () const { return _pathPoints->getPosAt(_pointIndex); } 00262 inline const Vector4& getPosValue () const { return _pathPoints->getPosValueAt(_pointIndex); } 00264 inline double getValue () const { return _pathPoints->getValueAt(_pointIndex); } 00265 00267 inline unsigned int numPoints () const { return _numPoints; } 00270 inline unsigned int numProcessedPoints () const { return mlAbs(_pointCounterInc-_pointCounterDec); } 00273 inline unsigned int numTotalProcessedPoints () const { return isEnd() ? _pointCounterInc+_pointCounterDec : _pointCounterInc+_pointCounterDec+1; } 00274 00276 00278 void resetCounters() { _pointCounterInc = _pointCounterDec = 0; } 00279 00281 00283 void makeEnd(); 00286 inline bool isEnd() const { return (_pathIndex == INVALID_INDEX) && (_pointIndex == INVALID_INDEX); } 00287 00289 CSOPathPointConstIterator next() const; 00291 CSOPathPointConstIterator prev() const; 00292 00293 private: 00294 00296 void _copy(const CSOPathPointConstIterator& rhs); 00297 00299 bool _valid() const; 00300 00303 bool _findValidPathPointList(); 00304 00306 const CSO* _cso; 00308 const CSOPathPoints* _pathPoints; 00309 00311 unsigned int _pathIndex; 00313 unsigned int _pointIndex; 00314 00316 unsigned int _numPathPointLists; 00318 unsigned int _numPoints; 00319 00321 unsigned int _startPathIndex; 00323 unsigned int _startPointIndex; 00324 00326 unsigned int _pointCounterInc; 00327 00329 unsigned int _pointCounterDec; 00330 00331 }; 00332 00334 const CSOPathPointIterator CSOPathPointIteratorEnd = CSOPathPointIterator(); 00335 00337 const CSOPathPointConstIterator CSOPathPointConstIteratorEnd = CSOPathPointConstIterator(); 00338 00339 ML_END_NAMESPACE 00340 00341 #endif // __CSOPathPointIterator_H 00342 00343 00344