summaryrefslogtreecommitdiff
path: root/js/dojo-1.6/dojox/drawing/annotations/Angle.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/dojo-1.6/dojox/drawing/annotations/Angle.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/drawing/annotations/Angle.js b/js/dojo-1.6/dojox/drawing/annotations/Angle.js
new file mode 100644
index 0000000..c1d6e9d
--- /dev/null
+++ b/js/dojo-1.6/dojox/drawing/annotations/Angle.js
@@ -0,0 +1,115 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Angle"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.drawing.annotations.Angle"] = true;
+dojo.provide("dojox.drawing.annotations.Angle");
+
+dojox.drawing.annotations.Angle = dojox.drawing.util.oo.declare(
+ // summary:
+ // When initiated, an HTML box will hover near the Stencil,
+ // displaying it's angle while drawn or modified. Currently
+ // only works with Vector, Line, Arrow, and Axes.
+ // description:
+ // Annotation is positioned with dojox.drawing.util.positioning.angle
+ // That method should be overwritten for custom placement.
+ // Called internally. To initiaize:
+ // TODO: currently always on
+ //
+ function(/*Object*/options){
+ // arguments:
+ // options: Object
+ // One key value: the stencil that called this.
+ //
+ this.stencil = options.stencil;
+ this.util = options.stencil.util;
+ this.mouse = options.stencil.mouse;
+
+ this.stencil.connectMult([
+ ["onDrag", this, "showAngle"],
+ ["onUp", this, "hideAngle"],
+ ["onTransformBegin", this, "showAngle"],
+ ["onTransform", this, "showAngle"],
+ ["onTransformEnd", this, "hideAngle"]
+ ]);
+ },
+ {
+ type:"dojox.drawing.tools.custom",
+ angle:0,
+
+ showAngle: function(){
+ // summary:
+ // Called to display angle
+ //
+ if(!this.stencil.selected && this.stencil.created){ return; }
+ if(this.stencil.getRadius() < this.stencil.minimumSize){
+ this.hideAngle();
+ return;
+ }
+ var node = this.getAngleNode();
+ var d = this.stencil.pointsToData();
+ var pt = dojox.drawing.util.positioning.angle({x:d.x1,y:d.y1},{x:d.x2,y:d.y2});
+ var sc = this.mouse.scrollOffset();
+ var mx = this.stencil.getTransform();
+ var dx = mx.dx / this.mouse.zoom;
+ var dy = mx.dy / this.mouse.zoom;
+ pt.x /= this.mouse.zoom;
+ pt.y /= this.mouse.zoom;
+
+ // adding _offX & _offY since this is HTML
+ // and we are from the page corner, not
+ // the canvas corner
+ var x = this.stencil._offX + pt.x - sc.left + dx;
+ var y = this.stencil._offY + pt.y - sc.top + dy;
+ dojo.style(node, {
+ left: x + "px",
+ top: y + "px",
+ align:pt.align
+ });
+
+ var angle=this.stencil.getAngle();
+ if(this.stencil.style.zAxis && this.stencil.shortType=="vector"){
+ node.innerHTML = this.stencil.data.cosphi > 0 ? "out of" : "into";
+ }else if(this.stencil.shortType=="line"){
+ node.innerHTML = this.stencil.style.zAxis?"out of":Math.ceil(angle%180);
+ }else{
+ node.innerHTML = Math.ceil(angle);
+ }
+ },
+
+ getAngleNode: function(){
+ // summary:
+ // Gets or creates HTMLNode used for display
+ if(!this._angleNode){
+ this._angleNode = dojo.create("span", null, dojo.body());
+ dojo.addClass(this._angleNode, "textAnnotation");
+ dojo.style(this._angleNode, "opacity", 1);
+ }
+ return this._angleNode; //HTMLNode
+ },
+
+ hideAngle: function(){
+ // summary:
+ // Turns display off.
+ //
+ if(this._angleNode && dojo.style(this._angleNode, "opacity")>0.9){
+
+ dojo.fadeOut({node:this._angleNode,
+ duration:500,
+ onEnd: function(node){
+ dojo.destroy(node);
+ }
+ }).play();
+ this._angleNode = null;
+ }
+
+ }
+ }
+
+)
+
+}