From fdb24c008e3a2d687e7d56b3d9d7164d83dfcc13 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas Date: Mon, 13 Feb 2023 01:21:29 +0200 Subject: [PATCH] Fix guide snapping segment detection The previous method was not working for perspective guides rotated at 315 degrees, due to the test line being parallel to it. Thanks to Variable for the solution. --- src/Tools/BaseTool.gd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd index f444da0f6..0f6dc82e8 100644 --- a/src/Tools/BaseTool.gd +++ b/src/Tools/BaseTool.gd @@ -216,8 +216,11 @@ func _get_closest_point_to_grid( func _get_closest_point_to_segment( position: Vector2, distance: Vector2, s1: Vector2, s2: Vector2 ) -> Vector2: + var test_line := (s2 - s1).rotated(deg2rad(90)).normalized() + var from_a := position - test_line * distance.length() + var from_b := position + test_line * distance.length() var closest_point := Vector2.INF - if Geometry.segment_intersects_segment_2d(position - distance, position + distance, s1, s2): + if Geometry.segment_intersects_segment_2d(from_a, from_b, s1, s2): closest_point = Geometry.get_closest_point_to_segment_2d(position, s1, s2) return closest_point