diff --git a/modules/ui/measurers.js b/modules/ui/measurers.js index 68a5f4a4..8d7023c6 100644 --- a/modules/ui/measurers.js +++ b/modules/ui/measurers.js @@ -140,6 +140,10 @@ class LinearRuler { let circle = context.el.select(`circle:nth-child(${pointId+1})`); const line = context.el.selectAll("polyline"); + let x0 = rn(d3.event.x, 1); + let y0 = rn(d3.event.y, 1); + let axis; + d3.event.on("drag", function() { if (edge) { if (d3.event.dx < .1 && d3.event.dy < .1) return; @@ -150,8 +154,18 @@ class LinearRuler { edge = false; } - const x = rn(d3.event.x, 1); - const y = rn(d3.event.y, 1); + const shiftPressed = d3.event.sourceEvent.shiftKey; + if (shiftPressed && !axis) axis = Math.abs(d3.event.dx) > Math.abs(d3.event.dy) ? "x" : "y"; + + const x = axis === "y" ? x0 : rn(d3.event.x, 1); + const y = axis === "x" ? y0 : rn(d3.event.y, 1); + + if (!shiftPressed) { + axis = null; + x0 = x; + y0 = y; + } + context.updatePoint(pointId, x, y); line.attr("points", context.getPointsString()); circle.attr("cx", x).attr("cy", y); diff --git a/modules/ui/units-editor.js b/modules/ui/units-editor.js index e0605560..142c398f 100644 --- a/modules/ui/units-editor.js +++ b/modules/ui/units-editor.js @@ -206,7 +206,7 @@ function editUnits() { pt.x = graphWidth / 2, pt.y = graphHeight / 4; const p = pt.matrixTransform(viewbox.node().getScreenCTM().inverse()); const dx = graphWidth / 4 / scale; - const dy = (rulers.data.length * 10) % (graphHeight / 2); + const dy = (rulers.data.length * 40) % (graphHeight / 2); const from = [p.x-dx | 0, p.y+dy | 0]; const to = [p.x+dx | 0, p.y+dy | 0]; rulers.linear([from, to]).draw();