mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Drop a hole that no ring can parent instead of failing the run (#401)
* wagyu: drop a hole no remaining ring can parent instead of throwing correct_tree() throws "Could not properly place hole to a parent" when topology correction leaves a hole whose parent ring was removed (degenerate input such as stacked duplicate rings from coalesced tiny-polygon placeholders). That aborts the entire tiling run over one unrepresentable sliver. Remove the ring and its points instead, matching how other unresolvable degeneracies are handled. * Add a regression test for dropping an unplaceable hole A fuzzer-minimized pair of mutually reversed self-intersecting rings that makes wagyu's correct_tree fail to find a parent for a hole — the same failure reported in mapbox/tippecanoe#761. Before the topology_correction change, running this test exits with EXIT_IMPOSSIBLE via the polygon cleaning error handler; with it, the clean returns.
This commit is contained in:
@@ -1296,7 +1296,10 @@ void correct_tree(ring_manager<T>& manager) {
|
||||
}
|
||||
if (!found) {
|
||||
if ((*itr)->is_hole()) {
|
||||
throw std::runtime_error("Could not properly place hole to a parent.");
|
||||
// No remaining ring contains this hole (degenerate input, e.g. stacked
|
||||
// duplicate rings from coalesced tiny-polygon placeholders); drop it
|
||||
// rather than fail the entire tiling run.
|
||||
remove_ring_and_points(*itr, manager, false);
|
||||
} else {
|
||||
// Assign to base of tree by passing nullptr
|
||||
reassign_as_child(*itr, static_cast<ring_ptr<T>>(nullptr), manager);
|
||||
|
||||
Reference in New Issue
Block a user