awv3
Version:
AWV client CAD framework
1 lines • 5.65 kB
JavaScript
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}exports.__esModule=!0,exports.ConstraintGenerator=exports.ConstraintsAdder=exports.DSU=void 0;var _getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_set=require("babel-runtime/core-js/set"),_set2=_interopRequireDefault(_set),_from=require("babel-runtime/core-js/array/from"),_from2=_interopRequireDefault(_from),_map=require("babel-runtime/core-js/map"),_map2=_interopRequireDefault(_map),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_constraint=require("../sketcher/constraint"),_constraint2=_interopRequireDefault(_constraint),_sketch=require("../sketcher/sketch"),_sketch2=_interopRequireDefault(_sketch),_geomobjects=require("../sketcher/geomobjects"),_three=require("three"),_three2=_interopRequireDefault(_three),DSU=exports.DSU=function(){function e(){(0,_classCallCheck3.default)(this,e),this.parents=new _map2.default}return e.prototype.getParent=function(e){return this.parents.get(e)||e},e.prototype.setParent=function(e,t){this.parents.set(e,t)},e.prototype.touch=function(e){this.parents.has(e)||this.parents.set(e,e)},e.prototype.getHead=function(e){var t=this.getParent(e);if(t===e)return e;var n=this.getHead(t);return this.setParent(e,n),n},e.prototype.merge=function(e,t){return this.touch(e),this.touch(t),e=this.getHead(e),t=this.getHead(t),Math.random()<.5?this.setParent(e,t):this.setParent(t,e)},e.prototype.getTouched=function(){return(0,_from2.default)(this.parents.keys())},e}(),ConstraintsAdder=exports.ConstraintsAdder=function(){function e(t){(0,_classCallCheck3.default)(this,e),this.sketch=t,this.constraints=[],this.incidenceDsu=new DSU,this.horizontalSet=new _set2.default,this.verticalSet=new _set2.default,this.init()}return e.prototype.init=function(){for(var e=this.sketch.getConstraintsOnSketch(),t=e,n=Array.isArray(t),r=0,t=n?t:(0,_getIterator3.default)(t);;){var a;if(n){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var i=a;i.typename===_constraint2.default.Type.INCIDENCE[0]&&this.incidenceDsu.merge(i.args[0],i.args[1]),i.typename===_constraint2.default.Type.VERTICALITY[0]&&this.verticalSet.add(i.args[0]),i.typename===_constraint2.default.Type.HORIZONTALITY[0]&&this.horizontalSet.add(i.args[0])}},e.prototype.add=function e(t,n,r){var e=!1;if(t===_constraint2.default.Type.INCIDENCE)this.incidenceDsu.getHead(n[0])!==this.incidenceDsu.getHead(n[1])&&(e=!0,this.incidenceDsu.merge(n[0],n[1]));else if(t===_constraint2.default.Type.VERTICALITY)this.verticalSet.has(n[0])||(e=!0,this.verticalSet.add(n[0]));else if(t===_constraint2.default.Type.HORIZONTALITY)this.horizontalSet.has(n[0])||(e=!0,this.horizontalSet.add(n[0]));else{var a=this.sketch.getConstraintsOnSketch();a=a.map(function(e){return e.getData()}),a=a.concat(this.constraints),e=!a.some(function(e){var a=e[0],i=e[1],s=e[2];if(a[0]!==t[0])return!1;if(i.length!=n.length)return!1;if(r.value||s.value||r.expression||s.expression)return!1;if(i.every(function(e,t){return e===n[t]}))return!0;var o=[_constraint2.default.Type.INCIDENCE,_constraint2.default.Type.DISTANCE,_constraint2.default.Type.ANGLE,_constraint2.default.Type.TANGENCY,_constraint2.default.Type.PERPENDICULARITY,_constraint2.default.Type.PARALLELITY,_constraint2.default.Type.CONCENTRIC,_constraint2.default.Type.COLINEAR,_constraint2.default.Type.EQUAL_RADIUS].map(function(e){return e[0]});return o.indexOf(t[0])!==-1&&n[0]===i[1]&&n[1]===i[0]})}e&&this.constraints.push([t,n,r])},e.prototype.commit=function(){var e=[];return this.constraints.forEach(function(t){var n=new _constraint2.default(t[0],t[1],t[2]);e.push(n)}),this.constraints=[],e},e}(),ConstraintGenerator=exports.ConstraintGenerator=function(){function e(t){(0,_classCallCheck3.default)(this,e),this.sketch=t,this.generate={horizontality:!0,verticality:!0,pointCoincidence:!0,tangency:!0},this.angularTolerance=1e-6,this.linearTolerance=1e-6}return e.prototype.generateImpliedConstraints=function(e){var t=new ConstraintsAdder(this.sketch),n=this.sketch.getObjectsOnSketch(),r=_sketch2.default.ForObjectsWithChildren(n);void 0===e&&(e=r);for(var a=new _set2.default(e),i=e,s=Array.isArray(i),o=0,i=s?i:(0,_getIterator3.default)(i);;){var c;if(s){if(o>=i.length)break;c=i[o++]}else{if(o=i.next(),o.done)break;c=o.value}var u=c;if(u instanceof _geomobjects.Line){var l=u.getTangent();l.length()>this.angularTolerance&&(Math.abs(l.y)<=this.angularTolerance&&t.add(_constraint2.default.Type.HORIZONTALITY,[u],{fixed:!0,noVisualize:!0}),Math.abs(l.x)<=this.angularTolerance&&t.add(_constraint2.default.Type.VERTICALITY,[u],{fixed:!0,noVisualize:!0}))}for(var h=r,f=Array.isArray(h),d=0,h=f?h:(0,_getIterator3.default)(h);;){var p;if(f){if(d>=h.length)break;p=h[d++]}else{if(d=h.next(),d.done)break;p=d.value}var _=p;if(u instanceof _geomobjects.Point&&_ instanceof _geomobjects.Point&&u.position.distanceTo(_.position)<=this.linearTolerance){t.add(_constraint2.default.Type.INCIDENCE,[u,_],{noVisualize:!0});var g=u.parent,T=_.parent;if(g instanceof _geomobjects.GeometricObject&&T instanceof _geomobjects.GeometricObject&&g!=T&&a.has(g)&&g.points.indexOf(u)!==-1&&T.points.indexOf(_)!==-1){var C=g.getTangent(u.position),y=T.getTangent(_.position);if(C.length()>this.linearTolerance&&y.length()>this.linearTolerance&&Math.abs(C.cross(y).z)<=this.angularTolerance){var m=g instanceof _geomobjects.Line&&T instanceof _geomobjects.Line?_constraint2.default.Type.INCIDENCE:_constraint2.default.Type.TANGENCY;t.add(m,[g,T],{noVisualize:!0})}}}}}return t.commit()},e}();