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_