Skip to content

Commit

Permalink
Remove void version of buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
eyal0 committed Jul 1, 2020
1 parent 7524539 commit 1aa4eec
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 41 deletions.
46 changes: 13 additions & 33 deletions bg_helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,9 @@ multi_polygon_type_fp buffer(linestring_type_fp const & geometry_in, CoordinateT
}

template<typename CoordinateType>
void buffer(multi_linestring_type_fp const & geometry_in, multi_polygon_type_fp & geometry_out, CoordinateType expand_by) {
multi_polygon_type_fp buffer(multi_linestring_type_fp const & geometry_in, CoordinateType expand_by) {
if (expand_by == 0) {
geometry_out.clear();
return;
return {};
}
// bg::buffer of multilinestring is broken in boost. Converting the
// multilinestring to non-intersecting paths seems to help.
Expand All @@ -70,53 +69,34 @@ void buffer(multi_linestring_type_fp const & geometry_in, multi_polygon_type_fp
std::unique_ptr<geos::geom::Geometry> geos_out(geos::operation::buffer::BufferOp::bufferOp(geos_in.get(), expand_by, points_per_circle/4));
geos::io::WKTWriter writer;
auto geos_wkt = writer.write(geos_out.get());
multi_polygon_type_fp ret;
if (strncmp(geos_wkt.c_str(), "MULTIPOLYGON", 12) == 0) {
bg::read_wkt(geos_wkt, geometry_out);
bg::read_wkt(geos_wkt, ret);
} else {
polygon_type_fp poly;
bg::read_wkt(geos_wkt, poly);
geometry_out.clear();
geometry_out.push_back(poly);
ret.push_back(poly);
}
return ret;
#else
geometry_out.clear();
if (expand_by == 0) {
return;
return {};
}
multi_polygon_type_fp ret;
for (const auto& ls : mls) {
geometry_out = geometry_out + buffer(ls, expand_by);
ret = ret + buffer(ls, expand_by);
}
return ret;
#endif
}

template void buffer(const multi_linestring_type_fp&, multi_polygon_type_fp&, double expand_by);

template<typename CoordinateType>
multi_polygon_type_fp buffer(multi_linestring_type_fp const & geometry_in, CoordinateType expand_by) {
multi_polygon_type_fp geometry_out;
buffer(geometry_in, geometry_out, expand_by);
return geometry_out;
}

template multi_polygon_type_fp buffer(const multi_linestring_type_fp&, double expand_by);

template<typename CoordinateType>
void buffer(ring_type_fp const & geometry_in, multi_polygon_type_fp & geometry_out, CoordinateType expand_by) {
if (expand_by == 0) {
bg::convert(geometry_in, geometry_out);
} else {
polygon_type_fp geometry_in_fp;
bg::convert(geometry_in, geometry_in_fp);
multi_polygon_type_fp geometry_out_fp;
bg::buffer(geometry_in_fp, geometry_out,
bg::strategy::buffer::distance_symmetric<CoordinateType>(expand_by),
bg::strategy::buffer::side_straight(),
bg::strategy::buffer::join_round(),
bg::strategy::buffer::end_round(),
bg::strategy::buffer::point_circle());
}
multi_polygon_type_fp buffer(ring_type_fp const & geometry_in, CoordinateType expand_by) {
return buffer(polygon_type_fp{geometry_in}, expand_by);
}

template void buffer(ring_type_fp const&, multi_polygon_type_fp&, double);
template multi_polygon_type_fp buffer(ring_type_fp const&, double);

} // namespace bg_helpers
5 changes: 1 addition & 4 deletions bg_helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,11 @@ multi_polygon_type_fp buffer(multi_polygon_type_fp const & geometry_in, coordina
template<typename CoordinateType>
multi_polygon_type_fp buffer(polygon_type_fp const & geometry_in, CoordinateType expand_by);

template<typename CoordinateType>
void buffer(multi_linestring_type_fp const & geometry_in, multi_polygon_type_fp & geometry_out, CoordinateType expand_by);

template<typename CoordinateType>
multi_polygon_type_fp buffer(multi_linestring_type_fp const & geometry_in, CoordinateType expand_by);

template<typename CoordinateType>
void buffer(ring_type_fp const & geometry_in, multi_polygon_type_fp & geometry_out, CoordinateType expand_by);
multi_polygon_type_fp buffer(ring_type_fp const & geometry_in, CoordinateType expand_by);

} // namespace bg_helpers

Expand Down
8 changes: 4 additions & 4 deletions surface_vectorial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ vector<polygon_type_fp> find_thermal_reliefs(const multi_polygon_type_fp& millin
for (const auto& inner : p.inners()) {
auto thermal_hole = inner;
bg::correct(thermal_hole); // Convert it from a hole to a filled-in shape.
multi_polygon_type_fp shrunk_thermal_hole;
bg_helpers::buffer(thermal_hole, shrunk_thermal_hole, -tolerance);
multi_polygon_type_fp shrunk_thermal_hole =
bg_helpers::buffer(thermal_hole, -tolerance);
bool empty_hole = !bg::intersects(shrunk_thermal_hole, milling_surface);
if (!empty_hole) {
continue;
Expand Down Expand Up @@ -828,8 +828,8 @@ vector<pair<coordinate_type_fp, vector<shared_ptr<icoords>>>> Surface_vectorial:
for (const auto& ls_and_allow_reversal : new_trace_toolpath) {
combined_trace_toolpath.push_back(ls_and_allow_reversal.first);
}
multi_polygon_type_fp new_trace_toolpath_bufferred;
bg_helpers::buffer(combined_trace_toolpath, new_trace_toolpath_bufferred, tool_diameter/2);
multi_polygon_type_fp new_trace_toolpath_bufferred =
bg_helpers::buffer(combined_trace_toolpath, tool_diameter/2);
already_milled[trace_index] = already_milled[trace_index] + new_trace_toolpath_bufferred;
}
const string tool_suffix = tool_count > 1 ? "_" + std::to_string(tool_index) : "";
Expand Down

0 comments on commit 1aa4eec

Please sign in to comment.