mirror of
https://github.com/boostorg/geometry.git
synced 2026-01-29 19:42:10 +00:00
[self_turns] Changes for self-turns and fix dissolve
This commit is contained in:
@@ -87,11 +87,13 @@ public:
|
||||
is_acceptable_turn<Geometry>
|
||||
> interrupt_policy;
|
||||
|
||||
// Calculate self-turns, skipping adjacent segments
|
||||
detail::self_get_turn_points::self_turns<false, turn_policy>(geometry,
|
||||
strategy,
|
||||
robust_policy,
|
||||
turns,
|
||||
interrupt_policy);
|
||||
interrupt_policy,
|
||||
0, true);
|
||||
|
||||
if (interrupt_policy.has_intersections)
|
||||
{
|
||||
|
||||
@@ -318,15 +318,20 @@ std::cout << "get turns" << std::endl;
|
||||
visitor.visit_turns(1, turns);
|
||||
|
||||
#if ! defined(BOOST_GEOMETRY_NO_SELF_TURNS)
|
||||
if (needs_self_turns<Geometry1>::apply(geometry1))
|
||||
if (! turns.empty() || OverlayType == overlay_dissolve)
|
||||
{
|
||||
self_get_turn_points::self_turns<Reverse1, assign_null_policy>(geometry1,
|
||||
strategy, robust_policy, turns, policy, 0);
|
||||
}
|
||||
if (needs_self_turns<Geometry2>::apply(geometry2))
|
||||
{
|
||||
self_get_turn_points::self_turns<Reverse2, assign_null_policy>(geometry2,
|
||||
strategy, robust_policy, turns, policy, 1);
|
||||
// Calculate self turns if the output contains turns already,
|
||||
// and if necessary (e.g.: multi-geometry, polygon with interior rings)
|
||||
if (needs_self_turns<Geometry1>::apply(geometry1))
|
||||
{
|
||||
self_get_turn_points::self_turns<Reverse1, assign_null_policy>(geometry1,
|
||||
strategy, robust_policy, turns, policy, 0);
|
||||
}
|
||||
if (needs_self_turns<Geometry2>::apply(geometry2))
|
||||
{
|
||||
self_get_turn_points::self_turns<Reverse2, assign_null_policy>(geometry2,
|
||||
strategy, robust_policy, turns, policy, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -200,12 +200,9 @@ struct dissolve_ring
|
||||
cluster_type clusters;
|
||||
|
||||
// Enrich/traverse the polygons
|
||||
typename Strategy::side_strategy_type const
|
||||
side_strategy = strategy.get_side_strategy();
|
||||
|
||||
enrich_intersection_points<Reverse, Reverse, overlay_dissolve>(turns,
|
||||
clusters, input_ring, input_ring, rescale_policy,
|
||||
side_strategy);
|
||||
strategy);
|
||||
|
||||
visitor.visit_turns(2, turns);
|
||||
|
||||
@@ -374,7 +371,7 @@ struct dissolve_polygon
|
||||
// expect - alternatively, difference could be used to have them pure
|
||||
// as interior rings only
|
||||
return detail::sym_difference::sym_difference_insert<GeometryOut>(
|
||||
exterior_out, interior_out, rescale_policy, out);
|
||||
exterior_out, interior_out, out);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user