diff --git a/web/app/main2d.js b/web/app/main2d.js index 455b5802..a5e758ca 100644 --- a/web/app/main2d.js +++ b/web/app/main2d.js @@ -64,7 +64,14 @@ TCAD.App2D = function() { }); this.registerAction('addDim', "Add Dimension", function () { - app.viewer.toolManager.takeControl(new TCAD.TWO.AddDimTool(app.viewer, app.viewer.dimLayer)); + app.viewer.toolManager.takeControl(new TCAD.TWO.AddDimTool(app.viewer, app.viewer.dimLayer, function(a,b) {return new TCAD.TWO.Dimension(a,b)} )); + }); + + this.registerAction('addHDim', "Add Horizontal Dimension", function () { + app.viewer.toolManager.takeControl(new TCAD.TWO.AddDimTool(app.viewer, app.viewer.dimLayer, function(a,b) {return new TCAD.TWO.HDimension(a,b)} )); + }); + this.registerAction('addVDim', "Add Vertical Dimension", function () { + app.viewer.toolManager.takeControl(new TCAD.TWO.AddDimTool(app.viewer, app.viewer.dimLayer, function(a,b) {return new TCAD.TWO.VDimension(a,b)} )); }); this.registerAction('save', "Save", function () { diff --git a/web/app/sketch/dim.js b/web/app/sketch/dim.js index bf912cd3..ba65708f 100644 --- a/web/app/sketch/dim.js +++ b/web/app/sketch/dim.js @@ -1,33 +1,44 @@ -TCAD.TWO.Dimension = function(a, b) { +TCAD.TWO.LinearDimension = function(a, b) { TCAD.TWO.SketchObject.call(this); this.a = a; this.b = b; this.flip = false; }; -TCAD.TWO.utils.extend(TCAD.TWO.Dimension, TCAD.TWO.SketchObject); +TCAD.TWO.utils.extend(TCAD.TWO.LinearDimension, TCAD.TWO.SketchObject); -TCAD.TWO.Dimension.prototype._class = 'TCAD.TWO.Dimension'; - -TCAD.TWO.Dimension.prototype.collectParams = function(params) { +TCAD.TWO.LinearDimension.prototype.collectParams = function(params) { }; -TCAD.TWO.Dimension.prototype.getReferencePoint = function() { +TCAD.TWO.LinearDimension.prototype.getReferencePoint = function() { return this.a; }; -TCAD.TWO.Dimension.prototype.translateImpl = function(dx, dy) { +TCAD.TWO.LinearDimension.prototype.translateImpl = function(dx, dy) { }; -TCAD.TWO.Dimension.prototype.drawImpl = function(ctx, scale) { +TCAD.TWO.LinearDimension.prototype.getA = function() { return this.a }; +TCAD.TWO.LinearDimension.prototype.getB = function() { return this.b }; + +TCAD.TWO.LinearDimension.prototype.drawImpl = function(ctx, scale) { var off = 30; var textOff = 3; - - var a = this.flip ? this.b : this.a; - var b = this.flip ? this.a : this.b; + var a, b, startA, startB; + if (this.flip) { + a = this.getB(); + b = this.getA(); + startA = this.b; + startB = this.a; + } else { + a = this.getA(); + b = this.getB(); + startA = this.a; + startB = this.b; + } + var d = TCAD.math.distanceAB(a, b); var _vx = - (b.y - a.y); @@ -51,14 +62,14 @@ TCAD.TWO.Dimension.prototype.drawImpl = function(ctx, scale) { ctx.lineTo(_bx, _by); - function drawRef(a) { - ctx.moveTo(a.x, a.y); + function drawRef(startA, a) { var off2 = 1.2; + ctx.moveTo(startA.x, startA.y); ctx.lineTo(a.x + _vx * off2, a.y + _vy * off2); } - drawRef(a); - drawRef(b); + drawRef(startA, a); + drawRef(startB, b); ctx.closePath(); ctx.stroke(); @@ -70,6 +81,7 @@ TCAD.TWO.Dimension.prototype.drawImpl = function(ctx, scale) { ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - s1, y - s2); + ctx.closePath(); ctx.stroke(); } @@ -90,18 +102,52 @@ TCAD.TWO.Dimension.prototype.drawImpl = function(ctx, scale) { ctx.fillText(txt, 0, 0); ctx.restore(); } - }; -TCAD.TWO.Dimension.prototype.normalDistance = function(aim) { +TCAD.TWO.LinearDimension.prototype.normalDistance = function(aim) { return -1; }; -TCAD.TWO.AddDimTool = function(viewer, layer) { + +TCAD.TWO.Dimension = function(a, b) { + TCAD.TWO.LinearDimension.call(this, a, b); +}; + +TCAD.TWO.utils.extend(TCAD.TWO.Dimension, TCAD.TWO.LinearDimension); + +TCAD.TWO.Dimension.prototype._class = 'TCAD.TWO.Dimension'; + + +TCAD.TWO.HDimension = function(a, b) { + TCAD.TWO.LinearDimension.call(this, a, b); +}; + +TCAD.TWO.utils.extend(TCAD.TWO.HDimension, TCAD.TWO.LinearDimension); + +TCAD.TWO.HDimension.prototype._class = 'TCAD.TWO.HDimension'; + +TCAD.TWO.HDimension.prototype.getA = function() { return this.a }; +TCAD.TWO.HDimension.prototype.getB = function() { return {x : this.b.x, y : this.a.y} }; + + +TCAD.TWO.VDimension = function(a, b) { + TCAD.TWO.LinearDimension.call(this, a, b); +}; + +TCAD.TWO.utils.extend(TCAD.TWO.VDimension, TCAD.TWO.LinearDimension); + +TCAD.TWO.VDimension.prototype._class = 'TCAD.TWO.VDimension'; + +TCAD.TWO.VDimension.prototype.getA = function() { return this.a }; +TCAD.TWO.VDimension.prototype.getB = function() { return {x : this.a.x, y : this.b.y} }; + + +TCAD.TWO.AddDimTool = function(viewer, layer, dimCreation) { this.viewer = viewer; this.layer = layer; this.dim = null; this._v = new TCAD.Vector(0, 0, 0); + this.dimCreation = dimCreation; }; TCAD.TWO.AddDimTool.prototype.keydown = function(e) {}; @@ -135,7 +181,7 @@ TCAD.TWO.AddDimTool.prototype.mouseup = function(e) { this.viewer.cleanSnap(); if (this.dim == null) { - this.dim = new TCAD.TWO.Dimension(p, new TCAD.TWO.EndPoint(p.x, p.y)); + this.dim = this.dimCreation(p, new TCAD.TWO.EndPoint(p.x, p.y)); this.layer.objects.push(this.dim); this.viewer.refresh(); } else { diff --git a/web/sketcher.html b/web/sketcher.html index e0f71a7d..47e84284 100644 --- a/web/sketcher.html +++ b/web/sketcher.html @@ -257,8 +257,8 @@ -->