root / trunk / web / dojo / dojox / drawing / tools / custom / Vector.js
History | View | Annotate | Download (6.18 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
| 3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
| 4 | see: http://dojotoolkit.org/license for details
|
||
| 5 | */
|
||
| 6 | |||
| 7 | |||
| 8 | if(!dojo._hasResource["dojox.drawing.tools.custom.Vector"]){ |
||
| 9 | dojo._hasResource["dojox.drawing.tools.custom.Vector"]=true; |
||
| 10 | dojo.provide("dojox.drawing.tools.custom.Vector");
|
||
| 11 | dojo.require("dojox.drawing.tools.Arrow");
|
||
| 12 | dojo.require("dojox.drawing.util.positioning");
|
||
| 13 | dojox.drawing.tools.custom.Vector=dojox.drawing.util.oo.declare(dojox.drawing.tools.Arrow,function(_1){
|
||
| 14 | this.minimumSize=this.style.arrows.length; |
||
| 15 | this.addShadow({size:3,mult:2}); |
||
| 16 | },{draws:true,type:"dojox.drawing.tools.custom.Vector",minimumSize:30,showAngle:true,labelPosition:function(){
|
||
| 17 | var d=this.data; |
||
| 18 | var pt=dojox.drawing.util.positioning.label({x:d.x1,y:d.y1},{x:d.x2,y:d.y2}); |
||
| 19 | return {x:pt.x,y:pt.y}; |
||
| 20 | },changeAxis:function(_2){ |
||
| 21 | _2=_2!==undefined?_2:this.style.zAxis?0:1; |
||
| 22 | if(_2==0){ |
||
| 23 | this.style.zAxis=false; |
||
| 24 | this.data.cosphi=0; |
||
| 25 | }else{
|
||
| 26 | this.style.zAxis=true; |
||
| 27 | var p=this.points; |
||
| 28 | var pt=this.zPoint(); |
||
| 29 | this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]); |
||
| 30 | } |
||
| 31 | this.render();
|
||
| 32 | },_createZeroVector:function(_3,d,_4){ |
||
| 33 | var s=_3=="hit"?this.minimumSize:this.minimumSize/6; |
||
| 34 | var f=_3=="hit"?_4.fill:null; |
||
| 35 | d={cx:this.data.x1,cy:this.data.y1,rx:s,ry:s};
|
||
| 36 | this.remove(this[_3]); |
||
| 37 | this[_3]=this.container.createEllipse(d).setStroke(_4).setFill(f); |
||
| 38 | this.util.attr(this[_3],"drawingType","stencil"); |
||
| 39 | },_create:function(_5,d,_6){ |
||
| 40 | this.remove(this[_5]); |
||
| 41 | this[_5]=this.container.createLine(d).setStroke(_6); |
||
| 42 | this._setNodeAtts(this[_5]); |
||
| 43 | },onDrag:function(_7){ |
||
| 44 | if(this.created){ |
||
| 45 | return;
|
||
| 46 | } |
||
| 47 | var x1=_7.start.x,y1=_7.start.y,x2=_7.x,y2=_7.y;
|
||
| 48 | if(this.keys.shift&&!this.style.zAxis){ |
||
| 49 | var pt=this.util.snapAngle(_7,45/180); |
||
| 50 | x2=pt.x; |
||
| 51 | y2=pt.y; |
||
| 52 | } |
||
| 53 | if(this.keys.alt){ |
||
| 54 | var dx=x2>x1?((x2-x1)/2):((x1-x2)/-2); |
||
| 55 | var dy=y2>y1?((y2-y1)/2):((y1-y2)/-2); |
||
| 56 | x1-=dx; |
||
| 57 | x2-=dx; |
||
| 58 | y1-=dy; |
||
| 59 | y2-=dy; |
||
| 60 | } |
||
| 61 | if(this.style.zAxis){ |
||
| 62 | var _8=this.zPoint(_7); |
||
| 63 | x2=_8.x; |
||
| 64 | y2=_8.y; |
||
| 65 | } |
||
| 66 | this.setPoints([{x:x1,y:y1},{x:x2,y:y2}]); |
||
| 67 | this.render();
|
||
| 68 | },onTransform:function(_9){ |
||
| 69 | if(!this._isBeingModified){ |
||
| 70 | this.onTransformBegin();
|
||
| 71 | } |
||
| 72 | this.setPoints(this.points); |
||
| 73 | this.render();
|
||
| 74 | },anchorConstrain:function(x,y){ |
||
| 75 | if(!this.style.zAxis){ |
||
| 76 | return null; |
||
| 77 | } |
||
| 78 | var _a=this.style.zAngle*Math.PI/180; |
||
| 79 | var _b=x<0?x>-y:x<-y; |
||
| 80 | var dx=_b?x:-y/Math.tan(_a);
|
||
| 81 | var dy=!_b?y:-Math.tan(_a)*x;
|
||
| 82 | return {x:dx,y:dy}; |
||
| 83 | },zPoint:function(_c){ |
||
| 84 | if(_c===undefined){ |
||
| 85 | if(!this.points[0]){ |
||
| 86 | return null; |
||
| 87 | } |
||
| 88 | var d=this.pointsToData(); |
||
| 89 | _c={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
|
||
| 90 | } |
||
| 91 | var _d=this.util.length(_c); |
||
| 92 | var _e=this.util.angle(_c); |
||
| 93 | _e<0?_e=360+_e:_e; |
||
| 94 | _e=_e>135&&_e<315?this.style.zAngle:this.util.oppAngle(this.style.zAngle); |
||
| 95 | return this.util.pointOnCircle(_c.start.x,_c.start.y,_d,_e); |
||
| 96 | },pointsToData:function(p){ |
||
| 97 | p=p||this.points;
|
||
| 98 | var _f=0; |
||
| 99 | var obj={start:{x:p[0].x,y:p[0].y},x:p[1].x,y:p[1].y}; |
||
| 100 | if(this.style.zAxis&&(this.util.length(obj)>this.minimumSize)){ |
||
| 101 | var _10=this.util.angle(obj); |
||
| 102 | _10<0?_10=360+_10:_10; |
||
| 103 | _f=_10>135&&_10<315?1:-1; |
||
| 104 | } |
||
| 105 | this.data={x1:p[0].x,y1:p[0].y,x2:p[1].x,y2:p[1].y,cosphi:_f}; |
||
| 106 | return this.data; |
||
| 107 | },dataToPoints:function(o){ |
||
| 108 | o=o||this.data;
|
||
| 109 | if(o.radius||o.angle){
|
||
| 110 | var _11=0; |
||
| 111 | var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle); |
||
| 112 | if(this.style.zAxis||(o.cosphi&&o.cosphi!=0)){ |
||
| 113 | this.style.zAxis=true; |
||
| 114 | _11=o.angle>135&&o.angle<315?1:-1; |
||
| 115 | } |
||
| 116 | this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y,cosphi:_11}; |
||
| 117 | } |
||
| 118 | this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}]; |
||
| 119 | return this.points; |
||
| 120 | },render:function(){ |
||
| 121 | this.onBeforeRender(this); |
||
| 122 | if(this.getRadius()>=this.minimumSize){ |
||
| 123 | this._create("hit",this.data,this.style.currentHit); |
||
| 124 | this._create("shape",this.data,this.style.current); |
||
| 125 | }else{
|
||
| 126 | this.data.cosphi=0; |
||
| 127 | this._createZeroVector("hit",this.data,this.style.currentHit); |
||
| 128 | this._createZeroVector("shape",this.data,this.style.current); |
||
| 129 | } |
||
| 130 | },onUp:function(obj){ |
||
| 131 | if(this.created||!this._downOnCanvas){ |
||
| 132 | return;
|
||
| 133 | } |
||
| 134 | this._downOnCanvas=false; |
||
| 135 | if(!this.shape){ |
||
| 136 | var d=100; |
||
| 137 | obj.start.x=this.style.zAxis?obj.start.x+d:obj.start.x;
|
||
| 138 | obj.y=obj.y+d; |
||
| 139 | this.setPoints([{x:obj.start.x,y:obj.start.y},{x:obj.x,y:obj.y}]); |
||
| 140 | this.render();
|
||
| 141 | } |
||
| 142 | if(this.getRadius()<this.minimumSize){ |
||
| 143 | var p=this.points; |
||
| 144 | this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]); |
||
| 145 | }else{
|
||
| 146 | var p=this.points; |
||
| 147 | var pt=this.style.zAxis?this.zPoint(obj):this.util.snapAngle(obj,this.angleSnap/180); |
||
| 148 | this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]); |
||
| 149 | } |
||
| 150 | this.renderedOnce=true; |
||
| 151 | this.onRender(this); |
||
| 152 | }}); |
||
| 153 | dojox.drawing.tools.custom.Vector.setup={name:"dojox.drawing.tools.custom.Vector",tooltip:"Vector Tool",iconClass:"iconVector"};
|
||
| 154 | if(dojox.drawing.defaults.zAxisEnabled){
|
||
| 155 | dojox.drawing.tools.custom.Vector.setup.secondary={name:"vectorSecondary",label:"z-axis",funct:function(_12){
|
||
| 156 | _12.selected?this.zDeselect(_12):this.zSelect(_12); |
||
| 157 | var _13=this.drawing.stencils.selectedStencils; |
||
| 158 | for(var nm in _13){ |
||
| 159 | if(_13[nm].shortType=="vector"&&(_13[nm].style.zAxis!=dojox.drawing.defaults.zAxis)){ |
||
| 160 | var s=_13[nm];
|
||
| 161 | s.changeAxis(); |
||
| 162 | if(s.style.zAxis){
|
||
| 163 | s.deselect(); |
||
| 164 | s.select(); |
||
| 165 | } |
||
| 166 | } |
||
| 167 | } |
||
| 168 | },setup:function(){ |
||
| 169 | var _14=dojox.drawing.defaults.zAxis;
|
||
| 170 | this.zSelect=function(_15){ |
||
| 171 | if(!_15.enabled){
|
||
| 172 | return;
|
||
| 173 | } |
||
| 174 | _14=true;
|
||
| 175 | dojox.drawing.defaults.zAxis=true;
|
||
| 176 | _15.select(); |
||
| 177 | this.vectorTest();
|
||
| 178 | this.zSelected=_15;
|
||
| 179 | }; |
||
| 180 | this.zDeselect=function(_16){ |
||
| 181 | if(!_16.enabled){
|
||
| 182 | return;
|
||
| 183 | } |
||
| 184 | _14=false;
|
||
| 185 | dojox.drawing.defaults.zAxis=false;
|
||
| 186 | _16.deselect(); |
||
| 187 | this.vectorTest();
|
||
| 188 | this.zSelected=null; |
||
| 189 | }; |
||
| 190 | this.vectorTest=function(){ |
||
| 191 | dojo.forEach(this.buttons,function(b){ |
||
| 192 | if(b.toolType=="vector"&&b.selected){ |
||
| 193 | this.drawing.currentStencil.style.zAxis=_14;
|
||
| 194 | } |
||
| 195 | },this);
|
||
| 196 | }; |
||
| 197 | dojo.connect(this,"onRenderStencil",this,function(){ |
||
| 198 | if(this.zSelected){ |
||
| 199 | this.zDeselect(this.zSelected); |
||
| 200 | } |
||
| 201 | }); |
||
| 202 | var c=dojo.connect(this.drawing,"onSurfaceReady",this,function(){ |
||
| 203 | dojo.disconnect(c); |
||
| 204 | dojo.connect(this.drawing.stencils,"onSelect",this,function(_17){ |
||
| 205 | if(_17.shortType=="vector"){ |
||
| 206 | if(_17.style.zAxis){
|
||
| 207 | dojo.forEach(this.buttons,function(b){ |
||
| 208 | if(b.toolType=="vectorSecondary"){ |
||
| 209 | this.zSelect(b);
|
||
| 210 | } |
||
| 211 | },this);
|
||
| 212 | }else{
|
||
| 213 | dojo.forEach(this.buttons,function(b){ |
||
| 214 | if(b.toolType=="vectorSecondary"){ |
||
| 215 | this.zDeselect(b);
|
||
| 216 | } |
||
| 217 | },this);
|
||
| 218 | } |
||
| 219 | } |
||
| 220 | }); |
||
| 221 | }); |
||
| 222 | },postSetup:function(btn){ |
||
| 223 | dojo.connect(btn,"enable",function(){ |
||
| 224 | dojox.drawing.defaults.zAxisEnabled=true;
|
||
| 225 | }); |
||
| 226 | dojo.connect(btn,"disable",function(){ |
||
| 227 | dojox.drawing.defaults.zAxisEnabled=false;
|
||
| 228 | }); |
||
| 229 | }}; |
||
| 230 | } |
||
| 231 | dojox.drawing.register(dojox.drawing.tools.custom.Vector.setup,"tool");
|
||
| 232 | } |