MCPcopy Create free account
hub / github.com/Notgnoshi/generative / polygonize

Function polygonize

generative/cxxbridge/noder.hpp:42–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40}
41
42[[nodiscard]] inline PolygonizationResult polygonize(const GeometryGraphShim& graph) noexcept
43{
44 const auto owned_edges = graph.inner().get_edges();
45 std::vector<const geos::geom::Geometry*> non_owned_edges;
46 non_owned_edges.reserve(owned_edges.size());
47 std::transform(
48 owned_edges.cbegin(),
49 owned_edges.cend(),
50 std::back_inserter(non_owned_edges),
51 [](const std::unique_ptr<geos::geom::LineString>& edge) -> const geos::geom::Geometry* {
52 return edge.get();
53 });
54
55 auto polygonizer = geos::operation::polygonize::Polygonizer();
56 // Adding the edges doesn't actually polygonize. That's deferred to the first time the polygons
57 // or dangles are accessed.
58 polygonizer.add(&non_owned_edges);
59
60 const auto polys = polygonizer.getPolygons();
61 // The dangles are just pointers back to the LineString pointers we passed in?
62 const auto dangles = polygonizer.getDangles();
63
64 PolygonizationResult retval;
65 retval.polygons.reserve(polys.size());
66 retval.dangles.reserve(dangles.size());
67
68 for (const auto& poly : polys)
69 {
70 LineStringShim result;
71 const auto* shell = poly->getExteriorRing();
72 result.vec.reserve(shell->getNumPoints());
73 const auto* coords = shell->getCoordinatesRO();
74 for (size_t i = 0; i < coords->size(); i++)
75 {
76 const auto coord = coords->getAt(i);
77 result.vec.push_back(CoordShim{coord.x, coord.y});
78 }
79 retval.polygons.push_back(result);
80 }
81
82 for (const auto* dangle : dangles)
83 {
84 LineStringShim result;
85 const auto* coords = dangle->getCoordinatesRO();
86 result.vec.reserve(coords->size());
87 for (size_t i = 0; i < coords->size(); i++)
88 {
89 const auto coord = coords->getAt(i);
90 result.vec.push_back(CoordShim{coord.x, coord.y});
91 }
92 retval.dangles.push_back(result);
93 }
94
95 return retval;
96}

Callers

nothing calls this directly

Calls 3

get_edgesMethod · 0.80
cbeginMethod · 0.80
cendMethod · 0.80

Tested by

no test coverage detected