diff --git a/web/app/sketcher/parametric.js b/web/app/sketcher/parametric.js index db7788c2..59c936cf 100644 --- a/web/app/sketcher/parametric.js +++ b/web/app/sketcher/parametric.js @@ -441,6 +441,19 @@ ParametricManager.prototype.unlinkObjects = function(a, b) { _unlink(b, a); }; +ParametricManager.prototype.findCoincidentConstraint = function(point1, point2) { + for (let subSys of this.subSystems) { + for (let c of subSys.constraints) { + if (c.NAME === 'coi' && + ((c.a.id === point1.id && c.b.id === point2.id) || + (c.b.id === point1.id && c.a.id === point2.id))) { + return c; + } + } + } + return null; +}; + ParametricManager.prototype.coincident = function(objs) { if (objs.length == 0) return; this.linkObjects(objs); diff --git a/web/app/sketcher/tools/fillet.js b/web/app/sketcher/tools/fillet.js index c1118b58..5bf90fd0 100644 --- a/web/app/sketcher/tools/fillet.js +++ b/web/app/sketcher/tools/fillet.js @@ -14,6 +14,20 @@ export class FilletTool extends Tool { this.viewer = viewer; } + restart() { + for (let master of this.viewer.selected) { + if (master instanceof EndPoint) { + for (let slave of master.linked) { + if (slave instanceof EndPoint) { + if (this.breakLinkAndMakeFillet(master, slave)) { + this.viewer.toolManager.releaseControl(); + } + } + } + } + } + } + makeFillet(point1, point2) { function shrink(point1) { var a, b; @@ -78,24 +92,21 @@ export class FilletTool extends Tool { mouseup(e) { var candi = this.getCandidate(e); if (candi == null) return; - var point1 = candi[0]; - var point2 = candi[1]; + const point1 = candi[0]; + const point2 = candi[1]; + this.breakLinkAndMakeFillet(point1, point2) + } - var pm = this.viewer.parametricManager; - for (var i = 0; i < pm.subSystems.length; i++) { - var subSys = pm.subSystems[i]; - for (var j = 0; j < subSys.constraints.length; j++) { - var c = subSys.constraints[j]; - if (c.NAME === 'coi' && - ((c.a.id === point1.id && c.b.id === point2.id) || - (c.b.id === point1.id && c.a.id === point2.id))) { - pm.remove(c); - this.makeFillet(point1, point2); - this.viewer.deselectAll(); - return; - } - } + breakLinkAndMakeFillet(point1, point2) { + const pm = this.viewer.parametricManager; + const coi = pm.findCoincidentConstraint(point1, point2); + if (coi != null) { + pm.remove(coi); + this.makeFillet(point1, point2); + this.viewer.deselectAll(); + return true; } + return false; } static isLine(line) {