24 #include <fvmodels/scanlines/line_grid.h>
26 #include <fvutils/base/roi.h>
27 #include <fvutils/draw/drawer.h>
28 #include <core/exceptions/software.h>
60 ScanlineLineGrid::ScanlineLineGrid(
unsigned int width,
unsigned int height,
61 unsigned int offset_hor,
unsigned int offset_ver,
62 ROI* roi,
unsigned int gap)
65 __next_pixel = gap + 1;
66 set_grid_params(width, height,
67 offset_hor, offset_ver, roi);
73 ScanlineLineGrid::~ScanlineLineGrid()
79 ScanlineLineGrid::operator*()
85 ScanlineLineGrid::operator->()
91 ScanlineLineGrid::calc_coords()
94 bool more_to_come =
true;
101 next_px = std::min(__next_pixel, __offset_ver ? __offset_ver : __width);
102 coord.
x = __roi->start.x;
103 coord.
y = __roi->start.y + ((__roi->height - 1) % __offset_hor) / 2;
104 __point_list.push_back(coord);
106 while (more_to_come) {
107 if (coord.
x < (__roi->image_width - next_px))
113 if (coord.
y < (__roi->image_height - __offset_hor))
115 coord.
x = __roi->start.x;
116 coord.
y += __offset_hor;
120 more_to_come =
false;
124 if (more_to_come) __point_list.push_back(coord);
128 if (__offset_ver > 0)
131 next_px = std::min(__next_pixel, __offset_hor ? __offset_hor : __height);
132 coord.
x = __roi->start.x + ((__roi->width - 1) % __offset_ver) / 2;
133 coord.
y = __roi->start.y;
134 __point_list.push_back(coord);
136 while (more_to_come) {
137 if (coord.
y < (__roi->image_height - next_px))
143 if (coord.
x < (__roi->image_width - __offset_ver))
145 coord.
x += __offset_ver;
146 coord.
y = __roi->start.y;
150 more_to_come =
false;
154 if (more_to_come) __point_list.push_back(coord);
162 ScanlineLineGrid::operator++()
164 if (__cur != __point_list.end()) ++__cur;
165 return __cur != __point_list.end() ? &*__cur : &__point_list.back();
169 ScanlineLineGrid::operator++(
int)
171 if (__cur != __point_list.end()) {
175 else return &__point_list.back();
179 ScanlineLineGrid::finished()
181 return __cur == __point_list.end();
185 ScanlineLineGrid::reset()
187 __cur = __point_list.begin();
191 ScanlineLineGrid::get_name()
193 return "ScanlineModel::LineGrid";
198 ScanlineLineGrid::get_margin()
200 return std::max(__offset_ver, __offset_hor);
205 ScanlineLineGrid::set_robot_pose(
float x,
float y,
float ori)
212 ScanlineLineGrid::set_pan_tilt(
float pan,
float tilt)
228 ScanlineLineGrid::set_dimensions(
unsigned int width,
unsigned int height,
ROI* roi)
242 ScanlineLineGrid::set_roi(
ROI* roi)
246 if (!roi) __roi =
new ROI(0, 0, __width, __height, __width, __height);
252 __roi->set_image_height(__roi->start.y + __roi->height);
254 if (__roi->image_width > __width)
256 if (__roi->image_height > __height)
271 ScanlineLineGrid::set_offset(
unsigned int offset_hor,
unsigned int offset_ver)
273 __offset_hor = offset_hor;
274 __offset_ver = offset_ver;
294 ScanlineLineGrid::set_grid_params(
unsigned int width,
unsigned int height,
295 unsigned int offset_hor,
unsigned int offset_ver,
298 __offset_hor = offset_hor;
299 __offset_ver = offset_ver;
301 set_dimensions(width, height, roi);
unsigned int x
x coordinate
Point with cartesian coordinates as unsigned integers.
void set_image_width(unsigned int image_width)
Set full image width.
unsigned int y
y coordinate