webui-aria2/js/libs/dojox/drawing/tools/custom/Vector.js
2012-05-01 19:52:07 +08:00

222 lines
5.8 KiB
JavaScript

//>>built
define(["dijit","dojo","dojox","dojo/require!dojox/drawing/tools/Arrow,dojox/drawing/util/positioning"],function(_1,_2,_3){
_2.provide("dojox.drawing.tools.custom.Vector");
_2.require("dojox.drawing.tools.Arrow");
_2.require("dojox.drawing.util.positioning");
_3.drawing.tools.custom.Vector=_3.drawing.util.oo.declare(_3.drawing.tools.Arrow,function(_4){
this.minimumSize=this.style.arrows.length;
this.addShadow({size:3,mult:2});
},{draws:true,type:"dojox.drawing.tools.custom.Vector",minimumSize:30,showAngle:true,changeAxis:function(_5){
_5=_5!==undefined?_5:this.style.zAxis?0:1;
if(_5==0){
this.style.zAxis=false;
this.data.cosphi=0;
}else{
this.style.zAxis=true;
var p=this.points;
var pt=this.zPoint();
this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
}
this.render();
},_createZeroVector:function(_6,d,_7){
var s=_6=="hit"?this.minimumSize:this.minimumSize/6;
var f=_6=="hit"?_7.fill:null;
d={cx:this.data.x1,cy:this.data.y1,rx:s,ry:s};
this.remove(this[_6]);
this[_6]=this.container.createEllipse(d).setStroke(_7).setFill(f);
this.util.attr(this[_6],"drawingType","stencil");
},_create:function(_8,d,_9){
this.remove(this[_8]);
this[_8]=this.container.createLine(d).setStroke(_9);
this._setNodeAtts(this[_8]);
},onDrag:function(_a){
if(this.created){
return;
}
var x1=_a.start.x,y1=_a.start.y,x2=_a.x,y2=_a.y;
if(this.keys.shift&&!this.style.zAxis){
var pt=this.util.snapAngle(_a,45/180);
x2=pt.x;
y2=pt.y;
}
if(this.keys.alt){
var dx=x2>x1?((x2-x1)/2):((x1-x2)/-2);
var dy=y2>y1?((y2-y1)/2):((y1-y2)/-2);
x1-=dx;
x2-=dx;
y1-=dy;
y2-=dy;
}
if(this.style.zAxis){
var _b=this.zPoint(_a);
x2=_b.x;
y2=_b.y;
}
this.setPoints([{x:x1,y:y1},{x:x2,y:y2}]);
this.render();
},onTransform:function(_c){
if(!this._isBeingModified){
this.onTransformBegin();
}
this.setPoints(this.points);
this.render();
},anchorConstrain:function(x,y){
if(!this.style.zAxis){
return null;
}
var _d=this.style.zAngle*Math.PI/180;
var _e=x<0?x>-y:x<-y;
var dx=_e?x:-y/Math.tan(_d);
var dy=!_e?y:-Math.tan(_d)*x;
return {x:dx,y:dy};
},zPoint:function(_f){
if(_f===undefined){
if(!this.points[0]){
return null;
}
var d=this.pointsToData();
_f={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
}
var _10=this.util.length(_f);
var _11=this.util.angle(_f);
_11<0?_11=360+_11:_11;
_11=_11>135&&_11<315?this.style.zAngle:this.util.oppAngle(this.style.zAngle);
return this.util.pointOnCircle(_f.start.x,_f.start.y,_10,_11);
},pointsToData:function(p){
p=p||this.points;
var _12=0;
var obj={start:{x:p[0].x,y:p[0].y},x:p[1].x,y:p[1].y};
if(this.style.zAxis&&(this.util.length(obj)>this.minimumSize)){
var _13=this.util.angle(obj);
_13<0?_13=360+_13:_13;
_12=_13>135&&_13<315?1:-1;
}
this.data={x1:p[0].x,y1:p[0].y,x2:p[1].x,y2:p[1].y,cosphi:_12};
return this.data;
},dataToPoints:function(o){
o=o||this.data;
if(o.radius||o.angle){
var _14=0;
var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle);
if(this.style.zAxis||(o.cosphi&&o.cosphi!=0)){
this.style.zAxis=true;
_14=o.angle>135&&o.angle<315?1:-1;
}
this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y,cosphi:_14};
}
this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}];
return this.points;
},render:function(){
this.onBeforeRender(this);
if(this.getRadius()>=this.minimumSize){
this._create("hit",this.data,this.style.currentHit);
this._create("shape",this.data,this.style.current);
}else{
this.data.cosphi=0;
this._createZeroVector("hit",this.data,this.style.currentHit);
this._createZeroVector("shape",this.data,this.style.current);
}
},onUp:function(obj){
if(this.created||!this._downOnCanvas){
return;
}
this._downOnCanvas=false;
if(!this.shape){
var d=100;
obj.start.x=this.style.zAxis?obj.start.x+d:obj.start.x;
obj.y=obj.y+d;
this.setPoints([{x:obj.start.x,y:obj.start.y},{x:obj.x,y:obj.y}]);
this.render();
}
if(this.getRadius()<this.minimumSize){
var p=this.points;
this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]);
}else{
var p=this.points;
var pt=this.style.zAxis?this.zPoint(obj):this.util.snapAngle(obj,this.angleSnap/180);
this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
}
this.renderedOnce=true;
this.onRender(this);
}});
_3.drawing.tools.custom.Vector.setup={name:"dojox.drawing.tools.custom.Vector",tooltip:"Vector Tool",iconClass:"iconVector"};
if(_3.drawing.defaults.zAxisEnabled){
_3.drawing.tools.custom.Vector.setup.secondary={name:"vectorSecondary",label:"z-axis",funct:function(_15){
_15.selected?this.zDeselect(_15):this.zSelect(_15);
var _16=this.drawing.stencils.selectedStencils;
for(var nm in _16){
if(_16[nm].shortType=="vector"&&(_16[nm].style.zAxis!=_3.drawing.defaults.zAxis)){
var s=_16[nm];
s.changeAxis();
if(s.style.zAxis){
s.deselect();
s.select();
}
}
}
},setup:function(){
var _17=_3.drawing.defaults.zAxis;
this.zSelect=function(_18){
if(!_18.enabled){
return;
}
_17=true;
_3.drawing.defaults.zAxis=true;
_18.select();
this.vectorTest();
this.zSelected=_18;
};
this.zDeselect=function(_19){
if(!_19.enabled){
return;
}
_17=false;
_3.drawing.defaults.zAxis=false;
_19.deselect();
this.vectorTest();
this.zSelected=null;
};
this.vectorTest=function(){
_2.forEach(this.buttons,function(b){
if(b.toolType=="vector"&&b.selected){
this.drawing.currentStencil.style.zAxis=_17;
}
},this);
};
_2.connect(this,"onRenderStencil",this,function(){
if(this.zSelected){
this.zDeselect(this.zSelected);
}
});
var c=_2.connect(this.drawing,"onSurfaceReady",this,function(){
_2.disconnect(c);
_2.connect(this.drawing.stencils,"onSelect",this,function(_1a){
if(_1a.shortType=="vector"){
if(_1a.style.zAxis){
_2.forEach(this.buttons,function(b){
if(b.toolType=="vectorSecondary"){
this.zSelect(b);
}
},this);
}else{
_2.forEach(this.buttons,function(b){
if(b.toolType=="vectorSecondary"){
this.zDeselect(b);
}
},this);
}
}
});
});
},postSetup:function(btn){
_2.connect(btn,"enable",function(){
_3.drawing.defaults.zAxisEnabled=true;
});
_2.connect(btn,"disable",function(){
_3.drawing.defaults.zAxisEnabled=false;
});
}};
}
_3.drawing.register(_3.drawing.tools.custom.Vector.setup,"tool");
});