109 lines
3.0 KiB
JavaScript
109 lines
3.0 KiB
JavaScript
|
//>>built
|
||
|
// wrapped by build app
|
||
|
define("dojox/drawing/annotations/Angle", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
);
|
||
|
});
|