178 adjust_splines> &voronoi) :
179 _width(voronoi.
width()),
190 for ( voronoi_citer cell_it = voronoi.begin(), cell_end = voronoi.end()
191 ; cell_it != cell_end ; ++cell_it ) {
195 ; polygon_it != polygon_end ; ++polygon_it ) {
196 if ( same_color(polygon_it->rgba, cell_it->rgba) ) {
199 if ( common_edge.
ok ) {
203 for (
iterator polygon2_it = polygon_it + 1
204 ; polygon2_it != polygon_end ; ++polygon2_it ) {
205 if ( same_color(polygon_it->rgba, polygon2_it->rgba) ) {
208 polygon2_it->vertices);
209 if ( common_edge2.
ok ) {
222 Polygon polygon(cell_it->rgba);
223 polygon.
vertices = cell_it->vertices;
232 for (
typename std::vector<Polygon>::iterator it =
_polygons.begin(),
259 for (
points_iter it = dst_begin ; it != dst_end ; ++it ) {
260 points_citer src_it = std::find(src_begin, src_end, *it);
262 if ( src_it == src_end )
269 while ( *dst_common_edge_begin == *src_common_edge_end ) {
270 if ( dst_common_edge_begin == dst_begin )
271 dst_common_edge_begin = dst_end - 1;
273 --dst_common_edge_begin;
275 ++src_common_edge_end;
276 if ( src_common_edge_end == src_end )
277 src_common_edge_end = src_begin;
281 ++dst_common_edge_begin;
282 if ( dst_common_edge_begin == dst_end )
283 dst_common_edge_begin = dst_begin;
285 if ( src_common_edge_end == src_begin )
286 src_common_edge_end = src_end - 1;
288 --src_common_edge_end;
294 while ( *dst_common_edge_end == *src_common_edge_begin ) {
295 ++dst_common_edge_end;
296 if ( dst_common_edge_end == dst_end )
297 dst_common_edge_end = dst_begin;
299 if ( src_common_edge_begin == src_begin )
300 src_common_edge_begin = src_end - 1;
302 --src_common_edge_begin;
306 if ( dst_common_edge_end == dst_begin )
307 dst_common_edge_end = dst_end - 1;
309 --dst_common_edge_end;
311 ++src_common_edge_begin;
312 if ( src_common_edge_begin == src_end )
313 src_common_edge_begin = src_begin;
318 if ( dst_common_edge_begin == dst_common_edge_end )
325 ret.
dst_end = dst_common_edge_end;
329 ret.
src_end = src_common_edge_end;
382 typename Points::difference_type
index;
389 common_edge.
dst_end + 1) - dst.begin();
393 dst.erase(common_edge.
dst_begin, dst.end());
394 dst.erase(dst.begin(), common_edge.
dst_end);
395 index = dst.end() - dst.begin();
402 const typename Points::difference_type nfirstinserted
403 = src.end() - common_edge.
src_end;
404 const typename Points::difference_type nsecondinserted
405 = 1 + (common_edge.
src_begin - src.begin());
407 dst.reserve(dst.size() + nfirstinserted + nsecondinserted);
409 dst.insert(dst.begin() +
index, common_edge.
src_end, src.end());
411 dst.insert(dst.begin() +
index + nfirstinserted,
416 dst.reserve(dst.size() + 1
419 dst.insert(dst.begin() +
index,
434 const typename std::vector<Points>::size_type hole_index = holes.size();
435 holes.resize(hole_index + 1);
437 for (
points_iter it = region_begin + 1 ; it != region_end ; ++it ) {
438 points_iter res = std::find(it + 1, region_end, *it);
439 if ( res == region_end )
442 holes[hole_index].insert(holes[hole_index].
end(), region_begin,
449 }
while ( *it == *res );
450 _fill_holes(holes, it - 1, res + 2);
455 holes[hole_index].insert(holes[hole_index].
end(), region_begin,
void _fill_holes(std::vector< Points > &holes, points_iter region_begin, points_iter region_end)
Weird recursive function created to solve the complex problem to fill polygons holes without the need...