Beispiel #1
0
 static void convolve_two_polygon_sets(polygon_set& result, const polygon_set& a, const polygon_set& b) {
   result.clear();
   std::vector<polygon> a_polygons;
   std::vector<polygon> b_polygons;
   a.get(a_polygons);
   b.get(b_polygons);
   for(std::size_t ai = 0; ai < a_polygons.size(); ++ai) {
     convolve_point_sequence_with_polygons(result, begin_points(a_polygons[ai]),
                                           end_points(a_polygons[ai]), b_polygons);
     for(typename polygon_with_holes_traits<polygon>::iterator_holes_type itrh = begin_holes(a_polygons[ai]);
         itrh != end_holes(a_polygons[ai]); ++itrh) {
       convolve_point_sequence_with_polygons(result, begin_points(*itrh),
                                             end_points(*itrh), b_polygons);
     }
     for(std::size_t bi = 0; bi < b_polygons.size(); ++bi) {
       polygon tmp_poly = a_polygons[ai];
       result.insert(convolve(tmp_poly, *(begin_points(b_polygons[bi]))));
       tmp_poly = b_polygons[bi];
       result.insert(convolve(tmp_poly, *(begin_points(a_polygons[ai]))));
     }
   }
 }