diff --git a/web/app/sketcher/main2d.js b/web/app/sketcher/main2d.js index e6099af9..d9a68e68 100644 --- a/web/app/sketcher/main2d.js +++ b/web/app/sketcher/main2d.js @@ -184,7 +184,11 @@ TCAD.App2D = function() { this.registerAction('llAngle', "Angle Between 2 Lines", function () { app.viewer.parametricManager.llAngle(app.viewer.selected, prompt); }); - + + this.registerAction('symmetry', "Symmetry", function () { + app.viewer.parametricManager.symmetry(app.viewer.selected, prompt); + }); + this.registerAction('analyzeConstraint', "Analyze Constraint", function () { app.viewer.parametricManager.analyze(alert); }); diff --git a/web/app/sketcher/parametric.js b/web/app/sketcher/parametric.js index a1825b21..f6d1ca7f 100644 --- a/web/app/sketcher/parametric.js +++ b/web/app/sketcher/parametric.js @@ -221,6 +221,11 @@ TCAD.TWO.ParametricManager.prototype.pointInMiddle = function(objs) { this.add(new TCAD.TWO.Constraints.PointInMiddle(pl[0], pl[1])); }; +TCAD.TWO.ParametricManager.prototype.symmetry = function(objs) { + var pl = this._fetchPointAndLine(objs); + this.add(new TCAD.TWO.Constraints.Symmetry(pl[0], pl[1])); +}; + TCAD.TWO.ParametricManager.prototype.pointOnArc = function(objs) { var points = this._fetch(objs, ['TCAD.TWO.EndPoint'], 1); var arcs = this._fetch(objs, ['TCAD.TWO.Arc', 'TCAD.TWO.Circle'], 1); @@ -1276,6 +1281,36 @@ TCAD.TWO.Constraints.PointInMiddle.prototype.getObjects = function() { // ------------------------------------------------------------------------------------------------------------------ // +/** @constructor */ +TCAD.TWO.Constraints.Symmetry = function(point, line) { + this.point = point; + this.line = line; + this.length = new TCAD.TWO.Ref(TCAD.math.distanceAB(line.a, line.b) / 2); +}; + +TCAD.TWO.Constraints.Symmetry.prototype.NAME = 'Symmetry'; +TCAD.TWO.Constraints.Symmetry.prototype.UI_NAME = 'Symmetry'; + +TCAD.TWO.Constraints.Symmetry.prototype.getSolveData = function() { + var pointInMiddleData = TCAD.TWO.Constraints.PointInMiddle.prototype.getSolveData.call(this); + var pointOnLineData = TCAD.TWO.Constraints.PointOnLine.prototype.getSolveData.call(this); + return pointInMiddleData.concat(pointOnLineData); +}; + +TCAD.TWO.Constraints.Symmetry.prototype.serialize = function() { + return [this.NAME, [this.point.id, this.line.id]]; +}; + +TCAD.TWO.Constraints.Factory[TCAD.TWO.Constraints.Symmetry.prototype.NAME] = function(refs, data) { + return new TCAD.TWO.Constraints.Symmetry(refs(data[0]), refs(data[1])); +}; + +TCAD.TWO.Constraints.Symmetry.prototype.getObjects = function() { + return [this.point, this.line]; +}; + +// ------------------------------------------------------------------------------------------------------------------ // + /** @constructor */ TCAD.TWO.Constraints.Angle = function(p1, p2, p3, p4, angle) { this.p1 = p1; diff --git a/web/sketcher.html b/web/sketcher.html index 7513b698..0ff14793 100644 --- a/web/sketcher.html +++ b/web/sketcher.html @@ -83,11 +83,12 @@ - + +