awv3
Version:
⚡ AWV3 embedded CAD
132 lines (106 loc) • 5.77 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _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 = 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;
}();
ConstraintGenerator.angularTolerance = 1e-6;
ConstraintGenerator.linearTolerance = 1e-6;
exports.default = ConstraintGenerator;