bool GerberImporter::simplify_cutins(ring_type& ring, polygon_type& polygon) { for (int i = 0; i < int(ring.size()) - 2; i++) { for (int j = i + 1; j < int(ring.size()) - 1; j++) { if (bg::equals(ring.at(i), ring.at(j + 1)) && bg::equals(ring.at(i + 1), ring.at(j))) { polygon.inners().resize(polygon.inners().size() + 1); polygon.inners().back().resize(j - i); copy(ring.begin() + i + 1, ring.begin() + j + 1, polygon.inners().back().begin()); ring.erase(ring.begin() + i + 1, ring.begin() + j + 2); break; } } } if (polygon.inners().size() > 0) { if (&ring != &(polygon.outer())) { polygon.outer().resize(ring.size()); copy(ring.begin(), ring.end(), polygon.outer().begin()); } bg::correct(polygon); return true; } else return false; }
void Voronoi::copy_ring(const ring_type& ring, vector<segment_type_p> &segments) { for (auto iter = ring.begin(); iter + 1 != ring.end(); iter++) segments.push_back(segment_type_p(point_type_p(iter->x(), iter->y()), point_type_p((iter + 1)->x(), (iter + 1)->y()))); }