UNPKG

awv3

Version:
146 lines (114 loc) 4.52 kB
import _extends from "@babel/runtime/helpers/extends"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import * as THREE from 'three'; import BaseHandler from './base'; import { updateGeomObjectContainer } from "../preview"; import Object3 from "../../../three/object3"; import Snapper from "../snapper"; var DuplicateHandler = /*#__PURE__*/ function (_BaseHandler) { _inheritsLoose(DuplicateHandler, _BaseHandler); DuplicateHandler.normalizeSelection = function normalizeSelection(selectedObjects) { return selectedObjects.filter(function (obj) { if (obj.isConstraint()) return false; //constraints need renaming, so they are copied on server if (!obj.parent.isSketch()) return false; //server does not expect subobjects (e.g. endpoints of a curve) return true; }); }; function DuplicateHandler() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _BaseHandler.call.apply(_BaseHandler, [this].concat(args)) || this; _this.objects = []; _this.keyPos = new THREE.Vector3(); _this.currentOffset = new THREE.Vector3(); _this.previewHolder = new THREE.Object3D(); _this.sketcher.pool.add(_this.previewHolder); _this.snapper = _this.createSnapper(); return _this; } var _proto = DuplicateHandler.prototype; _proto.init = function init(duplicatedObjects) { for (var _iterator = duplicatedObjects, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var _obj = _ref; var preview = new THREE.Object3D(); updateGeomObjectContainer(preview, _extends({}, _obj.geomParams, { coordinateSystem: new THREE.Matrix4() //drop sketch transformation })); this.objects.push({ obj: _obj, preview: preview }); this.previewHolder.add(preview); } //get bounding box in local sketch coordinates var bbox = new THREE.Box3().setFromObject(this.previewHolder); this.keyPos = bbox.getCenter(); this.snapper.setDraggedObjects(duplicatedObjects, this.keyPos); //update preview again, so that they get sketch transformation this.move(this.keyPos); }; _proto.onMouseMove = function onMouseMove() { this.move(this.getRecentMousePosition()); }; _proto.filterObjectsWithInteraction = function filterObjectsWithInteraction(object) { return object.id === this.sketch.id; }; _proto[Object3.Events.Interaction.Clicked] = function (object, hitObject) { var _this2 = this; this.onMouseMove(); var offset = this.currentOffset; var objects = this.objects.map(function (v) { return v.obj; }); this.sketcher.copyObjects(objects, offset).then(function () { //update set of sketch points in snapper _this2.snapper.sketchPoints = undefined; }); }; _proto.destroy = function destroy(options) { this.previewHolder.destroy(); _BaseHandler.prototype.destroy.call(this, options); }; _proto.move = function move(point) { var snapOffset = this.snapper.snapDraggedObject(point).displacement; this.currentOffset = point.clone().add(snapOffset).sub(this.keyPos); for (var _iterator2 = this.objects, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { var _ref2; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref2 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref2 = _i2.value; } var _data = _ref2; var obj = _data.obj, preview = _data.preview; var params = obj.geomParams; var _arr = ['start', 'end', 'center']; for (var _i3 = 0; _i3 < _arr.length; _i3++) { name = _arr[_i3]; if (params[name] instanceof THREE.Vector3) params[name].add(this.currentOffset); } updateGeomObjectContainer(preview, _extends({ coordinateSystem: this.sketch.matrixWorld, scale: this.sketcher.graphicScale }, params)); } this.sketcher.refresh(); }; return DuplicateHandler; }(BaseHandler); export { DuplicateHandler as default };