UNPKG

awv3

Version:
132 lines (106 loc) 5.82 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _class, _temp; var _geomutils = require('../geomutils'); var _adder = require('./adder'); var _adder2 = _interopRequireDefault(_adder); var _type = require('./type'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ConstraintGenerator = (_temp = _class = function () { function ConstraintGenerator(sketch) { (0, _classCallCheck3.default)(this, ConstraintGenerator); this.sketch = sketch; this.adder = new _adder2.default(this.sketch); this.generate = { horizontality: true, verticality: true, pointCoincidence: true, tangency: true }; } // generate implied constraints which are somehow related to "relatedTo" object (0, _createClass3.default)(ConstraintGenerator, [{ key: 'generateImpliedConstraints', value: function generateImpliedConstraints(relatedTo) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)(relatedTo.descendants), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var baseObj = _step.value; if (baseObj.isLine()) { // generate implied horizontality or verticality var vec = (0, _geomutils.getTangent)(baseObj.geomParams); // unit vector or zero if (vec.lengthSq() === 0) continue; if (Math.abs(vec.y) <= ConstraintGenerator.angularTolerance) this.adder.add(_type.horizontality, [baseObj], { fixed: true, noVisualize: true }); if (Math.abs(vec.x) <= ConstraintGenerator.angularTolerance) this.adder.add(_type.verticality, [baseObj], { fixed: true, noVisualize: true }); } if (!baseObj.isPoint()) continue; var basePar = baseObj.parent; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = (0, _getIterator3.default)(this.sketch.descendants), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var otherObj = _step2.value; // generate implied incidence of points if (!otherObj.isPoint()) continue; var basePos = baseObj.geomParams.start, otherPos = otherObj.geomParams.start; if (basePos.distanceTo(otherPos) > ConstraintGenerator.linearTolerance) continue; this.adder.add(_type.incidence, [baseObj, otherObj], { noVisualize: true }); var otherPar = otherObj.parent; // generate implied tangency of touching endpoints if (!baseObj.isSubPoint() || !otherObj.isSubPoint() || basePar.id === otherPar.id) continue; if (baseObj.isCenterPoint() || otherObj.isCenterPoint()) continue; var baseDir = (0, _geomutils.getTangent)(basePar.geomParams, basePos), otherDir = (0, _geomutils.getTangent)(otherPar.geomParams, otherPos); if (baseDir.lengthSq() === 0 || otherDir.lengthSq() === 0) continue; if (Math.abs(baseDir.cross(otherDir).z) > ConstraintGenerator.angularTolerance) continue; var type = basePar.isLine() && otherPar.isLine() ? _type.incidence : _type.tangency; this.adder.add(type, [basePar, otherPar], { noVisualize: true }); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return this.adder.commit(); } }]); return ConstraintGenerator; }(), _class.angularTolerance = 1e-6, _class.linearTolerance = 1e-6, _temp); exports.default = ConstraintGenerator;