summaryrefslogtreecommitdiffstats
path: root/src/display/canvas-axonomgrid.cpp
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2019-11-16 19:27:28 +0000
committerThomas Holder <thomas@thomas-holder.de>2019-11-17 08:48:21 +0000
commit3f8462f04f0bc62df278f560f4753a927eb84971 (patch)
tree1f588b1c69c0053cedc09979d5b98b3ac84a4a5e /src/display/canvas-axonomgrid.cpp
parentAdd unlinking function to CRStyleSheet. (diff)
downloadinkscape-3f8462f04f0bc62df278f560f4753a927eb84971.tar.gz
inkscape-3f8462f04f0bc62df278f560f4753a927eb84971.zip
fix #515 axonometric grid snapping w/ y-axis down
Diffstat (limited to 'src/display/canvas-axonomgrid.cpp')
-rw-r--r--src/display/canvas-axonomgrid.cpp17
1 files 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);