brainrat-private  5.1.2
border.h
Go to the documentation of this file.
1 /* Copyright (C) 2000-2013 CEA
2  *
3  * This software and supporting documentation were developed by
4  * bioPICSEL
5  * CEA/DSV/I²BM/MIRCen/LMN, Batiment 61,
6  * 18, route du Panorama
7  * 92265 Fontenay-aux-Roses
8  * France
9  */
10 
11 #ifndef BRAINRAT_UTILITY_BORDER_H
12 #define BRAINRAT_UTILITY_BORDER_H
13 
14 #include <vector>
15 #include <cartobase/smart/rcptr.h>
16 #include <aims/data/data_g.h>
17 #include <aims/data/data_g.h>
18 
19 #define DEFAULT_BORDER 10 // Around
20 
21 namespace brainrat
22 {
23 
24  class BorderIterator : public carto::RCObject
25  {
26  public:
27  virtual inline ~BorderIterator() {}
28 
29  // Returns the current point in border
30  virtual const Point3d & value() const = 0;
31  virtual void next() = 0;
32  virtual bool isValid() const = 0;
33  virtual void restart() = 0;
34 
35  // Check if a point (in voxel referential) belongs to the border
36  virtual bool contains( const Point3d & ) const = 0;
37  virtual Point3d & width() = 0;
38  };
39 
40  //---------------------------------------------------------------------------
41  template <class T>
43  {
44  };
45 
46  //---------------------------------------------------------------------------
47  template< class T >
48  class Border3dIteratorOf<AimsData<T> > : public BorderIterator
49  {
50  public:
51  Border3dIteratorOf(const AimsData<T> & data, const Point3d & width);
52  Border3dIteratorOf(const AimsData<T> & data, const int32_t width);
53  virtual inline ~Border3dIteratorOf() {}
54 
55  // Returns the current point in border
56  virtual const Point3d & value() const;
57  virtual void next();
58  virtual bool isValid() const;
59  virtual void restart();
60 
61  // Check if a point (in voxel referential) belongs to the border
62  virtual bool contains( const Point3d & ) const;
63  virtual Point3d & width();
64 
65  private:
66  AimsData<T> _data;
67  Point3d _width;
68  Point3d _current;
69  Point3d _lastPoint;
70  };
71 
72  // Border extraction
73  template< class T >
74  inline AimsData< T > border( AimsData< T > &data, Point3d border )
75  {
76  std::vector< Point3d > v;
77 
79  while(b.isValid())
80  {
81  v.push_back(b.value());
82  b.next();
83  }
84 
85  AimsData< T > r(v.size());
86 
87  //std::cout << "border size : " << carto::toString(v.size()) << std::endl << std::flush;
88  for ( int32_t i = 0; i < v.size(); i++ )
89  r(i) = data(v[i]);
90 
91  return r;
92  }
93 
94  template< class T >
95  inline AimsData< T > border( AimsData< T > &data, uint32_t width )
96  {
97  return border(data, Point3d(width, width, width));
98  }
99 }
100 
101 #endif
virtual const Point3d & value() const
virtual bool contains(const Point3d &) const
Border3dIteratorOf(const AimsData< T > &data, const Point3d &width)
Border3dIteratorOf(const AimsData< T > &data, const int32_t width)
virtual const Point3d & value() const =0
virtual Point3d & width()=0
virtual bool isValid() const =0
virtual ~BorderIterator()
Definition: border.h:27
virtual bool contains(const Point3d &) const =0
virtual void restart()=0
virtual void next()=0
AimsData< T > border(AimsData< T > &data, Point3d border)
Definition: border.h:74