2 #ifndef vgl_triangle_scan_iterator_hxx_ 3 #define vgl_triangle_scan_iterator_hxx_ 13 # include <vcl_msvc_warnings.h> 18 void min_n_max(T a, T b, T c, T *min, T *max)
49 #if use_polygon_scan_iterator 74 #if use_polygon_scan_iterator 77 T x[3] = { a.x, b.x, c.x };
78 T y[3] = { a.y, b.y, c.y };
85 min_n_max(a.x, b.x, c.x, &min, &max);
86 x0 = (int) std::ceil (min);
87 x1 = (int) std::floor(max);
89 std::cerr <<
"x0 x1 = " << x0 <<
' ' << x1 <<
'\n';
92 min_n_max(a.y, b.y, c.y, &min, &max);
93 y0 = (int) std::ceil (min);
94 y1 = (int) std::floor(max);
96 std::cerr <<
"y0 y1 = " << y0 <<
' ' << y1 <<
'\n';
102 g.x = std::floor((a.x + b.x + c.x)/3);
103 g.y = std::floor((a.y + b.y + c.y)/3);
105 std::cerr <<
"g = " << g.x <<
' ' << g.y <<
'\n';
109 pt ag = { a.
x - g.x, a.y - g.y };
110 pt bg = { b.
x - g.x, b.y - g.y };
111 pt cg = { c.
x - g.x, c.y - g.y };
113 data[0][0] = bg.
y - cg.
y; data[0][1] = cg.
x - bg.
x; data[0][2] = bg.
x * cg.
y - bg.
y * cg.
x;
114 data[1][0] = cg.
y - ag.
y; data[1][1] = ag.
x - cg.
x; data[1][2] = cg.
x * ag.
y - cg.
y * ag.
x;
115 data[2][0] = ag.
y - bg.
y; data[2][1] = bg.
x - ag.
x; data[2][2] = ag.
x * bg.
y - ag.
y * bg.
x;
117 T tmp = ( bg.
x*cg.
y - bg.
x*ag.
y - ag.
x*cg.
y - cg.
x*bg.
y + cg.
x*ag.
y + ag.
x*bg.
y );
122 for (
auto & i : data) {
124 for (
int j=0; j<3; ++j)
128 std::cerr <<
"data:\n";
129 for (
int i=0; i<3; ++i) {
130 for (
int j=0; j<3; ++j)
131 std::cerr <<
' ' << data[i][j];
132 std::cerr << std::endl;
134 std::cerr << std::endl;
136 #endif // use_polygon_scan_iterator 142 #if use_polygon_scan_iterator 144 scany_ = data->scany();
145 startx_ = data->startx();
146 endx_ = data->endx();
159 std::cerr <<
"minx maxx = " << minx <<
' ' << maxx <<
'\n';
161 for (
auto & i : data) {
163 T b_ = i[1] * (scany_ - g.y) + i[2];
180 std::cerr <<
"minx maxx = " << minx <<
' ' << maxx <<
'\n';
184 startx_ = (int) std::ceil (minx + g.x);
185 endx_ = (int) std::floor(maxx + g.x);
196 #undef VGL_TRIANGLE_SCAN_ITERATOR_INSTANTIATE 197 #define VGL_TRIANGLE_SCAN_ITERATOR_INSTANTIATE(T) \ 198 template class vgl_triangle_scan_iterator<T > 200 #endif // vgl_triangle_scan_iterator_hxx_
bool next() override
Tries to move to the next scan line.
Optimized polygon scan iterator for triangles.
Optimized polygon scan iterator for triangles.
Fill a polygonal face with interior scan lines.
void reset() override
Resets the scan iterator to before the first scan line.