diff --git a/web/app/app-init.js b/web/app/app-init.js index 4801e743..3d78215c 100644 --- a/web/app/app-init.js +++ b/web/app/app-init.js @@ -1,79 +1,80 @@ - function start() { - var app = new TCAD.App2D(); - app.loadFromLocalStorage(); - var actionsWin = new TCAD.ui.Window($('#actions')); +function start() { + var app = new TCAD.App2D(); + app.loadFromLocalStorage(); + app.fit(); + var actionsWin = new TCAD.ui.Window($('#actions')); - TCAD.ui.bindOpening( $('#showActions'), actionsWin ); - var addAction = TCAD.ui.createActionsWinBuilder(actionsWin); + TCAD.ui.bindOpening( $('#showActions'), actionsWin ); + var addAction = TCAD.ui.createActionsWinBuilder(actionsWin); - for (var p = 0; p < app._actionsOrder.length; ++p) { - var act = app.actions[app._actionsOrder[p]]; - addAction(act.desc, act.action); - $('.act-' + act.id).click(act.action).attr('title', act.desc); - } + for (var p = 0; p < app._actionsOrder.length; ++p) { + var act = app.actions[app._actionsOrder[p]]; + addAction(act.desc, act.action); + $('.act-' + act.id).click(act.action).attr('title', act.desc); + } - function infoStr(c) { - if (c.SettableFields === undefined) return ""; - var info = Object.keys(c.SettableFields).map(function(f) { - return Number(c[f]).toFixed(2); - }).join(", "); - if (info.length != 0) { - info = " [" + info + "]"; - } - return info; - } - - var pm = app.viewer.parametricManager; - var constrList = new TCAD.ui.List($('#constrs'), { - items : function() { - var theItems = []; - for (var j = 0; j < pm.subSystems.length; j++) { - var sub = pm.subSystems[j]; - for (var i = 0; i < sub.constraints.length; ++i) { - var constr = sub.constraints[i]; - if (constr.aux !== true) { - theItems.push({name : constr.UI_NAME + infoStr(constr), constr : constr}); - } - } - } - return theItems; - }, - - remove : function(item) { - pm.remove(item.constr); - }, - - mouseleave : function(item) { - app.viewer.deselectAll(); - app.viewer.refresh(); - }, - - hover : function(item) { - app.viewer.select(item.constr.getObjects(), true); - app.viewer.refresh(); - }, - - click : function(item) { - var c = item.constr; - if (c.SettableFields === undefined) return; - for (var f in c.SettableFields) { - var value = c[f]; - var intro = c.SettableFields[f]; - value = TCAD.TWO.utils.askNumber(intro, value.toFixed(4), prompt); - c[f] = value; - } - app.viewer.parametricManager.refresh(); - } - }); - app.viewer.parametricManager.listeners.push(function() {constrList.refresh()}); - constrList.refresh(); + function infoStr(c) { + if (c.SettableFields === undefined) return ""; + var info = Object.keys(c.SettableFields).map(function(f) { + return Number(c[f]).toFixed(2); + }).join(", "); + if (info.length != 0) { + info = " [" + info + "]"; } - window.___log = function(log) { - $('#log').append( " *****************



"); - for (var i = 0; i < log.length; i++) { - $('#log').append( log[i] + "
"); + return info; + } + + var pm = app.viewer.parametricManager; + var constrList = new TCAD.ui.List($('#constrs'), { + items : function() { + var theItems = []; + for (var j = 0; j < pm.subSystems.length; j++) { + var sub = pm.subSystems[j]; + for (var i = 0; i < sub.constraints.length; ++i) { + var constr = sub.constraints[i]; + if (constr.aux !== true) { + theItems.push({name : constr.UI_NAME + infoStr(constr), constr : constr}); + } } - }; - window.onload = function() { - setTimeout(start, 0); - }; + } + return theItems; + }, + + remove : function(item) { + pm.remove(item.constr); + }, + + mouseleave : function(item) { + app.viewer.deselectAll(); + app.viewer.refresh(); + }, + + hover : function(item) { + app.viewer.select(item.constr.getObjects(), true); + app.viewer.refresh(); + }, + + click : function(item) { + var c = item.constr; + if (c.SettableFields === undefined) return; + for (var f in c.SettableFields) { + var value = c[f]; + var intro = c.SettableFields[f]; + value = TCAD.TWO.utils.askNumber(intro, value.toFixed(4), prompt); + c[f] = value; + } + app.viewer.parametricManager.refresh(); + } + }); + app.viewer.parametricManager.listeners.push(function() {constrList.refresh()}); + constrList.refresh(); +} +window.___log = function(log) { + $('#log').append( " *****************



"); + for (var i = 0; i < log.length; i++) { + $('#log').append( log[i] + "
"); + } +}; +window.onload = function() { + setTimeout(start, 0); +}; diff --git a/web/app/sketcher/main2d.js b/web/app/sketcher/main2d.js index 3efe3830..0b793f4d 100644 --- a/web/app/sketcher/main2d.js +++ b/web/app/sketcher/main2d.js @@ -137,8 +137,8 @@ TCAD.App2D = function() { app.viewer.parametricManager.radius(app.viewer.selected, prompt); }); - this.registerAction('REqualsRConstraint', "Radius Equals Constraint", function () { - app.viewer.parametricManager.rr(app.viewer.selected); + this.registerAction('EntityEqualityConstraint', "Radius Equals Constraint", function () { + app.viewer.parametricManager.entityEquality(app.viewer.selected); }); this.registerAction('tangentConstraint', "Tangent Constraint", function () { diff --git a/web/app/sketcher/parametric.js b/web/app/sketcher/parametric.js index e7a0f88a..f1feaf38 100644 --- a/web/app/sketcher/parametric.js +++ b/web/app/sketcher/parametric.js @@ -174,8 +174,7 @@ TCAD.TWO.ParametricManager.prototype.tangent = function(objs) { this.add(new TCAD.TWO.Constraints.Tangent( arc, line)); }; -TCAD.TWO.ParametricManager.prototype.rr = function(objs) { - var arcs = this._fetchArkCirc(objs, 2); +TCAD.TWO.ParametricManager.prototype.rr = function(arcs) { var prev = arcs[0]; for (var i = 1; i < arcs.length; ++i) { this._add(new TCAD.TWO.Constraints.RR(prev, arcs[i])); @@ -184,6 +183,25 @@ TCAD.TWO.ParametricManager.prototype.rr = function(objs) { this.refresh(); }; +TCAD.TWO.ParametricManager.prototype.ll = function(lines) { + this.add(new TCAD.TWO.Constraints.LL(lines[0], lines[1])); +}; + +TCAD.TWO.ParametricManager.prototype.entityEquality = function(objs) { + var arcs, lines = undefined; + try { + arcs = this._fetchArkCirc(objs, 2); + } catch (e1) { + try { + lines = this._fetchTwoLines(objs); + } catch (e2) { + throw e1 + "\n" + e2; + } + } + if (!!arcs) this.rr(arcs); + if (!!lines) this.ll(lines); +}; + TCAD.TWO.ParametricManager.prototype.p2lDistance = function(objs, promptCallback) { var pl = this._fetchPointAndLine(objs); @@ -408,9 +426,6 @@ TCAD.TWO.ParametricManager.prototype.prepareForSubSystem = function(locked, subS var lockedIds = locked.map(function(p) {return p.id}); - function peq(p1, p2) { - return Math.abs(p1.get() - p2.get()) <= 0.000001 - } var system = []; this.__getSolveData(subSystemConstraints, system); if (!!extraConstraints) this.__getSolveData(extraConstraints, system); @@ -927,6 +942,43 @@ TCAD.TWO.Constraints.RR.prototype.getObjects = function() { return [this.arc1, this.arc2]; }; +// ------------------------------------------------------------------------------------------------------------------ // + +/** @constructor */ +TCAD.TWO.Constraints.LL = function(line1, line2) { + this.line1 = line1; + this.line2 = line2; + this.length = new TCAD.TWO.Ref(TCAD.math.distanceAB(line1.a, line1.b)); +}; + +TCAD.TWO.Constraints.LL.prototype.NAME = 'LL'; +TCAD.TWO.Constraints.LL.prototype.UI_NAME = 'Lines Equality'; + +TCAD.TWO.Constraints.LL.prototype.getSolveData = function() { + var params1 = []; + var params2 = []; + this.line1.collectParams(params1); + this.line2.collectParams(params2); + params1.push(this.length); + params2.push(this.length); + return [ + ['P2PDistanceV', params1, []], + ['P2PDistanceV', params2, []] + ]; +}; + +TCAD.TWO.Constraints.LL.prototype.serialize = function() { + return [this.NAME, [this.line1.id, this.line2.id]]; +}; + +TCAD.TWO.Constraints.Factory[TCAD.TWO.Constraints.LL.prototype.NAME] = function(refs, data) { + return new TCAD.TWO.Constraints.LL(refs(data[0]), refs(data[1])); +}; + +TCAD.TWO.Constraints.LL.prototype.getObjects = function() { + return [this.line1, this.line2]; +}; + // ------------------------------------------------------------------------------------------------------------------ // /** @constructor */