core/vgl/vgl_triangle_scan_iterator.h
Go to the documentation of this file.
00001 // This is core/vgl/vgl_triangle_scan_iterator.h
00002 #ifndef vgl_triangle_scan_iterator_h_
00003 #define vgl_triangle_scan_iterator_h_
00004 //:
00005 // \file
00006 // \brief Optimized polygon scan iterator for triangles
00007 // \author fsm
00008 // \verbatim
00009 //  Modifications
00010 //   Nov.2003 - Peter Vanroose - made class vgl_triangle_scan_iterator templated
00011 // \endverbatim
00012 
00013 #include <vgl/vgl_region_scan_iterator.h>
00014 
00015 #define use_polygon_scan_iterator 0
00016 
00017 //: Optimized polygon scan iterator for triangles.
00018 template <class T>
00019 class vgl_triangle_scan_iterator : public vgl_region_scan_iterator
00020 {
00021  public:
00022   //: Vertices of triangle
00023   struct pt { T x; T y; } a, b, c;
00024 
00025 #if use_polygon_scan_iterator
00026   vgl_triangle_scan_iterator() : data(0) {}
00027  ~vgl_triangle_scan_iterator();
00028 #endif
00029 
00030   void reset();
00031   bool next();
00032   inline int scany() const { return scany_; }
00033   inline int startx() const { return startx_; }
00034   inline int endx() const { return endx_; }
00035 
00036  private:
00037   int scany_;
00038   int startx_;
00039   int endx_;
00040 
00041 #if use_polygon_scan_iterator
00042   struct data_t;
00043   data_t *data;
00044 #else
00045   int y0, y1;
00046   int x0, x1;
00047 
00048   pt g; // centroid, for conditioning
00049   T data[3][3];
00050 #endif
00051 };
00052 
00053 #define VGL_TRIANGLE_SCAN_ITERATOR_INSTANTIATE(T) extern "please include <vgl/vgl_triangle_scan_iterator.txx> instead"
00054 
00055 #endif // vgl_triangle_scan_iterator_h_