From 36ff07366e7cf3995f7217b3a9a13149af449e0e Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Fri, 13 Nov 2015 00:35:41 -0800 Subject: [PATCH] fix aux constraints --- web/app/sketcher/constr/solver.js | 9 ++++----- web/app/sketcher/io.js | 5 +++-- web/app/sketcher/parametric.js | 27 +++++++++++---------------- 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/web/app/sketcher/constr/solver.js b/web/app/sketcher/constr/solver.js index 2af062e3..b0cc621a 100644 --- a/web/app/sketcher/constr/solver.js +++ b/web/app/sketcher/constr/solver.js @@ -2,7 +2,6 @@ TCAD.parametric = {}; /** @constructor */ TCAD.parametric.Param = function(id, value, readOnly) { - if (!!readOnly) this.set = this.nop; this.reset(value); }; @@ -181,11 +180,11 @@ TCAD.parametric.System.prototype.getValues = function() { return values; }; -TCAD.parametric.lock1 = function(constrs, locked) { +TCAD.parametric.wrapAux = function(constrs, locked) { var lockedSet = {}; for (var i = 0; i < locked.length; i++) { - lockedSet[locked[i].id] = true; + lockedSet[locked[i].j] = true; } for (var i = 0; i < constrs.length; i++) { @@ -194,7 +193,7 @@ TCAD.parametric.lock1 = function(constrs, locked) { var needWrap = false; for (var j = 0; j < c.params.length; j++) { var param = c.params[j]; - mask[j] = lockedSet[param.id] === true; + mask[j] = lockedSet[param.j] === true; needWrap = needWrap || mask[j]; } if (needWrap) { @@ -229,11 +228,11 @@ TCAD.parametric.diagnose = function(sys) { TCAD.parametric.prepare = function(constrs, locked, aux, alg) { - TCAD.parametric.lock1(constrs, aux); var lockingConstrs = TCAD.parametric.lock2Equals2(constrs, locked); Array.prototype.push.apply( constrs, lockingConstrs ); var sys = new TCAD.parametric.System(constrs); + TCAD.parametric.wrapAux(constrs, aux); var model = function(point) { sys.setParams(point); diff --git a/web/app/sketcher/io.js b/web/app/sketcher/io.js index aafc5e47..09a5735e 100644 --- a/web/app/sketcher/io.js +++ b/web/app/sketcher/io.js @@ -70,6 +70,7 @@ TCAD.IO.prototype._loadSketch = function(sketch) { var obj = layerData[i]; var skobj = null; var _class = obj['_class']; + var aux = !!obj['aux']; if (_class === T.SEGMENT) { var points = obj['points']; var a = endPoint(points[0]); @@ -83,7 +84,7 @@ TCAD.IO.prototype._loadSketch = function(sketch) { var b = endPoint(points[1]); var c = endPoint(points[2]); skobj = new TCAD.TWO.Arc(a, b, c); - skobj.stabilize(this.viewer); + if (!aux) skobj.stabilize(this.viewer); } else if (_class === T.CIRCLE) { var c = endPoint(obj['c']); skobj = new TCAD.TWO.Circle(c); @@ -99,7 +100,7 @@ TCAD.IO.prototype._loadSketch = function(sketch) { skobj.flip = obj['flip']; } if (skobj != null) { - if (!!obj['aux']) skobj.accept(function(o){o.aux = true; return true;}); + if (aux) skobj.accept(function(o){o.aux = true; return true;}); if (obj['edge'] !== undefined) { skobj.edge = obj['edge']; } diff --git a/web/app/sketcher/parametric.js b/web/app/sketcher/parametric.js index f1feaf38..f0d28d36 100644 --- a/web/app/sketcher/parametric.js +++ b/web/app/sketcher/parametric.js @@ -394,20 +394,20 @@ TCAD.TWO.ParametricManager.isAux = function(obj) { return false; }; -TCAD.TWO.ParametricManager.findAuxIndices = function(system) { - var auxParams = []; +TCAD.TWO.ParametricManager.fetchAuxParams = function(system, auxParams, auxDict) { for (var i = 0; i < system.length; ++i) { for (var p = 0; p < system[i][1].length; ++p) { var parameter = system[i][1][p]; if (parameter.obj !== undefined) { - parameter.__aux = TCAD.TWO.ParametricManager.isAux(parameter.obj); - if (parameter.__aux) { - auxParams.push(parameter); + if (TCAD.TWO.ParametricManager.isAux(parameter.obj)) { + if (auxDict[parameter.id] === undefined) { + auxDict[parameter.id] = parameter; + auxParams.push(parameter); + } } } } } - return auxParams; }; TCAD.TWO.ParametricManager.__toId = function(v) { @@ -424,19 +424,14 @@ TCAD.TWO.ParametricManager.prototype.prepareForSubSystem = function(locked, subS var equalsIndex = []; var eqcElimination = {}; - var lockedIds = locked.map(function(p) {return p.id}); - var system = []; this.__getSolveData(subSystemConstraints, system); if (!!extraConstraints) this.__getSolveData(extraConstraints, system); -// system.sort(function(a, b){ -// a = a[0] === 'equal' ? 1 : 2; -// b = b[0] === 'equal' ? 1 : 2; -// return a - b; -// }); + var auxParams = []; + var auxDict = {}; - var auxParams = TCAD.TWO.ParametricManager.findAuxIndices(system); + TCAD.TWO.ParametricManager.fetchAuxParams(system, auxParams, auxDict); var tuples = []; if (TCAD.EQUALS_ELIMINATION_ENABLED) { @@ -554,7 +549,7 @@ TCAD.TWO.ParametricManager.prototype.prepareForSubSystem = function(locked, subS var _p = pdict[p.id]; if (_p === undefined) { if (p.__cachedParam__ === undefined) { - _p = new TCAD.parametric.Param(p.id, p.get(), !!p.__aux); + _p = new TCAD.parametric.Param(p.id, p.get()); p.__cachedParam__ = _p; } else { _p = p.__cachedParam__; @@ -584,7 +579,7 @@ TCAD.TWO.ParametricManager.prototype.prepareForSubSystem = function(locked, subS var param = sdata[1][p]; _p = getParam(param); params.push(_p); - if (param.__aux) aux.push(_p); + if (auxDict[param.id] !== undefined) aux.push(_p); } var _constr = TCAD.constraints.create(sdata[0], params, sdata[2]);