From e6e4b2203d8a89918dc18f085c293452e978d7b7 Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Mon, 3 Nov 2014 21:57:42 -0800 Subject: [PATCH] Validate geometry after solving --- web/app/canvas.js | 21 +++++++++++++++++++++ web/app/parametric.js | 18 ++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/web/app/canvas.js b/web/app/canvas.js index f193c295..bcd143b0 100644 --- a/web/app/canvas.js +++ b/web/app/canvas.js @@ -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); diff --git a/web/app/parametric.js b/web/app/parametric.js index c1fec5e0..86f01ac7 100644 --- a/web/app/parametric.js +++ b/web/app/parametric.js @@ -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;