From 3f8462f04f0bc62df278f560f4753a927eb84971 Mon Sep 17 00:00:00 2001 From: Thomas Holder Date: Sat, 16 Nov 2019 20:27:28 +0100 Subject: fix #515 axonometric grid snapping w/ y-axis down --- src/display/canvas-axonomgrid.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/display/canvas-axonomgrid.cpp b/src/display/canvas-axonomgrid.cpp index 4699f0509..aedf90481 100644 --- a/src/display/canvas-axonomgrid.cpp +++ b/src/display/canvas-axonomgrid.cpp @@ -613,6 +613,14 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const return s; } + SPDesktop const *dt = _snapmanager->getDesktop(); + double ta_x = grid->tan_angle[X]; + double ta_z = grid->tan_angle[Z]; + + if (dt && dt->is_yaxisdown()) { + std::swap(ta_x, ta_z); + } + double spacing_h; double spacing_v; @@ -622,7 +630,6 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const spacing_v = grid->lyw; // vertical // convert screen pixels to px // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary - SPDesktop const *dt = _snapmanager->getDesktop(); if (dt) { spacing_h /= dt->current_zoom(); spacing_v /= dt->current_zoom(); @@ -644,16 +651,16 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const Geom::Coord x_min = Inkscape::Util::round_to_lower_multiple_plus(p[Geom::X], spacing_h, grid->origin[Geom::X]); // Calculate the y coordinate of the intersection of the angled grid lines with the y-axis - double y_proj_along_z = p[Geom::Y] - grid->tan_angle[Z]*(p[Geom::X] - grid->origin[Geom::X]); - double y_proj_along_x = p[Geom::Y] + grid->tan_angle[X]*(p[Geom::X] - grid->origin[Geom::X]); + double y_proj_along_z = p[Geom::Y] - ta_z * (p[Geom::X] - grid->origin[Geom::X]); + double y_proj_along_x = p[Geom::Y] + ta_x * (p[Geom::X] - grid->origin[Geom::X]); double y_proj_along_z_max = Inkscape::Util::round_to_upper_multiple_plus(y_proj_along_z, spacing_v, grid->origin[Geom::Y]); double y_proj_along_z_min = Inkscape::Util::round_to_lower_multiple_plus(y_proj_along_z, spacing_v, grid->origin[Geom::Y]); double y_proj_along_x_max = Inkscape::Util::round_to_upper_multiple_plus(y_proj_along_x, spacing_v, grid->origin[Geom::Y]); double y_proj_along_x_min = Inkscape::Util::round_to_lower_multiple_plus(y_proj_along_x, spacing_v, grid->origin[Geom::Y]); // Calculate the versor for the angled grid lines - Geom::Point vers_x = Geom::Point(1, -grid->tan_angle[X]); - Geom::Point vers_z = Geom::Point(1, grid->tan_angle[Z]); + Geom::Point vers_x = Geom::Point(1, -ta_x); + Geom::Point vers_z = Geom::Point(1, ta_z); // Calculate the normal for the angled grid lines Geom::Point norm_x = Geom::rot90(vers_x); -- cgit v1.2.3