jsketcher/web/app/sketcher/tools/pan.js

111 lines
No EOL
2.7 KiB
JavaScript

import {Tool} from './tool'
export class PanTool extends Tool {
constructor(viewer) {
super('pan', viewer);
this.dragging = false;
this.x = 0.0;
this.y = 0.0;
}
mousemove(e) {
if (!this.dragging) {
return;
}
var dx = e.pageX - this.x;
var dy = e.pageY - this.y;
dy *= -1;
this.viewer.translate.x += dx * this.viewer.retinaPxielRatio;
this.viewer.translate.y += dy * this.viewer.retinaPxielRatio;
this.x = e.pageX;
this.y = e.pageY;
this.deselectOnUp = false;
this.viewer.refresh();
}
mousedown(e) {
if (e.button == 0) {
var picked = this.viewer.pick(e);
var i;
if (picked.length > 0) {
var toSelect;
if (e.shiftKey) {
toSelect = picked[0];
var ids = this.viewer.selected.map(function (s) {
return s.id
});
for (i = 0; i < picked.length; i++) {
if (ids.indexOf(picked[i].id) != -1) {
this.viewer.deselect(picked[i]);
} else {
toSelect = picked[i];
}
}
this.viewer.select([toSelect], false);
this.deselectOnUp = false;
} else {
toSelect = picked[0];
if (this.viewer.selected.length === 1) {
for (i = 0; i < picked.length - 1; i++) {
if (picked[i].id == this.viewer.selected[0].id) {
toSelect = picked[i + 1];
break;
}
}
}
this.viewer.select([toSelect], true);
if (!toSelect.isAuxOrLinkedTo()) {
var tool = toSelect.getDefaultTool(this.viewer, e.altKey);
tool.mousedown(e);
this.viewer.toolManager.switchTool(tool);
}
}
this.viewer.refresh();
return;
}
}
this.dragging = true;
this.deselectOnUp = true;
this.x = e.pageX;
this.y = e.pageY;
}
mouseup(e) {
this.dragging = false;
if (this.deselectOnUp) {
this.viewer.deselectAll();
this.viewer.refresh();
}
this.deselectOnUp = false;
}
mousewheel(e) {
var delta = 0;
if (e.wheelDelta) { // WebKit / Opera / Explorer 9
delta = e.wheelDelta;
} else if (e.detail) { // Firefox
delta = -e.detail;
}
var before = this.viewer.screenToModel(e);
var step = 0.05;
delta = delta < 0 ? 1 - step : 1 + step;
this.viewer.scale *= delta;
var after = this.viewer.screenToModel(e);
var dx = after.x - before.x;
var dy = after.y - before.y;
this.viewer.translate.x += dx * this.viewer.scale;
this.viewer.translate.y += dy * this.viewer.scale;
this.viewer.refresh();
}
}