awv3
Version:
⚡ AWV3 embedded CAD
1,311 lines (1,062 loc) • 153 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.runPerfoTest = exports.runAllTests = exports.SketchMatcher = exports.SketcherAutomation = undefined;
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
//=======================================================================================
var runSketchTest = function () {
var _ref65 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee64(auto, testFunc) {
var sketch;
return _regenerator2.default.wrap(function _callee64$(_context64) {
while (1) {
switch (_context64.prev = _context64.next) {
case 0:
_context64.next = 2;
return auto.cleanSketch();
case 2:
console.log("Started unit test: ", testFunc.name);
sketch = auto.getCurrentSketch();
_context64.next = 6;
return testFunc(auto, sketch);
case 6:
console.log("Finished unit test: ", testFunc.name);
case 7:
case 'end':
return _context64.stop();
}
}
}, _callee64, this);
}));
return function runSketchTest(_x104, _x105) {
return _ref65.apply(this, arguments);
};
}();
var runAllSketchTests = function () {
var _ref66 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee65(auto) {
var i;
return _regenerator2.default.wrap(function _callee65$(_context65) {
while (1) {
switch (_context65.prev = _context65.next) {
case 0:
i = 0;
case 1:
if (!(i < sketchUnitTests.length)) {
_context65.next = 7;
break;
}
_context65.next = 4;
return runSketchTest(auto, sketchUnitTests[i]);
case 4:
i++;
_context65.next = 1;
break;
case 7:
_context65.next = 9;
return auto.cleanSketch();
case 9:
case 'end':
return _context65.stop();
}
}
}, _callee65, this);
}));
return function runAllSketchTests(_x106) {
return _ref66.apply(this, arguments);
};
}();
var someAutomationStuff = function () {
var _ref67 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee69(auto) {
var _this7 = this;
var sketch, line1, line2, leg1, arc, leg2;
return _regenerator2.default.wrap(function _callee69$(_context69) {
while (1) {
switch (_context69.prev = _context69.next) {
case 0:
sketch = auto.getCurrentSketch();
_context69.next = 3;
return auto.drawLine([50, 100], [100, 50]);
case 3:
line1 = _context69.sent;
SketchMatcher.run(sketch, [{ type: "line", ends: [[100, 50], [50, 100]], middle: [75, 75], undir: true }], { ignoreConstraints: false });
_context69.next = 7;
return auto.drawLine([125, -50], [125, 50]);
case 7:
line2 = _context69.sent;
_context69.next = 10;
return auto.dragSketchPoint(auto.getStartPoint(line1), [[50, 100], [60, 100], [70, 100], [80, 100], [90, 100], [100, 100]], true, true);
case 10:
_context69.next = 12;
return auto.dragSketchPoint(auto.getEndPoint(line2), [[125, 50], [50, 50]], true);
case 12:
SketchMatcher.run(sketch, [{ type: "line", ends: [[100, 100], [100, 50]] }, { type: "line", ends: [[125, -50], [50, 50]] }, { type: "verticality", args: 1 }], { ignoreConstraints: false });
SketchMatcher.run(sketch, [{ type: "point", position: [100, 100], optional: true }, //just for testing matcher =)
{ type: "line", ends: [[100, 100], [100, 50]] }, { type: "line", ends: [[125, -50], [50, 50]] }]);
setTestName(line1, "line1");
setTestName(line2, "line2");
_context69.next = 18;
return auto.drawConstraint('fixation', [auto.getEndPoint(line2)]);
case 18:
_context69.next = 20;
return auto.solveConstraints();
case 20:
SketchMatcher.run(sketch, [{ name: "line1", type: "line", ends: [[100, 100], [100, 50]] }, { name: "line2", type: "line", ends: [[50, -75], [50, 50]] }, { type: "verticality", args: "line2" }, { type: "fixation", args: "line2.e" }], { ignoreConstraints: false });
_context69.next = 23;
return auto.dragSketchPoint(auto.getEndPoint(line2), [-100, -100], false);
case 23:
_context69.next = 25;
return auto.dragSketchLine(line2, [-100, -100]);
case 25:
_context69.next = 27;
return auto.chooseTool('polyline');
case 27:
_context69.next = 29;
return auto.trackAdded((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee66() {
return _regenerator2.default.wrap(function _callee66$(_context66) {
while (1) {
switch (_context66.prev = _context66.next) {
case 0:
_context66.next = 2;
return auto.mouseClickAt({ x: -100, y: 0 });
case 2:
_context66.next = 4;
return auto.mouseClickAt({ x: -100, y: 50 });
case 4:
case 'end':
return _context66.stop();
}
}
}, _callee66, _this7);
})));
case 29:
_context69.t0 = _line2.default;
leg1 = _context69.sent.ofType(_context69.t0).single();
_context69.next = 33;
return auto.chooseTool('arcTangent');
case 33:
_context69.next = 35;
return auto.trackAdded((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee67() {
return _regenerator2.default.wrap(function _callee67$(_context67) {
while (1) {
switch (_context67.prev = _context67.next) {
case 0:
_context67.next = 2;
return auto.mouseClickAt(new THREE.Vector3(-50, 100, 0));
case 2:
case 'end':
return _context67.stop();
}
}
}, _callee67, _this7);
})));
case 35:
_context69.t1 = _arc2.default;
arc = _context69.sent.ofType(_context69.t1).single();
_context69.next = 39;
return auto.trackAdded((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee68() {
return _regenerator2.default.wrap(function _callee68$(_context68) {
while (1) {
switch (_context68.prev = _context68.next) {
case 0:
_context68.next = 2;
return auto.mouseClickAt(new THREE.Vector3(0, 100, "bugoga"));
case 2:
case 'end':
return _context68.stop();
}
}
}, _callee68, _this7);
})));
case 39:
_context69.t2 = _line2.default;
leg2 = _context69.sent.ofType(_context69.t2).single();
_context69.next = 43;
return auto.chooseTool('empty');
case 43:
_context69.next = 45;
return auto.hoverObject(leg1);
case 45:
_context69.next = 47;
return auto.unhoverObject(leg1);
case 47:
_context69.next = 49;
return auto.hoverObject(leg2);
case 49:
_context69.next = 51;
return auto.unhoverObject(leg2);
case 51:
_context69.next = 53;
return auto.hoverObject(arc);
case 53:
_context69.next = 55;
return auto.unhoverObject(arc);
case 55:
_context69.next = 57;
return auto.dragSketchPoint(auto.getCenterPoint(arc), [10, 30], true);
case 57:
_context69.next = 59;
return auto.setIncrementalSolve(true);
case 59:
_context69.next = 61;
return auto.dragSketchPoint(auto.getCenterPoint(arc), [[10, 30], [0, 10], [0, 20], [0, 30], [-10, 30], [-10, 20], [-20, 10], [-50, 0]], true);
case 61:
_context69.next = 63;
return auto.drawConstraint('fixation', [auto.getStartPoint(leg1)]);
case 63:
_context69.next = 65;
return auto.drawConstraint('fixation', [auto.getEndPoint(leg2)]);
case 65:
_context69.next = 67;
return auto.dragSketchPoint(auto.getCenterPoint(arc), [[0, 10], [0, 20], [0, 30], [-10, 30], [-10, 20], [-20, 10], [-50, 30]]);
case 67:
_context69.next = 69;
return auto.solveConstraints();
case 69:
_context69.next = 71;
return auto.deleteObject(line2);
case 71:
_context69.next = 73;
return (0, _delay2.default)(1000);
case 73:
_context69.next = 75;
return auto.cleanSketch();
case 75:
case 'end':
return _context69.stop();
}
}
}, _callee69, this);
}));
return function someAutomationStuff(_x107) {
return _ref67.apply(this, arguments);
};
}();
var runAllTests = exports.runAllTests = function () {
var _ref71 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee70(sketcher, rootObject) {
var auto;
return _regenerator2.default.wrap(function _callee70$(_context70) {
while (1) {
switch (_context70.prev = _context70.next) {
case 0:
auto = new SketcherAutomation(sketcher);
//auto.setRootObject(rootObject); //TODO: sketch creation?...
//auto.setTickWaitTime(200); //uncomment to slow down automation
//await runSketchTest(auto, sketchUnitTests.find(x => x.name === "testHorizDistance0"));
_context70.next = 3;
return auto.execute(runAllSketchTests);
case 3:
auto.setTickWaitTime(200);
_context70.next = 6;
return auto.execute(someAutomationStuff);
case 6:
case 'end':
return _context70.stop();
}
}
}, _callee70, this);
}));
return function runAllTests(_x108, _x109) {
return _ref71.apply(this, arguments);
};
}();
var runPerfoTest = exports.runPerfoTest = function () {
var _ref72 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee71(sketcher) {
var auto, objectsCount, startTime, rad, squaresCnt, i, elapsedTime;
return _regenerator2.default.wrap(function _callee71$(_context71) {
while (1) {
switch (_context71.prev = _context71.next) {
case 0:
auto = new SketcherAutomation(sketcher);
check(sketcher.currentSketch, "Select sketch before running perfo-test");
objectsCount = sketcher.currentSketch.getObjectsOnSketch().length;
startTime = performance.now();
if (!(objectsCount == 0)) {
_context71.next = 25;
break;
}
_context71.next = 7;
return auto.chooseTool('polyline');
case 7:
rad = 0;
squaresCnt = 20;
i = 0;
case 10:
if (!(i < squaresCnt)) {
_context71.next = 23;
break;
}
rad = rad + 10;
_context71.next = 14;
return auto.mouseClickAt([rad, rad]);
case 14:
_context71.next = 16;
return auto.mouseClickAt([-rad, rad]);
case 16:
_context71.next = 18;
return auto.mouseClickAt([-rad, -rad]);
case 18:
_context71.next = 20;
return auto.mouseClickAt([rad, -rad]);
case 20:
i++;
_context71.next = 10;
break;
case 23:
_context71.next = 27;
break;
case 25:
_context71.next = 27;
return auto.cleanSketch();
case 27:
elapsedTime = performance.now() - startTime;
if (objectsCount == 0) console.log("Drew polyline with " + squaresCnt * 4 + " vertices in time " + elapsedTime);else console.log("Cleaned sketch with " + objectsCount + " objects in time " + elapsedTime);
case 29:
case 'end':
return _context71.stop();
}
}
}, _callee71, this);
}));
return function runPerfoTest(_x110) {
return _ref72.apply(this, arguments);
};
}();
var _delay = require('delay');
var _delay2 = _interopRequireDefault(_delay);
var _levenshteinEditDistance = require('levenshtein-edit-distance');
var _levenshteinEditDistance2 = _interopRequireDefault(_levenshteinEditDistance);
var _three = require('three');
var THREE = _interopRequireWildcard(_three);
var _object = require('../../three/object3');
var _object2 = _interopRequireDefault(_object);
var _sketch = require('../sketcher/sketch');
var _sketch2 = _interopRequireDefault(_sketch);
var _sketcher = require('../sketcher');
var _sketcher2 = _interopRequireDefault(_sketcher);
var _constraint = require('../sketcher/constraint');
var _constraint2 = _interopRequireDefault(_constraint);
var _point = require('../sketcher/graphics/point');
var _point2 = _interopRequireDefault(_point);
var _line = require('../sketcher/graphics/line');
var _line2 = _interopRequireDefault(_line);
var _arc = require('../sketcher/graphics/arc');
var _arc2 = _interopRequireDefault(_arc);
var _constraintgen = require('../sketcher/constraintgen');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function check(cond, message) {
//TODO: Throw custom exception and wrap arguments into it
//so that it could be redirected to console.error later.
//After that improve error messages all over the code.
if (!cond) throw new Error(message);
}
//for setting names used in sketch matching
function setTestName(obj, name) {
check(obj.testName === undefined || obj.testName === name, "Overwriting object's name " + obj.testName + " with " + name);
obj.testName = name;
}
function getTestName(obj, name) {
return obj.testName;
}
function _convVector(vec) {
if (Array.isArray(vec) && vec.length >= 2 && typeof vec[0] === "number" && typeof vec[1] === "number") return new THREE.Vector2(vec[0], vec[1]);
if (typeof vec.x === "number" && typeof vec.y === "number") return new THREE.Vector2(vec.x, vec.y);
return null;
}
function convVector(vec) {
var res = _convVector(vec);
check(res, "Expected 2D vector, found: " + vec.toString());
return res;
}
function convVectorArray(vecArray) {
if (vecArray === undefined || vecArray === null) return [];
var asOneVector = _convVector(vecArray);
if (asOneVector) return asOneVector;
check(Array.isArray(vecArray), "Expected array of vectors");
vecArray = vecArray.map(function (vec) {
return convVector(vec);
});
return vecArray;
}
var AddRemoveTracker = function () {
function AddRemoveTracker(sketch) {
(0, _classCallCheck3.default)(this, AddRemoveTracker);
this.sketch = sketch;
//set of listeners installed
this.listeners = {};
//set of changes done since creation
this.changes = {};
}
(0, _createClass3.default)(AddRemoveTracker, [{
key: 'markChanged',
value: function markChanged(obj, sign) {
if (!(obj.id in this.changes)) this.changes[obj.id] = { object: obj, status: 0 };
if (sign) this.changes[obj.id].status += sign;
}
}, {
key: 'listen',
value: function listen() {
var _this = this;
var listenerP = function listenerP(obj) {
return _this.markChanged(obj, +1);
};
var listenerM = function listenerM(obj) {
return _this.markChanged(obj, -1);
};
this.sketch.on('SketchAdded', listenerP);
this.sketch.on('SketchRemoved', listenerM);
this.listeners['SketchAdded'] = listenerP;
this.listeners['SketchRemoved'] = listenerM;
}
}, {
key: 'ignore',
value: function ignore() {
this.sketch.removeListener('SketchAdded', this.listeners['SketchAdded']);
this.sketch.removeListener('SketchRemoved', this.listeners['SketchRemoved']);
}
}, {
key: 'getAllChanges',
value: function getAllChanges() {
var result = {
added: [],
removed: [],
changed: []
};
for (var id in this.changes) {
var info = this.changes[id];
var list = result.changed;
if (info.status > 0) list = result.added;
if (info.status < 0) list = result.removed;
list.push(info.object);
}
return result;
}
}]);
return AddRemoveTracker;
}();
var ChangesArray = function (_Array) {
(0, _inherits3.default)(ChangesArray, _Array);
function ChangesArray(arr, label) {
var _ref;
(0, _classCallCheck3.default)(this, ChangesArray);
var _this2 = (0, _possibleConstructorReturn3.default)(this, (_ref = ChangesArray.__proto__ || (0, _getPrototypeOf2.default)(ChangesArray)).call.apply(_ref, [this].concat((0, _toConsumableArray3.default)(arr))));
_this2.label = label;
return _this2;
}
(0, _createClass3.default)(ChangesArray, [{
key: 'single',
value: function single() {
check(this.length === 1, "Expected single " + this.label + " object");
return this[0];
}
}, {
key: 'ofType',
value: function ofType(type) {
var newArr = [];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(this), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _obj = _step.value;
if (_obj instanceof type) newArr.push(_obj);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return new ChangesArray(newArr, this.label);
}
}, {
key: 'singleOfType',
value: function singleOfType(type) {
check(this.length === 1, "Expected single " + this.label + " object, " + this.length + " objects found");
var obj = this[0];
check(obj instanceof type, "Expected " + this.label + " object of type " + type.name);
return obj;
}
}]);
return ChangesArray;
}(Array);
;
var SketcherAutomation = exports.SketcherAutomation = function () {
//Note: sketcher may be undefined.
//Then only information methods can be used (like getting endpoints).
function SketcherAutomation(sketcher) {
(0, _classCallCheck3.default)(this, SketcherAutomation);
//must have for any operations =)
this.sketcher = sketcher;
//configures automation speed
this.tickWaitTime = 0;
//how much can we miss
this.linearTolerance = 0.01;
//where we can move mouse to not hover anything
this.safePoint = new THREE.Vector2(-123.456, -98.765);
}
//Note: not sure this method would survive..
(0, _createClass3.default)(SketcherAutomation, [{
key: 'setRootObject',
value: function setRootObject(rootObject) {
this.rootObject = rootObject;
}
}, {
key: 'execute',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(lambda) {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
this.sketcher.view.input.enabled = false;
_context.prev = 1;
_context.next = 4;
return lambda(this);
case 4:
_context.prev = 4;
this.sketcher.view.input.enabled = true;
return _context.finish(4);
case 7:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[1,, 4, 7]]);
}));
function execute(_x) {
return _ref2.apply(this, arguments);
}
return execute;
}()
//tick is called internally to control speed of automation
}, {
key: 'setTickWaitTime',
value: function setTickWaitTime(delay) {
this.tickWaitTime = delay;
}
}, {
key: 'tick',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (this.tickWaitTime > 0) {
_context2.next = 2;
break;
}
return _context2.abrupt('return');
case 2:
_context2.next = 4;
return (0, _delay2.default)(this.tickWaitTime);
case 4:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function tick() {
return _ref3.apply(this, arguments);
}
return tick;
}()
//managing sketches creation and selection
}, {
key: 'createSketch',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(origin, quaternion, part) {
var sketch;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
//try to automatically deduce parameters if not set
if (!part) {
check(this.rootObject, "Neither part nor root object not specified");
//try to find any part from the root
this.rootObject.traverse(function (obj) {
if (obj instanceof Part) part = obj;
});
check(part, "Cannot find any part in ClassCad tree");
}
origin = origin || part.getWorldQuaternion();
quaternion = quaternion || part.getWorldPosition();
//create a new sketch
_context3.next = 5;
return this.sketcher.newSketch(origin, quaternion, part);
case 5:
sketch = _context3.sent;
check(sketch, "Failed to create new sketch");
return _context3.abrupt('return', sketch);
case 8:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function createSketch(_x2, _x3, _x4) {
return _ref4.apply(this, arguments);
}
return createSketch;
}()
}, {
key: 'selectSketch',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(sketch) {
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
check(sketch instanceof _sketch2.default, "Sketch is not specified or not a sketch");
_context4.next = 3;
return this.sketcher.selectSketch(sketch);
case 3:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
function selectSketch(_x5) {
return _ref5.apply(this, arguments);
}
return selectSketch;
}()
}, {
key: 'deselectSketch',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(sketch, byClick) {
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
check(!sketch || sketch === this.sketcher.currentSketch, "Deselecting wrong sketch");
if (!byClick) {
_context5.next = 6;
break;
}
_context5.next = 4;
return this.sketcher.sketchAreaRightClicked(this.sketcher.currentSketch);
case 4:
_context5.next = 8;
break;
case 6:
_context5.next = 8;
return this.sketcher.deselectSketch();
case 8:
case 'end':
return _context5.stop();
}
}
}, _callee5, this);
}));
function deselectSketch(_x6, _x7) {
return _ref6.apply(this, arguments);
}
return deselectSketch;
}()
}, {
key: 'getCurrentSketch',
value: function getCurrentSketch() {
return this.sketcher.currentSketch;
}
//revert current sketch to initial clean state
}, {
key: 'cleanSketch',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return this.deleteAll();
case 2:
_context6.next = 4;
return this.setIncrementalSolve(false);
case 4:
_context6.next = 6;
return this.setIncrementalAutoconstraint(true);
case 6:
case 'end':
return _context6.stop();
}
}
}, _callee6, this);
}));
function cleanSketch() {
return _ref7.apply(this, arguments);
}
return cleanSketch;
}()
//emulating sketcher global buttons (tools, handlers, etc)
}, {
key: 'chooseTool',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(toolName) {
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_context7.next = 2;
return this.sketcher.chooseTool(toolName || 'empty');
case 2:
case 'end':
return _context7.stop();
}
}
}, _callee7, this);
}));
function chooseTool(_x8) {
return _ref8.apply(this, arguments);
}
return chooseTool;
}()
}, {
key: 'autoconstraintAll',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8() {
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_context8.next = 2;
return this.sketcher.autoconstraintAll();
case 2:
case 'end':
return _context8.stop();
}
}
}, _callee8, this);
}));
function autoconstraintAll() {
return _ref9.apply(this, arguments);
}
return autoconstraintAll;
}()
}, {
key: 'solveConstraints',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9() {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.next = 2;
return this.sketcher.solveConstraints();
case 2:
case 'end':
return _context9.stop();
}
}
}, _callee9, this);
}));
function solveConstraints() {
return _ref10.apply(this, arguments);
}
return solveConstraints;
}()
}, {
key: 'setIncrementalSolve',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(flag) {
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_context10.next = 2;
return this.sketcher.setIncrementalLevel(flag);
case 2:
case 'end':
return _context10.stop();
}
}
}, _callee10, this);
}));
function setIncrementalSolve(_x9) {
return _ref11.apply(this, arguments);
}
return setIncrementalSolve;
}()
}, {
key: 'setIncrementalAutoconstraint',
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(flag) {
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
this.sketcher.autoconstraintIncremental = flag;
case 1:
case 'end':
return _context11.stop();
}
}
}, _callee11, this);
}));
function setIncrementalAutoconstraint(_x10) {
return _ref12.apply(this, arguments);
}
return setIncrementalAutoconstraint;
}()
//tracking which objects were added/removed during lambda execution
}, {
key: 'trackAny',
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12(lambda, sketch) {
var tracker, changes;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
if (!sketch) sketch = this.sketcher.currentSketch;
tracker = new AddRemoveTracker(sketch);
tracker.listen();
_context12.next = 5;
return lambda();
case 5:
tracker.ignore();
changes = tracker.getAllChanges();
return _context12.abrupt('return', changes);
case 8:
case 'end':
return _context12.stop();
}
}
}, _callee12, this);
}));
function trackAny(_x11, _x12) {
return _ref13.apply(this, arguments);
}
return trackAny;
}()
}, {
key: 'trackAdded',
value: function () {
var _ref14 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13(lambda, sketch) {
var changes;
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
_context13.next = 2;
return this.trackAny(lambda, sketch);
case 2:
changes = _context13.sent;
check(changes.removed.length === 0, "Element removed unexpectedly");
return _context13.abrupt('return', new ChangesArray(changes.added));
case 5:
case 'end':
return _context13.stop();
}
}
}, _callee13, this);
}));
function trackAdded(_x13, _x14) {
return _ref14.apply(this, arguments);
}
return trackAdded;
}()
}, {
key: 'trackRemoved',
value: function () {
var _ref15 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14(lambda, sketch) {
var changes;
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
_context14.next = 2;
return this.trackAny(lambda, sketch);
case 2:
changes = _context14.sent;
check(changes.added.length === 0, "Element added unexpectedly");
return _context14.abrupt('return', new ChangesArray(changes.removed));
case 5:
case 'end':
return _context14.stop();
}
}
}, _callee14, this);
}));
function trackRemoved(_x15, _x16) {
return _ref15.apply(this, arguments);
}
return trackRemoved;
}()
//controlling mouse on the sketch area
}, {
key: '_mouseMoveTo',
value: function () {
var _ref16 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee15(posLocal) {
return _regenerator2.default.wrap(function _callee15$(_context15) {
while (1) {
switch (_context15.prev = _context15.next) {
case 0:
posLocal = convVector(posLocal);
//TODO: await interactionPointMoved?
this.sketcher.interactionPoint.set(posLocal.x, posLocal.y, 0);
this.sketcher.interactionPointMoved();
case 3:
case 'end':
return _context15.stop();
}
}
}, _callee15, this);
}));
function _mouseMoveTo(_x17) {
return _ref16.apply(this, arguments);
}
return _mouseMoveTo;
}()
}, {
key: 'mouseMoveTo',
value: function () {
var _ref17 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee16(posLocal) {
return _regenerator2.default.wrap(function _callee16$(_context16) {
while (1) {
switch (_context16.prev = _context16.next) {
case 0:
check(this.sketcher.currentSketch, "Moving mouse without selected sketch");
_context16.next = 3;
return this._mouseMoveTo(posLocal);
case 3:
_context16.next = 5;
return this.tick();
case 5:
case 'end':
return _context16.stop();
}
}
}, _callee16, this);
}));
function mouseMoveTo(_x18) {
return _ref17.apply(this, arguments);
}
return mouseMoveTo;
}()
}, {
key: 'mouseClickAt',
value: function () {
var _ref18 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee17(posLocal, sketch) {
return _regenerator2.default.wrap(function _callee17$(_context17) {
while (1) {
switch (_context17.prev = _context17.next) {
case 0:
check(this.sketcher.currentSketch, "Clicking mouse without selected sketch");
_context17.next = 3;
return this._mouseMoveTo(posLocal);
case 3:
_context17.next = 5;
return this.sketcher.sketchAreaClicked(this.sketcher.currentSketch);
case 5:
_context17.next = 7;
return this.tick();
case 7:
case 'end':
return _context17.stop();
}
}
}, _callee17, this);
}));
function mouseClickAt(_x19, _x20) {
return _ref18.apply(this, arguments);
}
return mouseClickAt;
}()
}, {
key: '_interactionEmit',
//controlling mouse actions on sketch objects
value: function () {
var _ref19 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee18(obj, type) {
var _obj2;
for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
return _regenerator2.default.wrap(function _callee18$(_context18) {
while (1) {
switch (_context18.prev = _context18.next) {
case 0:
check(obj instanceof THREE.Object3D, "Interacting with something not being a THREE object");
if (obj.interact instanceof THREE.Mesh) obj = obj.interact; //make things easier for sketch objects
check(obj.interaction && obj.hasListener(type), "Interacting with object without interaction or handler installed");
obj.traverseAncestors(function (parent) {
return check(parent.visible, "Interacting with invisible object");
});
_context18.next = 6;
return (_obj2 = obj).emit.apply(_obj2, [type].concat(args));
case 6:
case 'end':
return _context18.stop();
}
}
}, _callee18, this);
}));
function _interactionEmit(_x21, _x22) {
return _ref19.apply(this, arguments);
}
return _interactionEmit;
}()
}, {
key: 'clickObject',
value: function () {
var _ref20 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee19(obj) {
return _regenerator2.default.wrap(function _callee19$(_context19) {
while (1) {
switch (_context19.prev = _context19.next) {
case 0:
_context19.next = 2;
return this._interactionEmit(obj, _object2.default.Events.Interaction.Clicked);
case 2:
_context19.next = 4;
return this.tick();
case 4:
case 'end':
return _context19.stop();
}
}
}, _callee19, this);
}));
function clickObject(_x23) {
return _ref20.apply(this, arguments);
}
return clickObject;
}()
}, {
key: '_dragPathRelativeToAbsolute',
value: function _dragPathRelativeToAbsolute(obj, posArray) {
var keyPoint = null;
if (obj instanceof _point2.default) keyPoint = obj.position;