35 #ifndef AIMS_ROI_MASKITERATOR_H 36 #define AIMS_ROI_MASKITERATOR_H 64 virtual const Point3d &value()
const = 0;
66 virtual const Point3df valueMillimeters()
const = 0;
67 virtual void next() = 0;
68 virtual bool isValid()
const = 0;
69 virtual void restart() = 0;
72 virtual const Point3df voxelSize()
const = 0;
77 virtual float voxelVolume()
const = 0;
79 virtual bool contains(
const Point3d & )
const = 0;
81 virtual bool contains(
const Point3df & )
const = 0;
83 virtual const Point3d volumeDimension()
const = 0;
84 virtual std::string regionName()
const = 0;
96 virtual const Point3d &value()
const;
97 virtual const Point3df valueMillimeters()
const;
99 virtual bool isValid()
const;
100 virtual void restart();
102 virtual const Point3df voxelSize()
const;
103 virtual float voxelVolume()
const;
104 virtual bool contains(
const Point3d & )
const;
105 virtual bool contains(
const Point3df & )
const;
106 virtual const Point3d volumeDimension()
const;
107 virtual std::string regionName()
const;
130 const std::vector<std::string> & ) {}
153 std::vector<std::string> _nameAttributes;
158 const std::vector<std::string> & name_attributes
159 = std::vector<std::string>() );
162 virtual void setRegionNameAttributes(
163 const std::vector<std::string> & attributes );
175 std::list<std::string> _attributeNames;
176 std::list<std::string>::const_iterator _itAttributeNames;
180 std::unique_ptr< NodeFilter > _nodeFilter;
182 std::vector<std::string> _nameAttributes;
185 _findBucketAttributeNames(
const Graph &graph,
187 std::list<std::string> &attributeNames );
190 void _getRequiredAttributes();
203 const std::vector<std::string> & regionNameAttributes =
204 std::vector<std::string>() );
212 const std::string &label,
215 const std::vector<std::string> & regionNameAttributes =
216 std::vector<std::string>() );
223 MaskIteratorOf(
const std::string &fileName,
const std::string &label,
226 const std::vector<std::string> & regionNameAttributes =
227 std::vector<std::string>() );
231 virtual float voxelVolume()
const {
return _voxelSize[0]*_voxelSize[1]*_voxelSize[2]; }
232 virtual const Point3d &value()
const;
233 virtual const Point3df valueMillimeters()
const;
235 virtual bool isValid()
const;
236 virtual void restart();
238 virtual bool contains(
const Point3d & )
const;
239 virtual bool contains(
const Point3df & )
const;
240 virtual const Point3d volumeDimension()
const;
241 virtual std::string regionName()
const;
249 virtual void setRegionNameAttributes(
const std::vector<std::string>
291 return Point3df( _data->sizeX(), _data->sizeY(), _data->sizeZ() );
295 return _data->sizeX() * _data->sizeY() * _data->sizeZ();
297 virtual const Point3d &value()
const;
298 virtual const Point3df valueMillimeters()
const;
300 virtual bool isValid()
const;
301 virtual void restart();
303 virtual bool contains(
const Point3d & )
const;
304 virtual bool contains(
const Point3df & )
const;
305 virtual const Point3d volumeDimension()
const;
306 virtual std::string regionName()
const;
310 virtual void restart(
const T &label );
323 _data( const_cast<
AimsData<T> *>( &data ) ),
325 _voxelSampler( voxelSampler )
336 _data( const_cast<
AimsData<T> *>( &data ) ),
338 _voxelSampler( voxelSampler )
349 _data( const_cast<
AimsData<T> *>( &data ) ),
351 _voxelSampler( voxelSampler )
360 MaskIteratorOf(
const std::string &fileName,
364 _voxelSampler( voxelSampler )
367 reader.
read( *_data );
375 MaskIteratorOf(
const std::string &fileName,
const T &label,
379 _voxelSampler( voxelSampler )
382 reader.
read( *_data );
395 _voxelSampler( voxelSampler )
398 reader.
read( *_data );
407 if ( _freeData )
delete _data;
422 if ( _voxelSampler.isNull() ) {
423 return Point3df( _current[0] * _data->sizeX(),
424 _current[1] * _data->sizeY(),
425 _current[2] * _data->sizeZ() );
427 const Point3df &voxelSample = _voxelSampler->value();
428 return Point3df( ( _current[0] + voxelSample[ 0 ] ) * _data->sizeX(),
429 ( _current[1] + voxelSample[ 1 ] ) * _data->sizeY(),
430 ( _current[2] + voxelSample[ 2 ] ) * _data->sizeZ() );
438 if ( (_useLabel && (*_data)( _current ) == (T) _label) ||
439 (!_useLabel && (*_data)( _current ) ) )
442 if ( ! _voxelSampler.isNull() )
444 _voxelSampler->next();
445 if ( _voxelSampler->isValid() )
450 if ( ! _voxelSampler.isNull() )
452 _voxelSampler->restart();
455 if ( _current == _lastPoint )
457 _current[ 0 ] = _data->dimX();
458 _current[ 1 ] = _data->dimY();
459 _current[ 2 ] = _data->dimZ();
464 if ( _current[ 0 ] == _data->dimX() ) {
467 if ( _current[ 1 ] == _data->dimY() ) {
472 }
while(
isValid() && ( _useLabel ?
473 (*_data)( _current ) != (T) _label :
474 ! (*_data)( _current ) ) );
482 return _current[ 2 ] < _data->dimZ();
489 if ( ! _voxelSampler.isNull() )
491 _voxelSampler->restart();
494 _current[ 0 ] = _current[ 1 ] = _current[ 2 ] = 0;
495 _lastPoint[ 0 ] = _data->dimX()-1;
496 _lastPoint[ 1 ] = _data->dimY()-1;
497 _lastPoint[ 2 ] = _data->dimZ()-1;
499 if (
isValid() && ( _useLabel ?
500 (*_data)( _current ) != (T) _label :
501 ! (*_data)( _current ) ) )
next();
508 if ( ! _voxelSampler.isNull() )
510 _voxelSampler->restart();
515 _current[ 0 ] = _current[ 1 ] = _current[ 2 ] = 0;
516 _lastPoint[ 0 ] = _data->dimX()-1;
517 _lastPoint[ 1 ] = _data->dimY()-1;
518 _lastPoint[ 2 ] = _data->dimZ()-1;
520 if (
isValid() && ( (*_data)( _current ) != _label ) )
530 if ( ! _voxelSampler.isNull() )
532 _voxelSampler->restart();
545 if ( p[ 0 ] >= 0 && p[ 0 ] < _data->dimX() &&
546 p[ 1 ] >= 0 && p[ 1 ] < _data->dimY() &&
547 p[ 2 ] >= 0 && p[ 2 ] < _data->dimZ() ) {
549 return (*_data)( p ) == _label;
551 return (*_data)( p );
561 const Point3d pixel( (
short) rint( p[ 0 ] / _data->sizeX() ),
562 (
short) rint( p[ 1 ] / _data->sizeY() ),
563 (
short) rint( p[ 2 ] / _data->sizeZ() ) );
572 return Point3d( _data->dimX(), _data->dimY(), _data->dimZ() );
virtual float voxelVolume() const
carto::rc_ptr< MaskIterator > getMaskIterator(const std::string &fileName)
virtual const Point3df voxelSize() const
The class for EcatSino data write operation.
virtual bool isValid() const =0
virtual const Point3d & value() const =0
virtual void setRegionNameAttributes(const std::vector< std::string > &)
virtual ~LabelNodeFilter()
virtual const Point3df voxelSize() const
An alternate, ordered, representation for buckets (voxels lists).
virtual float voxelVolume() const
VSet::const_iterator const_iterator
carto::rc_ptr< MaskIterator > _maskIterator
Generic reader for every format of Aims object.
virtual bool contains(const Point3d &) const =0
virtual std::string regionName() const =0
LabelNodeFilter(int label)
virtual ~NameNodeFilter()
std::string toString(const T &object)
virtual bool read(T &obj, int border=0, const std::string *format=0, int frame=-1)
Finds the correct format and reads the object. if format is specified, this format is tried first...
virtual const Point3df valueMillimeters() const =0
virtual const Point3d volumeDimension() const =0