fix aux constraints

This commit is contained in:
Val Erastov 2015-11-13 00:35:41 -08:00
parent 16a0194aa2
commit 36ff07366e
3 changed files with 18 additions and 23 deletions

View file

@ -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);

View file

@ -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'];
}

View file

@ -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]);