root / trunk / web / dojo / dojox / drawing / util / common.js @ 11
History | View | Annotate | Download (2.88 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.util.common"]){ |
||
| 9 | dojo._hasResource["dojox.drawing.util.common"]=true; |
||
| 10 | dojo.provide("dojox.drawing.util.common");
|
||
| 11 | dojo.require("dojox.math.round");
|
||
| 12 | (function(){
|
||
| 13 | var _1={};
|
||
| 14 | var _2=0; |
||
| 15 | dojox.drawing.util.common={radToDeg:function(n){
|
||
| 16 | return (n*180)/Math.PI; |
||
| 17 | },degToRad:function(n){ |
||
| 18 | return (n*Math.PI)/180; |
||
| 19 | },angle:function(_3,_4){ |
||
| 20 | if(_4){
|
||
| 21 | _4=_4/180;
|
||
| 22 | var _5=this.radians(_3),_6=Math.PI*_4,_7=dojox.math.round(_5/_6),_8=_7*_6; |
||
| 23 | return dojox.math.round(this.radToDeg(_8)); |
||
| 24 | }else{
|
||
| 25 | return this.radToDeg(this.radians(_3)); |
||
| 26 | } |
||
| 27 | },oppAngle:function(_9){ |
||
| 28 | (_9+=180)>360?_9=_9-360:_9; |
||
| 29 | return _9;
|
||
| 30 | },radians:function(o){ |
||
| 31 | return Math.atan2(o.start.y-o.y,o.x-o.start.x);
|
||
| 32 | },length:function(o){ |
||
| 33 | return Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2)); |
||
| 34 | },lineSub:function(x1,y1,x2,y2,_a){ |
||
| 35 | var _b=this.distance(this.argsToObj.apply(this,arguments)); |
||
| 36 | _b=_b<_a?_a:_b; |
||
| 37 | var pc=(_b-_a)/_b;
|
||
| 38 | var x=x1-(x1-x2)*pc;
|
||
| 39 | var y=y1-(y1-y2)*pc;
|
||
| 40 | return {x:x,y:y}; |
||
| 41 | },argsToObj:function(){ |
||
| 42 | var a=arguments; |
||
| 43 | if(a.length<4){ |
||
| 44 | return a[0]; |
||
| 45 | } |
||
| 46 | return {start:{x:a[0],y:a[1]},x:a[2],y:a[3]}; |
||
| 47 | },distance:function(){ |
||
| 48 | var o=this.argsToObj.apply(this,arguments); |
||
| 49 | return Math.abs(Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2))); |
||
| 50 | },slope:function(p1,p2){ |
||
| 51 | if(!(p1.x-p2.x)){
|
||
| 52 | return 0; |
||
| 53 | } |
||
| 54 | return ((p1.y-p2.y)/(p1.x-p2.x));
|
||
| 55 | },pointOnCircle:function(cx,cy,_c,_d){ |
||
| 56 | var _e=_d*Math.PI/180; |
||
| 57 | var x=_c*Math.cos(_e);
|
||
| 58 | var y=_c*Math.sin(_e);
|
||
| 59 | return {x:cx+x,y:cy-y}; |
||
| 60 | },constrainAngle:function(_f,min,max){ |
||
| 61 | var _10=this.angle(_f); |
||
| 62 | if(_10>=min&&_10<=max){
|
||
| 63 | return _f;
|
||
| 64 | } |
||
| 65 | var _11=this.length(_f); |
||
| 66 | var _12=_10>max?max:min-_10<100?min:max; |
||
| 67 | return this.pointOnCircle(_f.start.x,_f.start.y,_11,_12); |
||
| 68 | },snapAngle:function(obj,ca){ |
||
| 69 | var _13=this.radians(obj),_14=this.length(obj),seg=Math.PI*ca,rnd=Math.round(_13/seg),_15=rnd*seg,_16=this.radToDeg(_15),pt=this.pointOnCircle(obj.start.x,obj.start.y,_14,_16); |
||
| 70 | return pt;
|
||
| 71 | },idSetStart:function(num){ |
||
| 72 | _2=num; |
||
| 73 | },uid:function(str){ |
||
| 74 | str=str||"shape";
|
||
| 75 | _1[str]=_1[str]===undefined?_2:_1[str]+1; |
||
| 76 | return str+_1[str];
|
||
| 77 | },abbr:function(_17){ |
||
| 78 | return _17.substring(_17.lastIndexOf(".")+1).charAt(0).toLowerCase()+_17.substring(_17.lastIndexOf(".")+2); |
||
| 79 | },mixin:function(o1,o2){ |
||
| 80 | },objects:{},register:function(obj){ |
||
| 81 | this.objects[obj.id]=obj;
|
||
| 82 | },byId:function(id){ |
||
| 83 | return this.objects[id]; |
||
| 84 | },attr:function(_18,_19,_1a,_1b){ |
||
| 85 | if(!_18){
|
||
| 86 | return false; |
||
| 87 | } |
||
| 88 | try{
|
||
| 89 | if(_18.shape&&_18.util){
|
||
| 90 | _18=_18.shape; |
||
| 91 | } |
||
| 92 | if(!_1a&&_19=="id"&&_18.target){ |
||
| 93 | var n=_18.target;
|
||
| 94 | while(!dojo.attr(n,"id")){ |
||
| 95 | n=n.parentNode; |
||
| 96 | } |
||
| 97 | return dojo.attr(n,"id"); |
||
| 98 | } |
||
| 99 | if(_18.rawNode||_18.target){
|
||
| 100 | var _1c=Array.prototype.slice.call(arguments); |
||
| 101 | _1c[0]=_18.rawNode||_18.target;
|
||
| 102 | return dojo.attr.apply(dojo,_1c);
|
||
| 103 | } |
||
| 104 | return dojo.attr(_18,"id"); |
||
| 105 | } |
||
| 106 | catch(e){
|
||
| 107 | if(!_1b){
|
||
| 108 | } |
||
| 109 | return false; |
||
| 110 | } |
||
| 111 | }}; |
||
| 112 | })(); |
||
| 113 | } |