Validate geometry after solving

This commit is contained in:
Val Erastov 2014-11-03 21:57:42 -08:00
parent e83d605a39
commit e6e4b2203d
2 changed files with 35 additions and 4 deletions

View file

@ -76,6 +76,18 @@ TCAD.TWO.Viewer = function(canvas) {
this.refresh();
};
TCAD.TWO.Viewer.prototype.validateGeom = function() {
for (var i = 0; i < this.layers.length; i++) {
var objs = this.layers[i].objects;
for (var j = 0; j < objs.length; j++) {
if (!objs[j].validate()) {
return false;
}
}
}
return true;
};
TCAD.TWO.Viewer.prototype.addSegment = function(x1, y1, x2, y2, layer) {
var a = new TCAD.TWO.EndPoint(x1, y1);
var b = new TCAD.TWO.EndPoint(x2, y2);
@ -339,6 +351,11 @@ TCAD.TWO.SketchObject.prototype.visit = function(onlyVisible, h) {
return h(this);
};
TCAD.TWO.SketchObject.prototype.validate = function() {
return true;
};
TCAD.TWO.SketchObject.prototype.getDefaultTool = function(viewer) {
return new TCAD.TWO.DragTool(this, viewer);
};
@ -446,6 +463,10 @@ TCAD.TWO.utils.extend(TCAD.TWO.Segment, TCAD.TWO.SketchObject);
TCAD.TWO.Segment.prototype._class = 'TCAD.TWO.Segment';
TCAD.TWO.Segment.prototype.validate = function() {
return TCAD.math.distanceAB(this.a, this.b) > TCAD.TOLERANCE;
};
TCAD.TWO.Segment.prototype.collectParams = function(params) {
this.a.collectParams(params);
this.b.collectParams(params);

View file

@ -354,24 +354,34 @@ TCAD.TWO.ParametricManager.prototype.prepare = function(locked, alg) {
}
solver.solveSystem(fineLevel);
}
var viewer = this.viewer;
function sync() {
var rollback = [];
for (p in pdict) {
_p = pdict[p];
rollback.push([_p._backingParam, _p._backingParam.get()]);
_p._backingParam.set(_p.get());
}
//Make sure all coincident constraints are equal
var rollbackCo = [];
for (ei = 0; ei < equalsIndex.length; ++ei) {
var master = equalsDict[ equalsIndex[ei][0]];
for (i = 1; i < equalsIndex[ei].length; ++i) {
var slave = equalsDict[equalsIndex[ei][i]];
rollbackCo.push([slave.id, slave.get()]);
slave.set(master.get());
}
}
if (false && !viewer.validateGeom()) { //Disabled
for (i = 0; i < rollback.length; ++i) {
rollback[i][0].set(rollback[i][0]);
}
for (i = 0; i < rollbackCo.length; ++i) {
rollbackCo[i][0].set(rollbackCo[i][0]);
}
}
}
solver.solve = solve;