PageRenderTime 25ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/davinci.dojo_1_7/WebContent/dojo/dojox/calc/Grapher.js

https://github.com/mesmerli/maqetta
JavaScript | 422 lines | 415 code | 1 blank | 6 comment | 56 complexity | b849c277ca329fa0936e2e8fa26701bc MD5 | raw file
  1. /*
  2. Copyright (c) 2004-2011, 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. //>>built
  7. define("dojox/calc/Grapher",["dojo","dijit/_Templated","dojox/math/_base","dijit/dijit","dijit/form/DropDownButton","dijit/TooltipDialog","dijit/form/TextBox","dijit/form/Button","dijit/form/ComboBox","dijit/form/Select","dijit/form/CheckBox","dijit/ColorPalette","dojox/charting/Chart2D","dojox/charting/themes/Tufte","dojo/colors"],function(_1){
  8. _1.experimental("dojox.calc.Grapher");
  9. _1.declare("dojox.calc.Grapher",[dijit._Widget,dijit._Templated],{templateString:_1.cache("dojox.calc","templates/Grapher.html"),widgetsInTemplate:true,addXYAxes:function(_2){
  10. return _2.addAxis("x",{max:parseInt(this.graphMaxX.get("value")),min:parseInt(this.graphMinX.get("value")),majorLabels:true,minorLabels:true,minorTicks:false,microTicks:false,htmlLabels:true,labelFunc:function(_3){
  11. return _3;
  12. },maxLabelSize:30,fixUpper:"major",fixLower:"major",majorTick:{length:3}}).addAxis("y",{max:parseInt(this.graphMaxY.get("value")),min:parseInt(this.graphMinY.get("value")),labelFunc:function(_4){
  13. return _4;
  14. },maxLabelSize:50,vertical:true,microTicks:false,minorTicks:true,majorTick:{stroke:"black",length:3}});
  15. },selectAll:function(){
  16. for(var i=0;i<this.rowCount;i++){
  17. this.array[i][this.checkboxIndex].set("checked",true);
  18. }
  19. },deselectAll:function(){
  20. for(var i=0;i<this.rowCount;i++){
  21. this.array[i][this.checkboxIndex].set("checked",false);
  22. }
  23. },drawOne:function(i){
  24. },onDraw:function(){
  25. },erase:function(i){
  26. var _5=0;
  27. var _6="Series "+this.array[i][this.funcNumberIndex]+"_"+_5;
  28. while(_6 in this.array[i][this.chartIndex].runs){
  29. this.array[i][this.chartIndex].removeSeries(_6);
  30. _5++;
  31. _6="Series "+this.array[i][this.funcNumberIndex]+"_"+_5;
  32. }
  33. this.array[i][this.chartIndex].render();
  34. this.setStatus(i,"Hidden");
  35. },onErase:function(){
  36. for(var i=0;i<this.rowCount;i++){
  37. if(this.array[i][this.checkboxIndex].get("checked")){
  38. this.erase(i);
  39. }
  40. }
  41. },onDelete:function(){
  42. for(var i=0;i<this.rowCount;i++){
  43. if(this.array[i][this.checkboxIndex].get("checked")){
  44. this.erase(i);
  45. for(var k=0;k<this.functionRef;k++){
  46. if(this.array[i][k]&&this.array[i][k]["destroy"]){
  47. this.array[i][k].destroy();
  48. }
  49. }
  50. this.graphTable.deleteRow(i);
  51. this.array.splice(i,1);
  52. this.rowCount--;
  53. i--;
  54. }
  55. }
  56. },checkboxIndex:0,functionMode:1,expressionIndex:2,colorIndex:3,dropDownIndex:4,tooltipIndex:5,colorBoxFieldsetIndex:6,statusIndex:7,chartIndex:8,funcNumberIndex:9,evaluatedExpression:10,functionRef:11,createFunction:function(){
  57. var tr=this.graphTable.insertRow(-1);
  58. this.array[tr.rowIndex]=[];
  59. var td=tr.insertCell(-1);
  60. var d=_1.create("div");
  61. td.appendChild(d);
  62. var _7=new dijit.form.CheckBox({},d);
  63. this.array[tr.rowIndex][this.checkboxIndex]=_7;
  64. _1.addClass(d,"dojoxCalcCheckBox");
  65. td=tr.insertCell(-1);
  66. var _8=this.funcMode.get("value");
  67. d=_1.doc.createTextNode(_8);
  68. td.appendChild(d);
  69. this.array[tr.rowIndex][this.functionMode]=_8;
  70. td=tr.insertCell(-1);
  71. d=_1.create("div");
  72. td.appendChild(d);
  73. var _9=new dijit.form.TextBox({},d);
  74. this.array[tr.rowIndex][this.expressionIndex]=_9;
  75. _1.addClass(d,"dojoxCalcExpressionBox");
  76. var b=_1.create("div");
  77. var _a=new dijit.ColorPalette({changedColor:this.changedColor},b);
  78. _1.addClass(b,"dojoxCalcColorPalette");
  79. this.array[tr.rowIndex][this.colorIndex]=_a;
  80. var c=_1.create("div");
  81. var _b=new dijit.TooltipDialog({content:_a},c);
  82. this.array[tr.rowIndex][this.tooltipIndex]=_b;
  83. _1.addClass(c,"dojoxCalcContainerOfColor");
  84. td=tr.insertCell(-1);
  85. d=_1.create("div");
  86. td.appendChild(d);
  87. var _c=_1.create("fieldset");
  88. _1.style(_c,{backgroundColor:"black",width:"1em",height:"1em",display:"inline"});
  89. this.array[tr.rowIndex][this.colorBoxFieldsetIndex]=_c;
  90. var _d=new dijit.form.DropDownButton({label:"Color ",dropDown:_b},d);
  91. _d.containerNode.appendChild(_c);
  92. this.array[tr.rowIndex][this.dropDownIndex]=_d;
  93. _1.addClass(d,"dojoxCalcDropDownForColor");
  94. td=tr.insertCell(-1);
  95. d=_1.create("fieldset");
  96. d.innerHTML="Hidden";
  97. this.array[tr.rowIndex][this.statusIndex]=d;
  98. _1.addClass(d,"dojoxCalcStatusBox");
  99. td.appendChild(d);
  100. d=_1.create("div");
  101. _1.style(d,{position:"absolute",left:"0px",top:"0px"});
  102. this.chartsParent.appendChild(d);
  103. this.array[tr.rowIndex][this.chartNodeIndex]=d;
  104. _1.addClass(d,"dojoxCalcChart");
  105. var _e=new dojox.charting.Chart2D(d).setTheme(dojox.charting.themes.Tufte).addPlot("default",{type:"Lines",shadow:{dx:1,dy:1,width:2,color:[0,0,0,0.3]}});
  106. this.addXYAxes(_e);
  107. this.array[tr.rowIndex][this.chartIndex]=_e;
  108. _a.set("chart",_e);
  109. _a.set("colorBox",_c);
  110. _a.set("onChange",_1.hitch(_a,"changedColor"));
  111. this.array[tr.rowIndex][this.funcNumberIndex]=this.funcNumber++;
  112. this.rowCount++;
  113. },setStatus:function(i,_f){
  114. this.array[i][this.statusIndex].innerHTML=_f;
  115. },changedColor:function(){
  116. var _10=this.get("chart");
  117. var _11=this.get("colorBox");
  118. for(var i=0;i<_10.series.length;i++){
  119. if(_10.series[i]["stroke"]){
  120. if(_10.series[i].stroke["color"]){
  121. _10.series[i]["stroke"].color=this.get("value");
  122. _10.dirty=true;
  123. }
  124. }
  125. }
  126. _10.render();
  127. _1.style(_11,{backgroundColor:this.get("value")});
  128. },makeDirty:function(){
  129. this.dirty=true;
  130. },checkDirty1:function(){
  131. setTimeout(_1.hitch(this,"checkDirty"),0);
  132. },checkDirty:function(){
  133. if(this.dirty){
  134. for(var i=0;i<this.rowCount;i++){
  135. this.array[i][this.chartIndex].removeAxis("x");
  136. this.array[i][this.chartIndex].removeAxis("y");
  137. this.addXYAxes(this.array[i][this.chartIndex]);
  138. }
  139. this.onDraw();
  140. }
  141. this.dirty=false;
  142. },postCreate:function(){
  143. this.inherited(arguments);
  144. this.createFunc.set("onClick",_1.hitch(this,"createFunction"));
  145. this.selectAllButton.set("onClick",_1.hitch(this,"selectAll"));
  146. this.deselectAllButton.set("onClick",_1.hitch(this,"deselectAll"));
  147. this.drawButton.set("onClick",_1.hitch(this,"onDraw"));
  148. this.eraseButton.set("onClick",_1.hitch(this,"onErase"));
  149. this.deleteButton.set("onClick",_1.hitch(this,"onDelete"));
  150. this.dirty=false;
  151. this.graphWidth.set("onChange",_1.hitch(this,"makeDirty"));
  152. this.graphHeight.set("onChange",_1.hitch(this,"makeDirty"));
  153. this.graphMaxX.set("onChange",_1.hitch(this,"makeDirty"));
  154. this.graphMinX.set("onChange",_1.hitch(this,"makeDirty"));
  155. this.graphMaxY.set("onChange",_1.hitch(this,"makeDirty"));
  156. this.graphMinY.set("onChange",_1.hitch(this,"makeDirty"));
  157. this.windowOptionsInside.set("onClose",_1.hitch(this,"checkDirty1"));
  158. this.funcNumber=0;
  159. this.rowCount=0;
  160. this.array=[];
  161. },startup:function(){
  162. this.inherited(arguments);
  163. var _12=dijit.getEnclosingWidget(this.domNode.parentNode);
  164. if(_12&&typeof _12.close=="function"){
  165. this.closeButton.set("onClick",_1.hitch(_12,"close"));
  166. }else{
  167. _1.style(this.closeButton.domNode,"display","none");
  168. }
  169. this.createFunction();
  170. this.array[0][this.checkboxIndex].set("checked",true);
  171. this.onDraw();
  172. this.erase(0);
  173. this.array[0][this.expressionIndex].value="";
  174. }});
  175. var _13=1e-15/9,_14=1e+200,_15=Math.log(2),_16={graphNumber:0,fOfX:true,color:{stroke:"black"}};
  176. dojox.calc.Grapher.draw=function(_17,_18,_19){
  177. _19=_1.mixin({},_16,_19);
  178. _17.fullGeometry();
  179. var x;
  180. var y;
  181. var _1a;
  182. if(_19.fOfX==true){
  183. x="x";
  184. y="y";
  185. _1a=dojox.calc.Grapher.generatePoints(_18,x,y,_17.axes.x.scaler.bounds.span,_17.axes.x.scaler.bounds.lower,_17.axes.x.scaler.bounds.upper,_17.axes.y.scaler.bounds.lower,_17.axes.y.scaler.bounds.upper);
  186. }else{
  187. x="y";
  188. y="x";
  189. _1a=dojox.calc.Grapher.generatePoints(_18,x,y,_17.axes.y.scaler.bounds.span,_17.axes.y.scaler.bounds.lower,_17.axes.y.scaler.bounds.upper,_17.axes.x.scaler.bounds.lower,_17.axes.x.scaler.bounds.upper);
  190. }
  191. var i=0;
  192. if(_1a.length>0){
  193. for(;i<_1a.length;i++){
  194. if(_1a[i].length>0){
  195. _17.addSeries("Series "+_19.graphNumber+"_"+i,_1a[i],_19.color);
  196. }
  197. }
  198. }
  199. var _1b="Series "+_19.graphNumber+"_"+i;
  200. while(_1b in _17.runs){
  201. _17.removeSeries(_1b);
  202. i++;
  203. _1b="Series "+_19.graphNumber+"_"+i;
  204. }
  205. _17.render();
  206. return _1a;
  207. };
  208. dojox.calc.Grapher.generatePoints=function(_1c,x,y,_1d,_1e,_1f,_20,_21){
  209. var _22=(1<<Math.ceil(Math.log(_1d)/_15));
  210. var dx=(_1f-_1e)/_22,_23=[],_24=0,_25,_26;
  211. _23[_24]=[];
  212. var i=_1e,k,p;
  213. for(var _27=0;_27<=_22;i+=dx,_27++){
  214. p={};
  215. p[x]=i;
  216. p[y]=_1c({_name:x,_value:i,_graphing:true});
  217. if(p[x]==null||p[y]==null){
  218. return {};
  219. }
  220. if(isNaN(p[y])||isNaN(p[x])){
  221. continue;
  222. }
  223. _23[_24].push(p);
  224. if(_23[_24].length==3){
  225. _25=_28(_29(_23[_24][_23[_24].length-3],_23[_24][_23[_24].length-2]),_29(_23[_24][_23[_24].length-2],_23[_24][_23[_24].length-1]));
  226. continue;
  227. }
  228. if(_23[_24].length<4){
  229. continue;
  230. }
  231. _26=_28(_29(_23[_24][_23[_24].length-3],_23[_24][_23[_24].length-2]),_29(_23[_24][_23[_24].length-2],_23[_24][_23[_24].length-1]));
  232. if(_25.inc!=_26.inc||_25.pos!=_26.pos){
  233. var a=_2a(_1c,_23[_24][_23[_24].length-3],_23[_24][_23[_24].length-1]);
  234. p=_23[_24].pop();
  235. _23[_24].pop();
  236. for(var j=0;j<a[0].length;j++){
  237. _23[_24].push(a[0][j]);
  238. }
  239. for(k=1;k<a.length;k++){
  240. _23[++_24]=a.pop();
  241. }
  242. _23[_24].push(p);
  243. _25=_26;
  244. }
  245. }
  246. while(_23.length>1){
  247. for(k=0;k<_23[1].length;k++){
  248. if(_23[0][_23[0].length-1][x]==_23[1][k][x]){
  249. continue;
  250. }
  251. _23[0].push(_23[1][k]);
  252. }
  253. _23.splice(1,1);
  254. }
  255. _23=_23[0];
  256. var s=0;
  257. var _2b=[[]];
  258. for(k=0;k<_23.length;k++){
  259. var x1,y1,b,_2c;
  260. if(isNaN(_23[k][y])||isNaN(_23[k][x])){
  261. while(isNaN(_23[k][y])||isNaN(_23[k][x])){
  262. _23.splice(k,1);
  263. }
  264. _2b[++s]=[];
  265. k--;
  266. }else{
  267. if(_23[k][y]>_21||_23[k][y]<_20){
  268. if(k>0&&_23[k-1].y!=_20&&_23[k-1].y!=_21){
  269. _2c=_29(_23[k-1],_23[k]);
  270. if(_2c>_14){
  271. _2c=_14;
  272. }else{
  273. if(_2c<-_14){
  274. _2c=-_14;
  275. }
  276. }
  277. if(_23[k][y]>_21){
  278. y1=_21;
  279. }else{
  280. y1=_20;
  281. }
  282. b=_23[k][y]-_2c*_23[k][x];
  283. x1=(y1-b)/_2c;
  284. p={};
  285. p[x]=x1;
  286. p[y]=_1c(x1);
  287. if(p[y]!=y1){
  288. p=_2d(_1c,_23[k-1],_23[k],y1);
  289. }
  290. _2b[s].push(p);
  291. _2b[++s]=[];
  292. }
  293. var _2e=k;
  294. while(k<_23.length&&(_23[k][y]>_21||_23[k][y]<_20)){
  295. k++;
  296. }
  297. if(k>=_23.length){
  298. if(_2b[s].length==0){
  299. _2b.splice(s,1);
  300. }
  301. break;
  302. }
  303. if(k>0&&_23[k].y!=_20&&_23[k].y!=_21){
  304. _2c=_29(_23[k-1],_23[k]);
  305. if(_2c>_14){
  306. _2c=_14;
  307. }else{
  308. if(_2c<-_14){
  309. _2c=-_14;
  310. }
  311. }
  312. if(_23[k-1][y]>_21){
  313. y1=_21;
  314. }else{
  315. y1=_20;
  316. }
  317. b=_23[k][y]-_2c*_23[k][x];
  318. x1=(y1-b)/_2c;
  319. p={};
  320. p[x]=x1;
  321. p[y]=_1c(x1);
  322. if(p[y]!=y1){
  323. p=_2d(_1c,_23[k-1],_23[k],y1);
  324. }
  325. _2b[s].push(p);
  326. _2b[s].push(_23[k]);
  327. }
  328. }else{
  329. _2b[s].push(_23[k]);
  330. }
  331. }
  332. }
  333. return _2b;
  334. function _2d(_2f,_30,_31,_32){
  335. while(_30<=_31){
  336. var _33=(_30[x]+_31[x])/2;
  337. var mid={};
  338. mid[x]=_33;
  339. mid[y]=_2f(mid[x]);
  340. if(_32==mid[y]||mid[x]==_31[x]||mid[x]==_30[x]){
  341. return mid;
  342. }
  343. var _34=true;
  344. if(_32<mid[y]){
  345. _34=false;
  346. }
  347. if(mid[y]<_31[y]){
  348. if(_34){
  349. _30=mid;
  350. }else{
  351. _31=mid;
  352. }
  353. }else{
  354. if(mid[y]<_30[y]){
  355. if(!_34){
  356. _30=mid;
  357. }else{
  358. _31=mid;
  359. }
  360. }
  361. }
  362. }
  363. return NaN;
  364. };
  365. function _2a(_35,_36,_37){
  366. var _38=[[],[]],_39=_36,_3a=_37,_3b;
  367. while(_39[x]<=_3a[x]){
  368. var _3c=(_39[x]+_3a[x])/2;
  369. _3b={};
  370. _3b[x]=_3c;
  371. _3b[y]=_35(_3c);
  372. var rx=_3d(_3b[x]);
  373. var _3e={};
  374. _3e[x]=rx;
  375. _3e[y]=_35(rx);
  376. if(Math.abs(_3e[y])>=Math.abs(_3b[y])){
  377. _38[0].push(_3b);
  378. _39=_3e;
  379. }else{
  380. _38[1].unshift(_3b);
  381. if(_3a[x]==_3b[x]){
  382. break;
  383. }
  384. _3a=_3b;
  385. }
  386. }
  387. return _38;
  388. };
  389. function _28(_3f,_40){
  390. var _41=false,_42=false;
  391. if(_3f<_40){
  392. _41=true;
  393. }
  394. if(_40>0){
  395. _42=true;
  396. }
  397. return {inc:_41,pos:_42};
  398. };
  399. function _3d(v){
  400. var _43;
  401. if(v>-1&&v<1){
  402. if(v<0){
  403. if(v>=-_13){
  404. _43=-v;
  405. }else{
  406. _43=v/Math.ceil(v/_13);
  407. }
  408. }else{
  409. _43=_13;
  410. }
  411. }else{
  412. _43=Math.abs(v)*_13;
  413. }
  414. return v+_43;
  415. };
  416. function _29(p1,p2){
  417. return (p2[y]-p1[y])/(p2[x]-p1[x]);
  418. };
  419. };
  420. return dojox.calc.Grapher;
  421. });