mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-09 18:02:50 +01:00
create radius constraint
This commit is contained in:
parent
79e428d749
commit
c0990339c4
4 changed files with 38 additions and 5 deletions
|
|
@ -4,6 +4,8 @@ TCAD.constraints.create = function(name, params, values) {
|
|||
switch (name) {
|
||||
case "equal":
|
||||
return new TCAD.constraints.Equal(params);
|
||||
case "equalsTo":
|
||||
return new TCAD.constraints.EqualsTo(params, values[0]);
|
||||
case "perpendicular":
|
||||
return new TCAD.constraints.Perpendicular(params);
|
||||
case "parallel":
|
||||
|
|
|
|||
|
|
@ -14,15 +14,15 @@ TCAD.TWO.ParametricManager.prototype._fetchTwoPoints = function(objs) {
|
|||
return points;
|
||||
};
|
||||
|
||||
TCAD.TWO.ParametricManager.prototype._fetchTwoOrMoreArcs = function(objs) {
|
||||
TCAD.TWO.ParametricManager.prototype._fetchArcs = function(objs, min) {
|
||||
var arcs = [];
|
||||
for (var i = 0; i < objs.length; ++i) {
|
||||
if (objs[i]._class == 'TCAD.TWO.Arc') {
|
||||
arcs.push(objs[i]);
|
||||
}
|
||||
}
|
||||
if (arcs.length < 2) {
|
||||
throw "Illegal Argument. Constraint requires ata least 2 arcs."
|
||||
if (arcs.length < min) {
|
||||
throw "Illegal Argument. Constraint requires ata least " + min + " arcs."
|
||||
}
|
||||
return arcs;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -93,8 +93,12 @@ TCAD.App2D = function() {
|
|||
app.viewer.parametricManager.p2pDistance(app.viewer.selected, prompt);
|
||||
},
|
||||
|
||||
Radius : function() {
|
||||
app.viewer.parametricManager.radius(app.viewer.selected, prompt);
|
||||
},
|
||||
|
||||
"R = R" : function() {
|
||||
app.viewer.parametricManager.rr(app.viewer.selected, prompt);
|
||||
app.viewer.parametricManager.rr(app.viewer.selected);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -109,6 +113,7 @@ TCAD.App2D = function() {
|
|||
actionsF.add(actions, 'perpendicular');
|
||||
actionsF.add(actions, 'P2LDistance');
|
||||
actionsF.add(actions, 'P2PDistance');
|
||||
actionsF.add(actions, 'Radius');
|
||||
actionsF.add(actions, 'R = R');
|
||||
actionsF.open();
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ TCAD.TWO.ParametricManager.prototype.perpendicular = function(objs) {
|
|||
};
|
||||
|
||||
TCAD.TWO.ParametricManager.prototype.rr = function(objs) {
|
||||
var arcs = this._fetchTwoOrMoreArcs(objs);
|
||||
var arcs = this._fetchArcs(objs, 2);
|
||||
var prev = arcs[0].r;
|
||||
for (var i = 1; i < arcs.length; ++i) {
|
||||
this.system.push(new TCAD.TWO.Constraints.Equal(prev, arcs[i].r));
|
||||
|
|
@ -81,6 +81,23 @@ TCAD.TWO.ParametricManager.prototype.p2pDistance = function(objs, promptCallback
|
|||
}
|
||||
};
|
||||
|
||||
TCAD.TWO.ParametricManager.prototype.radius = function(objs, promptCallback) {
|
||||
var arcs = this._fetchArcs(objs, 1);
|
||||
var radius = arcs[0].r.get();
|
||||
var promptDistance = promptCallback("Enter the radius value", radius.toFixed(2));
|
||||
|
||||
if (promptDistance != null) {
|
||||
promptDistance = Number(promptDistance);
|
||||
if (promptDistance == promptDistance) { // check for NaN
|
||||
for (var i = 0; i < arcs.length; ++i) {
|
||||
this.system.push(new TCAD.TWO.Constraints.EqualsTo(arcs[i].r, promptDistance));
|
||||
}
|
||||
this.solve();
|
||||
this.viewer.refresh();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TCAD.TWO.ParametricManager.prototype.coincident = function(objs) {
|
||||
if (objs.length == 0) return;
|
||||
var last = objs.length - 1;
|
||||
|
|
@ -233,6 +250,15 @@ TCAD.TWO.Constraints.Equal.prototype.getSolveData = function() {
|
|||
return ['equal', [this.p1, this.p2], []];
|
||||
};
|
||||
|
||||
TCAD.TWO.Constraints.EqualsTo = function(p, v) {
|
||||
this.p = p;
|
||||
this.v = v;
|
||||
};
|
||||
|
||||
TCAD.TWO.Constraints.EqualsTo.prototype.getSolveData = function() {
|
||||
return ['equalsTo', [this.p], [this.v]];
|
||||
};
|
||||
|
||||
TCAD.TWO.Constraints.Parallel = function(l1, l2) {
|
||||
this.l1 = l1;
|
||||
this.l2 = l2;
|
||||
|
|
|
|||
Loading…
Reference in a new issue