From 769415ea3a64579c7db745439bb8a8072fe42d27 Mon Sep 17 00:00:00 2001 From: linuxnotes Date: Wed, 23 Nov 2016 15:44:51 +0300 Subject: [PATCH] Improvement for camera 3d moving (#2340) --- lib/graph3d/Graph3d.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/graph3d/Graph3d.js b/lib/graph3d/Graph3d.js index 6d7a1007..b8d49e9d 100644 --- a/lib/graph3d/Graph3d.js +++ b/lib/graph3d/Graph3d.js @@ -1910,6 +1910,8 @@ Graph3d.prototype._onMouseDown = function(event) { // get mouse position (different code for IE and all other browsers) this.startMouseX = getMouseX(event); this.startMouseY = getMouseY(event); + + this._startCameraOffset = this.camera.getOffset(); this.startStart = new Date(this.start); this.startEnd = new Date(this.end); @@ -1936,21 +1938,28 @@ Graph3d.prototype._onMouseDown = function(event) { */ Graph3d.prototype._onMouseMove = function (event) { event = event || window.event; - + // move with ctrl or rotate by other if (event && event.ctrlKey === true) { // calculate change in mouse position var camera = this.camera, offset = camera.getOffset(); + var diffX = parseFloat(getMouseX(event)) - this.startMouseX; var diffY = parseFloat(getMouseY(event)) - this.startMouseY; - var scale = this.frame.clientWidth * 0.6; - - var offXNew = offset.x - ((diffX / scale) * this.camera.armLength) * 0.1; - var offYNew = offset.y + ((diffY / scale) * this.camera.armLength) * 0.1; + var scaleX = this.frame.clientWidth * 0.5; + var scaleY = this.frame.clientHeight * 0.5; + var offXNew = (this._startCameraOffset.x || 0) - ((diffX / scaleX) * this.camera.armLength) * 0.8; + var offYNew = (this._startCameraOffset.y || 0) + ((diffY / scaleY) * this.camera.armLength) * 0.8; + this.camera.setOffset(offXNew, offYNew); + + // меняем startX, startY и startOffset + this._startCameraOffset = this.camera.getOffset(); + this.startMouseX = getMouseX(event); + this.startMouseY = getMouseY(event); } else { // calculate change in mouse position