Beispiel #1
0
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())));
}