diff options
author | Bernhard Liebl <Bernhard.Liebl@gmx.org> | 2017-12-27 09:28:02 +0100 |
---|---|---|
committer | Bernhard Liebl <Bernhard.Liebl@gmx.org> | 2017-12-27 20:24:58 +0100 |
commit | 8505871a87b59b27acc0912a6dd815231c3b78b1 (patch) | |
tree | 31a4fdc7afe2cd3960380fa7695d508f54c043a2 /scene/resources/shape_line_2d.cpp | |
parent | 32d8b99bc31e3762ae0dc017a05567da2802a313 (diff) | |
download | redot-engine-8505871a87b59b27acc0912a6dd815231c3b78b1.tar.gz |
More exact picking for canvas editor
Diffstat (limited to 'scene/resources/shape_line_2d.cpp')
-rw-r--r-- | scene/resources/shape_line_2d.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/scene/resources/shape_line_2d.cpp b/scene/resources/shape_line_2d.cpp index 512ff3bc56..3476b73dff 100644 --- a/scene/resources/shape_line_2d.cpp +++ b/scene/resources/shape_line_2d.cpp @@ -30,6 +30,21 @@ #include "shape_line_2d.h" #include "servers/physics_2d_server.h" #include "servers/visual_server.h" + +bool LineShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { + + Vector2 point = get_d() * get_normal(); + Vector2 l[2][2] = { { point - get_normal().tangent() * 100, point + get_normal().tangent() * 100 }, { point, point + get_normal() * 30 } }; + + for (int i = 0; i < 2; i++) { + Vector2 closest = Geometry::get_closest_point_to_segment_2d(p_point, l[i]); + if (p_point.distance_to(closest) < p_tolerance) + return true; + } + + return false; +} + void LineShape2D::_update_shape() { Array arr; |