diff options
| author | Kaalleen <36401965+kaalleen@users.noreply.github.com> | 2025-06-04 20:01:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-04 20:01:53 +0200 |
| commit | 547237d50a201e7768ea3701f51c3d7036eb7f13 (patch) | |
| tree | d1083092272bcdc50d4b51530e3f9cc8f21cc372 | |
| parent | c27098508b586ab2b1082d702661e8dba9db9604 (diff) | |
Smoothing and clamping (#3772)
* smoothing: ensure start and end of original path
* clamp path: never intersecting path could also be entirely in the exterior of the shape
| -rw-r--r-- | lib/utils/clamp_path.py | 8 | ||||
| -rw-r--r-- | lib/utils/smoothing.py | 6 |
2 files changed, 9 insertions, 5 deletions
diff --git a/lib/utils/clamp_path.py b/lib/utils/clamp_path.py index fcb34a4b..6b3a56e5 100644 --- a/lib/utils/clamp_path.py +++ b/lib/utils/clamp_path.py @@ -106,7 +106,10 @@ def clamp_path_to_polygon(path, polygon): except FloatingPointError: return path - if len(split_path.geoms) == 1: + # contains() checks can fail without the buffer. + buffered_polygon = prep(polygon.buffer(1e-9)) + + if len(split_path.geoms) == 1 and buffered_polygon.contains(split_path.geoms[0]): # The path never intersects with the polygon, so it's entirely inside. return path @@ -114,9 +117,6 @@ def clamp_path_to_polygon(path, polygon): # start or end coincides with the polygon boundary split_path = [ShapelyPoint(start), *split_path.geoms, ShapelyPoint(end)] - # contains() checks can fail without the buffer. - buffered_polygon = prep(polygon.buffer(1e-9)) - last_point_inside = None was_inside = False result = [] diff --git a/lib/utils/smoothing.py b/lib/utils/smoothing.py index 9c16bb0f..1511b0a3 100644 --- a/lib/utils/smoothing.py +++ b/lib/utils/smoothing.py @@ -57,4 +57,8 @@ def smooth_path(path, smoothness=1.0, iterations=5): r[-1] = ll[-1] points = ll * 0.75 + r * 0.25 - return [Point(*coord) for coord in points] + # we want to keep the old start and end points + start = [Point(* path[0])] + end = [Point(* path[-1])] + + return start + [Point(*coord) for coord in points] + end |
