Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / drawing / tools / custom / Axes.js

History | View | Annotate | Download (9.43 KB)

1
/*
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.Axes"]){
9
dojo._hasResource["dojox.drawing.tools.custom.Axes"]=true;
10
dojo.provide("dojox.drawing.tools.custom.Axes");
11
dojo.require("dojox.drawing.stencil.Path");
12
dojox.drawing.tools.custom.Axes=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(_1){
13
this.closePath=false;
14
this.xArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:0,idx2:1});
15
this.yArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:2,idx2:1});
16
if(_1.data){
17
this.style.zAxisEnabled=_1.data.cosphi==1?true:false;
18
this.setData(_1.data);
19
}
20
if(this.style.zAxisEnabled){
21
this.data.cosphi=1;
22
var _2={};
23
dojo.mixin(_2,_1);
24
dojo.mixin(_2,{container:this.container.createGroup(),style:this.style,showAngle:false,label:null});
25
if(_1.data&&(!_2.data.radius||!_2.data.angle)){
26
_2.data.x2=_2.data.x4;
27
_2.data.y2=_2.data.y4;
28
}
29
_2.style.zAxis=true;
30
this.zAxis=new dojox.drawing.tools.custom.Vector(_2);
31
this.zAxis.minimumSize=5;
32
this.connectMult([[this,"onChangeStyle",this.zAxis,"onChangeStyle"],[this,"select",this.zAxis,"select"],[this,"deselect",this.zAxis,"deselect"],[this,"onDelete",this.zAxis,"destroy"],[this,"onDrag",this,"zSet"],[this,"onTransform",this,"zSet"],[this.zAxis,"onBeforeRender",this,"zSet"],[this,"_onPostRender",this.zAxis,"render"]]);
33
}
34
if(this.points&&this.points.length){
35
this.setPoints=this._postSetPoints;
36
this.render();
37
_1.label&&this.setLabel(_1.label);
38
_1.shadow&&this.addShadow(_1.shadow);
39
}
40
},{draws:true,type:"dojox.drawing.tools.custom.Axes",minimumSize:30,showAngle:true,closePath:false,baseRender:false,zScale:0.5,zPoint:function(_3){
41
_3.radius=this.util.length(_3);
42
var pt=this.util.pointOnCircle(_3.start.x,_3.start.y,_3.radius*this.zScale,this.style.zAngle);
43
return {x:pt.x,y:pt.y,skip:true,noAnchor:true};
44
},zSet:function(){
45
if(!this.zAxis){
46
return;
47
}
48
var c=this.points[1];
49
var z=this.points[3];
50
var p=[{x:c.x,y:c.y},{x:z.x,y:z.y}];
51
var _4=this.util.length({start:{x:c.x,y:c.y},x:z.x,y:z.y});
52
_4>this.zAxis.minimumSize?this.zAxis.setPoints(p):false;
53
this.zAxis.cosphi=1;
54
},createLabels:function(){
55
var _5={align:"middle",valign:"middle",util:this.util,annotation:true,container:this.container,mouse:this.mouse,stencil:this};
56
this.labelX=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelX}));
57
this.labelY=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelY}));
58
if(this.style.zAxisEnabled){
59
this.labelZ=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelZ}));
60
}
61
},setLabelX:function(){
62
var ax=this.points[0];
63
var c=this.points[1];
64
var _6=40;
65
var _7=20;
66
var pt,px,py,_8;
67
pt=this.util.lineSub(c.x,c.y,ax.x,ax.y,_6);
68
px=pt.x+(pt.y-ax.y);
69
py=pt.y+(ax.x-pt.x);
70
_8=this.util.lineSub(pt.x,pt.y,px,py,(_6-_7));
71
return {x:_8.x,y:_8.y,width:20};
72
},setLabelY:function(){
73
var c=this.points[1];
74
var ay=this.points[2];
75
var _9=40;
76
var _a=20;
77
var pt,px,py,_b;
78
pt=this.util.lineSub(c.x,c.y,ay.x,ay.y,_9);
79
px=pt.x+(ay.y-pt.y);
80
py=pt.y+(pt.x-ay.x);
81
_b=this.util.lineSub(pt.x,pt.y,px,py,(_9-_a));
82
return {x:_b.x,y:_b.y,width:20};
83
},setLabelZ:function(){
84
var c=this.points[1];
85
var z=this.points[3];
86
var _c=40;
87
var _d=20;
88
var pt,px,py,_e;
89
pt=this.util.lineSub(c.x,c.y,z.x,z.y,_c);
90
px=pt.x+(pt.y-z.y);
91
py=pt.y+(z.x-pt.x);
92
_e=this.util.lineSub(pt.x,pt.y,px,py,(_c-_d));
93
return {x:_e.x,y:_e.y,width:20};
94
},setLabel:function(_f){
95
if(this._labelsCreated){
96
return;
97
}
98
!this.labelX&&this.createLabels();
99
var x="x";
100
var y="y";
101
var z="z";
102
if(_f){
103
if(this.labelZ){
104
var _10=_f.match(/(.*?)(and|&)(.*?)(and|&)(.*)/i);
105
if(_10.length>4){
106
x=_10[1].replace(/^\s+/,"").replace(/\s+$/,"");
107
y=_10[3].replace(/^\s+/,"").replace(/\s+$/,"");
108
z=_10[5].replace(/^\s+/,"").replace(/\s+$/,"");
109
}
110
}else{
111
var _10=_f.match(/(.*?)(and|&)(.*)/i);
112
if(_10.length>2){
113
x=_10[1].replace(/^\s+/,"").replace(/\s+$/,"");
114
y=_10[3].replace(/^\s+/,"").replace(/\s+$/,"");
115
}
116
}
117
}
118
this.labelX.setLabel(x);
119
this.labelY.setLabel(y);
120
if(this.labelZ){
121
this.labelZ.setLabel(z);
122
}
123
this._labelsCreated=true;
124
},getLabel:function(){
125
if(!this.labelX){
126
return null;
127
}
128
return {x:this.labelX.getText(),y:this.labelY.getText(),z:this.labelZ?this.labelZ.getText():null};
129
},anchorPositionCheck:function(x,y,_11){
130
var pm=this.container.getParent().getTransform();
131
var am=_11.shape.getTransform();
132
var p=this.points;
133
var o={x:am.dx+_11.org.x+pm.dx,y:am.dy+_11.org.y+pm.dy};
134
var c={x:p[1].x+pm.dx,y:p[1].y+pm.dy};
135
var ox=c.x-(c.y-o.y);
136
var oy=c.y-(o.x-c.x);
137
return {x:ox,y:oy};
138
},onTransformBegin:function(_12){
139
this._isBeingModified=true;
140
},onTransformEnd:function(_13){
141
if(!_13){
142
return;
143
}
144
this._isBeingModified=false;
145
this._toggleSelected();
146
var o=this.points[0];
147
var c=this.points[1];
148
var obj={start:{x:c.x,y:c.y},x:o.x,y:o.y};
149
var pt=this.util.constrainAngle(obj,0,89);
150
var zpt=this.style.zAxisEnabled?this.zPoint(obj):null;
151
if(pt.x==o.x&&pt.y==o.y){
152
pt=this.util.snapAngle(obj,this.angleSnap/180);
153
obj.x=pt.x;
154
obj.y=pt.y;
155
var ox=obj.start.x-(obj.start.y-obj.y);
156
var oy=obj.start.y-(obj.x-obj.start.x);
157
if(ox<0||oy<0){
158
console.warn("AXES ERROR LESS THAN ZERO - ABORT");
159
return;
160
}
161
this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
162
this.points.push({x:ox,y:oy,noAnchor:true});
163
if(zpt){
164
this.points.push(zpt);
165
}
166
this.setPoints(this.points);
167
this.onModify(this);
168
return;
169
}
170
this.points[0].x=pt.x;
171
this.points[0].y=pt.y;
172
o=this.points[0];
173
var ox=c.x-(c.y-o.y);
174
var oy=c.y-(o.x-c.x);
175
this.points[2]={x:ox,y:oy,noAnchor:true};
176
if(zpt){
177
this.points.push(zpt);
178
}
179
this.setPoints(this.points);
180
this.labelX.setLabel();
181
this.labelY.setLabel();
182
if(this.labelZ){
183
this.labelZ.setLabel();
184
}
185
this.onModify(this);
186
},getBounds:function(_14){
187
var px=this.points[0],pc=this.points[1],py=this.points[2];
188
if(this.style.zAxisEnabled){
189
var pz=this.points[3];
190
}
191
if(_14){
192
var _15={x:pc.x,y:pc.y,x1:pc.x,y1:pc.y,x2:px.x,y2:px.y,x3:py.x,y3:py.y};
193
if(this.style.zAxisEnabled){
194
_15.x4=pz.x;
195
_15.y4=pz.y;
196
}
197
return _15;
198
}
199
var x1=this.style.zAxisEnabled?(py.x<pz.x?py.x:pz.x):py.x;
200
y1=py.y<px.y?py.y:px.y,x2=px.x,y2=this.style.zAxisEnabled?pz.y:pc.y;
201
return {x1:x1,y1:y1,x2:x2,y2:y2,x:x1,y:y1,w:x2-x1,h:y2-y1};
202
},_postSetPoints:function(pts){
203
this.points[0]=pts[0];
204
if(this.pointsToData){
205
this.data=this.pointsToData();
206
}
207
},onTransform:function(_16){
208
var o=this.points[0];
209
var c=this.points[1];
210
var ox=c.x-(c.y-o.y);
211
var oy=c.y-(o.x-c.x);
212
this.points[2]={x:ox,y:oy,noAnchor:true};
213
if(this.style.zAxisEnabled){
214
this.points[3]=this.zPoint({start:{x:c.x,y:c.y},x:o.x,y:o.y});
215
}
216
this.setPoints(this.points);
217
if(!this._isBeingModified){
218
this.onTransformBegin();
219
}
220
this.render();
221
},pointsToData:function(){
222
var p=this.points;
223
var d={x1:p[1].x,y1:p[1].y,x2:p[0].x,y2:p[0].y,x3:p[2].x,y3:p[2].y};
224
if(this.style.zAxisEnabled){
225
d.x4=p[3].x;
226
d.y4=p[3].y;
227
d.cosphi=1;
228
}
229
return d;
230
},getRadius:function(){
231
var p=this.points;
232
var _17={start:{x:p[1].x,y:p[1].y},x:p[0].x,y:p[0].y};
233
return this.util.length(_17);
234
},dataToPoints:function(o){
235
o=o||this.data;
236
if(o.radius||o.angle){
237
var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle),zpt;
238
var ox=o.x-(o.y-pt.y);
239
var oy=o.y-(pt.x-o.x);
240
if((o.cosphi&&o.cosphi==1)||this.style.zAxisEnabled){
241
this.style.zAxisEnabled=true;
242
zpt=this.util.pointOnCircle(o.x,o.y,o.radius*this.zScale,this.style.zAngle);
243
}
244
this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y,x3:ox,y3:oy};
245
if(this.style.zAxisEnabled){
246
this.data.x4=o.x4=zpt.x;
247
this.data.y4=o.y4=zpt.y;
248
this.data.cosphi=1;
249
}
250
}
251
this.points=[{x:o.x2,y:o.y2},{x:o.x1,y:o.y1,noAnchor:true},{x:o.x3,y:o.y3,noAnchor:true}];
252
if(this.style.zAxisEnabled){
253
this.points.push({x:o.x4,y:o.y4,skip:true,noAnchor:true});
254
}
255
return this.points;
256
},onDrag:function(obj){
257
var pt=this.util.constrainAngle(obj,0,89);
258
obj.x=pt.x;
259
obj.y=pt.y;
260
var ox=obj.start.x-(obj.start.y-obj.y);
261
var oy=obj.start.y-(obj.x-obj.start.x);
262
if(ox<0||oy<0){
263
return;
264
}
265
this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
266
this.points.push({x:ox,y:oy,noAnchor:true});
267
if(this.style.zAxisEnabled){
268
var zpt=this.zPoint(obj);
269
this.points.push(zpt);
270
}
271
this.render();
272
},onUp:function(obj){
273
if(!this._downOnCanvas){
274
return;
275
}
276
this._downOnCanvas=false;
277
var p=this.points;
278
if(!p.length){
279
var s=obj.start,d=100;
280
this.points=[{x:s.x+d,y:s.y+d},{x:s.x,y:s.y+d,noAnchor:true},{x:s.x,y:s.y,noAnchor:true}];
281
if(this.style.zAxisEnabled){
282
var zpt=this.zPoint({start:{x:s.x,y:s.y+d},x:s.x+d,y:s.y+d});
283
this.points.push(zpt);
284
}
285
this.setPoints=this._postSetPoints;
286
this.pointsToData();
287
this.render();
288
this.onRender(this);
289
return;
290
}
291
var len=this.util.distance(p[1].x,p[1].y,p[0].x,p[0].y);
292
if(!p||!p.length){
293
return;
294
}else{
295
if(len<this.minimumSize){
296
this.remove(this.shape,this.hit);
297
this.xArrow.remove(this.xArrow.shape,this.xArrow.hit);
298
this.yArrow.remove(this.yArrow.shape,this.yArrow.hit);
299
if(this.zArrow){
300
this.zArrow.remove(this.zArrow.shape,this.zArrow.hit);
301
}
302
return;
303
}
304
}
305
var o=p[0];
306
var c=p[1];
307
obj={start:{x:c.x,y:c.y},x:o.x,y:o.y};
308
var pt=this.util.snapAngle(obj,this.angleSnap/180);
309
obj.x=pt.x;
310
obj.y=pt.y;
311
var ox=obj.start.x-(obj.start.y-obj.y);
312
var oy=obj.start.y-(obj.x-obj.start.x);
313
if(ox<0||oy<0){
314
return;
315
}
316
this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
317
this.points.push({x:ox,y:oy,noAnchor:true});
318
if(this.style.zAxisEnabled){
319
this.points.push(this.zPoint(obj));
320
}
321
this.onRender(this);
322
this.setPoints=this._postSetPoints;
323
}});
324
dojox.drawing.tools.custom.Axes.setup={name:"dojox.drawing.tools.custom.Axes",tooltip:"Axes Tool",iconClass:"iconAxes"};
325
dojox.drawing.register(dojox.drawing.tools.custom.Axes.setup,"tool");
326
}