awv3
Version:
⚡ AWV3 embedded CAD
146 lines (114 loc) • 4.52 kB
JavaScript
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 };