PageRenderTime 609ms CodeModel.GetById 48ms RepoModel.GetById 0ms app.codeStats 0ms

/flexcomponents/15981c08/sciplot/src/bkde/as3/boards/GraphingBoard3D.as

https://github.com/jherr/flexcomponents
ActionScript | 2179 lines | 1080 code | 1065 blank | 34 comment | 145 complexity | e215825e159a8c90f1dcc15cf0214803 MD5 | raw file
  1. /* ***********************************************************************
  2. The classes in the package
  3. bkde.as3.* were created by
  4. Barbara Kaskosz of the University of Rhode Island
  5. (bkaskosz@math.uri.edu) and
  6. Douglas E. Ensley of Shippensburg University
  7. (DEEnsley@ship.edu).
  8. Feel free to use and modify the classes in the package
  9. bkde.as3.* to create
  10. your own Flash applications for educational purposes under the
  11. following two conditions:
  12. 1) Please include a line acknowledging this work and the authors
  13. with your application in a way that is visible in your compiled file
  14. or on your html page.
  15. 2) If you choose to modify the classes in the package
  16. bkde.as3.*, put them into a package different from
  17. the original. In this case too, please acknowledge this work
  18. in a way visible to the user.
  19. If you wish to use the materials for commercial purposes, you need our
  20. permission.
  21. This work is supported in part by the National Science Foundation
  22. under the grant DUE-0535327.
  23. (Preliminary version. More methods will be added for rendering 3D
  24. objects other than graphs of functions and surfaces.)
  25. Last modified: August 16, 2007
  26. ************************************************************************ */
  27. package bkde.as3.boards {
  28. import flash.display.Sprite;
  29. import flash.display.Shape;
  30. import flash.events.MouseEvent;
  31. import flash.text.*;
  32. import bkde.as3.utilities.MatrixUtils;
  33. public class GraphingBoard3D extends Sprite {
  34. private var nBoardSize:Number;
  35. private var nCubeSize:Number;
  36. private var spGraphHolder:Sprite;
  37. private var patches:Shape;
  38. private var shBorder:Shape;
  39. private var shBack:Shape;
  40. private var side1:Shape;
  41. private var side2:Shape;
  42. private var side3:Shape;
  43. private var side4:Shape;
  44. private var side5:Shape;
  45. private var side6:Shape;
  46. private var side7:Shape;
  47. private var side8:Shape;
  48. private var side9:Shape;
  49. private var side10:Shape;
  50. private var side11:Shape;
  51. private var side12:Shape;
  52. private var spBoxHolder:Sprite;
  53. private var spMask:Sprite;
  54. private var ErrorFormat:TextFormat;
  55. private var bIsErrorBoxOn:Boolean;
  56. private var ErrorBox:TextField;
  57. private var WaitBox:TextField;
  58. private var WaitFormat:TextFormat;
  59. private var bIsWaitBoxOn:Boolean;
  60. private var xLabel:TextField;
  61. private var yLabel:TextField;
  62. private var zLabel:TextField;
  63. private var xminLabel:TextField;
  64. private var xmaxLabel:TextField;
  65. private var yminLabel:TextField;
  66. private var ymaxLabel:TextField;
  67. private var zminLabel:TextField;
  68. private var zmaxLabel:TextField;
  69. private var LabelsFormat:TextFormat;
  70. private var bAreAxesLabelsOn:Boolean;
  71. public var zRangeBox:TextField;
  72. public var yRangeBox:TextField;
  73. public var xRangeBox:TextField;
  74. private var RangesFormat:TextFormat;
  75. private var bAreRangeBoxesOn:Boolean;
  76. private var p1:Array;
  77. private var p2:Array;
  78. private var p3:Array;
  79. private var p4:Array;
  80. private var p5:Array;
  81. private var p6:Array;
  82. private var p7:Array;
  83. private var p8:Array;
  84. public var fLength:Number;
  85. public var nMesh:Number;
  86. private var nFrameColor:Number;
  87. private var nAxesFront:Number;
  88. private var nAxesBack:Number;
  89. private var legalArray:Array;
  90. private var pixArray:Array;
  91. private var sColorType:String;
  92. private var bColorsLocked:Boolean;
  93. private var nSolidColor:Number;
  94. public var bShowFrame:Boolean;
  95. private var bIsBackground:Boolean;
  96. private var bIsBorder:Boolean;
  97. private var aTilesColors:Array;
  98. public var nOpacity:Number;
  99. public function GraphingBoard3D(b:Number){
  100. this.nBoardSize=b;
  101. this.nCubeSize=Math.round(0.28*nBoardSize);
  102. this.fLength=2000;
  103. this.nMesh=20;
  104. this.nFrameColor=0x333333;
  105. this.nAxesFront=0x000000;
  106. this.nAxesBack=0xCCCCCC;
  107. this.nOpacity=1;
  108. this.legalArray=[];
  109. this.pixArray=[];
  110. this.bShowFrame=true;
  111. this.bIsBackground=true;
  112. this.bIsBorder=true;
  113. this.aTilesColors=[];
  114. this.sColorType="parametric";
  115. this.bColorsLocked=false;
  116. shBack=new Shape();
  117. this.addChild(shBack);
  118. shBorder=new Shape();
  119. this.addChild(shBorder);
  120. spGraphHolder=new Sprite();
  121. this.addChild(spGraphHolder);
  122. spGraphHolder.x=nBoardSize/2;
  123. spGraphHolder.y=nBoardSize/2;
  124. spBoxHolder=new Sprite();
  125. this.addChild(spBoxHolder);
  126. spBoxHolder.x=nBoardSize/2;
  127. spBoxHolder.y=nBoardSize/2;
  128. side1=new Shape();
  129. spGraphHolder.addChild(side1);
  130. side2=new Shape();
  131. spGraphHolder.addChild(side2);
  132. side3=new Shape();
  133. spGraphHolder.addChild(side3);
  134. side4=new Shape();
  135. spGraphHolder.addChild(side4);
  136. side5=new Shape();
  137. spGraphHolder.addChild(side5);
  138. side6=new Shape();
  139. spGraphHolder.addChild(side6);
  140. side7=new Shape();
  141. spGraphHolder.addChild(side7);
  142. side8=new Shape();
  143. spGraphHolder.addChild(side8);
  144. side9=new Shape();
  145. spGraphHolder.addChild(side9);
  146. side10=new Shape();
  147. spGraphHolder.addChild(side10);
  148. side11=new Shape();
  149. spGraphHolder.addChild(side11);
  150. side12=new Shape();
  151. spGraphHolder.addChild(side12);
  152. patches=new Shape();
  153. spGraphHolder.addChild(patches);
  154. spMask=new Sprite();
  155. this.addChild(spMask);
  156. spGraphHolder.mask=spMask;
  157. drawBack(0xFFFFFF);
  158. drawBorder(0x000000,1);
  159. drawMask();
  160. createErrorBox();
  161. enableErrorBox();
  162. createWaitBox();
  163. enableWaitBox();
  164. createAxesLabels();
  165. enableAxesLabels();
  166. createRangeBoxes();
  167. bAreRangeBoxesOn=false;
  168. prepAxes();
  169. }
  170. private function drawBorder(colo:Number,s:Number): void {
  171. shBorder.graphics.clear();
  172. if(bIsBorder){
  173. shBorder.graphics.lineStyle(s,colo);
  174. shBorder.graphics.moveTo(0,0);
  175. shBorder.graphics.lineTo(0,nBoardSize);
  176. shBorder.graphics.lineTo(nBoardSize,nBoardSize);
  177. shBorder.graphics.lineTo(nBoardSize,0);
  178. shBorder.graphics.lineTo(0,0);
  179. }
  180. }
  181. private function drawBack(colo:Number): void {
  182. shBack.graphics.clear();
  183. if(bIsBackground){
  184. shBack.graphics.lineStyle(1,colo);
  185. shBack.graphics.moveTo(0,0);
  186. shBack.graphics.beginFill(colo,1);
  187. shBack.graphics.lineTo(0,nBoardSize);
  188. shBack.graphics.lineTo(nBoardSize,nBoardSize);
  189. shBack.graphics.lineTo(nBoardSize,0);
  190. shBack.graphics.lineTo(0,0);
  191. shBack.graphics.endFill();
  192. }
  193. }
  194. private function drawMask(): void {
  195. spMask.graphics.clear();
  196. spMask.graphics.moveTo(1,1);
  197. spMask.graphics.beginFill(0x666666,1);
  198. spMask.graphics.lineTo(1,nBoardSize-1);
  199. spMask.graphics.lineTo(nBoardSize-1,nBoardSize-1);
  200. spMask.graphics.lineTo(nBoardSize-1,1);
  201. spMask.graphics.lineTo(1,1);
  202. spMask.graphics.endFill();
  203. }
  204. public function setBorder(b:Boolean,colo:Number=0x000000,s:Number=1): void {
  205. bIsBorder=b;
  206. drawBorder(colo,s);
  207. }
  208. public function setBackground(b:Boolean,colo:Number=0xFFFFFF): void {
  209. bIsBackground=b;
  210. drawBack(colo);
  211. }
  212. public function setFrontAxesColor(colo:Number): void {
  213. nAxesFront=colo;
  214. }
  215. public function setBackAxesColor(colo:Number): void {
  216. nAxesBack=colo;
  217. }
  218. public function setFrameColor(colo:Number): void {
  219. nFrameColor=colo;
  220. }
  221. public function showFrame(b:Boolean): void {
  222. bShowFrame=b;
  223. }
  224. public function setColorType(t:String,n:Number=0xFFFF00): void {
  225. sColorType=t;
  226. if(t=="solid"){
  227. nSolidColor=n;
  228. }
  229. }
  230. private function createWaitBox(): void {
  231. WaitBox=new TextField();
  232. WaitBox.type=TextFieldType.DYNAMIC;
  233. WaitBox.x=Math.round(nBoardSize/2)-95;
  234. WaitBox.y=5-Math.round(nBoardSize/2);
  235. WaitBox.autoSize=TextFieldAutoSize.LEFT;
  236. WaitBox.wordWrap=false;
  237. WaitBox.border=false;
  238. WaitBox.background=false;
  239. setWaitBoxFormat(0x990099,12,"Processing...");
  240. WaitBox.visible=false;
  241. WaitBox.mouseEnabled=false;
  242. }
  243. public function setWaitBoxFormat(colo:Number,s:Number,mes:String): void {
  244. WaitFormat=new TextFormat();
  245. WaitFormat.color=colo;
  246. WaitFormat.size=s;
  247. WaitFormat.font="Arial";
  248. WaitFormat.italic=true;
  249. WaitBox.defaultTextFormat=WaitFormat;
  250. WaitBox.text=mes;
  251. }
  252. public function setWaitBoxPos(a:Number,b:Number):void {
  253. WaitBox.x=a-Math.round(nBoardSize/2);
  254. WaitBox.y=b-Math.round(nBoardSize/2);
  255. }
  256. public function setWaitBoxVisible(b:Boolean):void {
  257. WaitBox.visible=b;
  258. }
  259. public function enableWaitBox(): void {
  260. spBoxHolder.addChild(WaitBox);
  261. bIsWaitBoxOn=true;
  262. }
  263. public function disableWaitBox(): void {
  264. if(bIsWaitBoxOn){
  265. spBoxHolder.removeChild(WaitBox);
  266. bIsWaitBoxOn=false;
  267. }
  268. }
  269. public function enableRangeBoxes(): void {
  270. spBoxHolder.addChild(yRangeBox);
  271. spBoxHolder.addChild(xRangeBox);
  272. spBoxHolder.addChild(zRangeBox);
  273. bAreRangeBoxesOn=true;
  274. }
  275. public function disableRangeBoxes(): void {
  276. if(bAreRangeBoxesOn){
  277. spBoxHolder.removeChild(yRangeBox);
  278. spBoxHolder.removeChild(xRangeBox);
  279. spBoxHolder.removeChild(zRangeBox);
  280. bAreRangeBoxesOn=false;
  281. }
  282. }
  283. private function createRangeBoxes(): void {
  284. zRangeBox=new TextField();
  285. yRangeBox=new TextField();
  286. xRangeBox=new TextField();
  287. zRangeBox.type=TextFieldType.DYNAMIC;
  288. yRangeBox.type=TextFieldType.DYNAMIC;
  289. xRangeBox.type=TextFieldType.DYNAMIC;
  290. zRangeBox.wordWrap=false;
  291. zRangeBox.border=false;
  292. zRangeBox.background=false;
  293. zRangeBox.multiline=true;
  294. zRangeBox.text="";
  295. zRangeBox.visible=false;
  296. yRangeBox.wordWrap=false;
  297. yRangeBox.border=false;
  298. yRangeBox.background=false;
  299. yRangeBox.multiline=true;
  300. yRangeBox.text="";
  301. yRangeBox.visible=false;
  302. xRangeBox.wordWrap=false;
  303. xRangeBox.border=false;
  304. xRangeBox.background=false;
  305. xRangeBox.multiline=true;
  306. xRangeBox.text="";
  307. xRangeBox.visible=false;
  308. setRangeBoxesFormat(0x000000,11);
  309. setZRangeBoxPosAndSize(5,5,74,35);
  310. setYRangeBoxPosAndSize(Math.round(nBoardSize)-75,Math.round(nBoardSize)-40,74,35);
  311. setXRangeBoxPosAndSize(5,Math.round(nBoardSize)-40,74,35);
  312. zRangeBox.visible=true;
  313. zRangeBox.mouseEnabled=false;
  314. yRangeBox.visible=true;
  315. yRangeBox.mouseEnabled=false;
  316. xRangeBox.visible=true;
  317. xRangeBox.mouseEnabled=false;
  318. }
  319. public function setZRangeBoxPosAndSize(a:Number,b:Number,w:Number,h:Number):void {
  320. zRangeBox.x=a-Math.round(nBoardSize/2);
  321. zRangeBox.y=b-Math.round(nBoardSize/2);
  322. zRangeBox.width=w;
  323. zRangeBox.height=h;
  324. }
  325. public function setYRangeBoxPosAndSize(a:Number,b:Number,w:Number,h:Number):void {
  326. yRangeBox.x=a-Math.round(nBoardSize/2);
  327. yRangeBox.y=b-Math.round(nBoardSize/2);
  328. yRangeBox.width=w;
  329. yRangeBox.height=h;
  330. }
  331. public function setXRangeBoxPosAndSize(a:Number,b:Number,w:Number,h:Number):void {
  332. xRangeBox.x=a-Math.round(nBoardSize/2);
  333. xRangeBox.y=b-Math.round(nBoardSize/2);
  334. xRangeBox.width=w;
  335. xRangeBox.height=h;
  336. }
  337. public function setRangeBoxesFormat(colo:Number,s:Number):void {
  338. RangesFormat=new TextFormat();
  339. RangesFormat.color=colo;
  340. RangesFormat.size=s;
  341. RangesFormat.font="Arial";
  342. zRangeBox.defaultTextFormat=RangesFormat;
  343. yRangeBox.defaultTextFormat=RangesFormat;
  344. xRangeBox.defaultTextFormat=RangesFormat;
  345. }
  346. private function createErrorBox(): void {
  347. ErrorBox=new TextField();
  348. ErrorBox.type=TextFieldType.DYNAMIC;
  349. ErrorBox.x=20-Math.round(nBoardSize/2);
  350. ErrorBox.y=20-Math.round(nBoardSize/2);
  351. ErrorBox.width=Math.round(nBoardSize)-40;
  352. ErrorBox.height=Math.round(nBoardSize/2);
  353. ErrorBox.wordWrap=true;
  354. ErrorBox.border=true;
  355. ErrorBox.background=true;
  356. ErrorBox.borderColor=0xFFFFFF;
  357. ErrorBox.backgroundColor=0xFFFFFF;
  358. setErrorBoxFormat(0x000000,12);
  359. ErrorBox.visible=false;
  360. ErrorBox.mouseEnabled=false;
  361. }
  362. public function setErrorBoxBorder(b:Boolean,colo:Number=0x000000): void {
  363. ErrorBox.border=b;
  364. ErrorBox.borderColor=colo;
  365. }
  366. public function setErrorBoxBackground(b:Boolean,colo:Number=0xFFFFFF): void {
  367. ErrorBox.background=b;
  368. ErrorBox.backgroundColor=colo;
  369. }
  370. public function setErrorBoxFormat(colo:Number,s:Number): void {
  371. ErrorFormat=new TextFormat();
  372. ErrorFormat.color=colo;
  373. ErrorFormat.size=s;
  374. ErrorFormat.font="Arial";
  375. ErrorBox.defaultTextFormat=ErrorFormat;
  376. }
  377. public function setErrorBoxSizeAndPos(w:Number,h:Number,a:Number,b:Number): void {
  378. ErrorBox.width=w;
  379. ErrorBox.height=h;
  380. ErrorBox.x=a-Math.round(nBoardSize/2);
  381. ErrorBox.y=b-Math.round(nBoardSize/2);
  382. }
  383. public function setErrorBoxVisible(b:Boolean):void {
  384. ErrorBox.visible=b;
  385. }
  386. public function enableErrorBox(): void {
  387. spBoxHolder.addChild(ErrorBox);
  388. bIsErrorBoxOn=true;
  389. }
  390. public function disableErrorBox(): void {
  391. if(bIsErrorBoxOn){
  392. spBoxHolder.removeChild(ErrorBox);
  393. bIsErrorBoxOn=false;
  394. }
  395. }
  396. public function showError(mes:String):void {
  397. ErrorBox.text=mes;
  398. ErrorBox.visible=true;
  399. xLabel.visible=false;
  400. yLabel.visible=false;
  401. zLabel.visible=false;
  402. zmaxLabel.visible=false;
  403. zminLabel.visible=false;
  404. xmaxLabel.visible=false;
  405. xminLabel.visible=false;
  406. ymaxLabel.visible=false;
  407. yminLabel.visible=false;
  408. }
  409. private function createAxesLabels(): void {
  410. xLabel=new TextField();
  411. xLabel.type=TextFieldType.DYNAMIC;
  412. xLabel.border=false;
  413. xLabel.background=false;
  414. xLabel.x=0;
  415. xLabel.y=0;
  416. xLabel.wordWrap=false;
  417. xLabel.autoSize=TextFieldAutoSize.LEFT;
  418. yLabel=new TextField();
  419. yLabel.type=TextFieldType.DYNAMIC;
  420. yLabel.border=false;
  421. yLabel.background=false;
  422. yLabel.x=20;
  423. yLabel.y=0;
  424. yLabel.wordWrap=false;
  425. yLabel.autoSize=TextFieldAutoSize.LEFT;
  426. zLabel=new TextField();
  427. zLabel.type=TextFieldType.DYNAMIC;
  428. zLabel.border=false;
  429. zLabel.background=false;
  430. zLabel.x=40;
  431. zLabel.y=0;
  432. zLabel.wordWrap=false;
  433. zLabel.autoSize=TextFieldAutoSize.LEFT;
  434. xminLabel=new TextField();
  435. xminLabel.type=TextFieldType.DYNAMIC;
  436. xminLabel.border=false;
  437. xminLabel.background=false;
  438. xminLabel.x=60;
  439. xminLabel.y=0;
  440. xminLabel.wordWrap=false;
  441. xminLabel.autoSize=TextFieldAutoSize.LEFT;
  442. yminLabel=new TextField();
  443. yminLabel.type=TextFieldType.DYNAMIC;
  444. yminLabel.border=false;
  445. yminLabel.background=false;
  446. yminLabel.x=90;
  447. yminLabel.y=0;
  448. yminLabel.wordWrap=false;
  449. yminLabel.autoSize=TextFieldAutoSize.LEFT;
  450. zminLabel=new TextField();
  451. zminLabel.type=TextFieldType.DYNAMIC;
  452. zminLabel.border=false;
  453. zminLabel.background=false;
  454. zminLabel.x=120;
  455. zminLabel.y=0;
  456. zminLabel.wordWrap=false;
  457. zminLabel.autoSize=TextFieldAutoSize.LEFT;
  458. xmaxLabel=new TextField();
  459. xmaxLabel.type=TextFieldType.DYNAMIC;
  460. xmaxLabel.border=false;
  461. xmaxLabel.background=false;
  462. xmaxLabel.x=150;
  463. xmaxLabel.y=0;
  464. xmaxLabel.wordWrap=false;
  465. xmaxLabel.autoSize=TextFieldAutoSize.LEFT;
  466. ymaxLabel=new TextField();
  467. ymaxLabel.type=TextFieldType.DYNAMIC;
  468. ymaxLabel.border=false;
  469. ymaxLabel.background=false;
  470. ymaxLabel.x=180;
  471. ymaxLabel.y=0;
  472. ymaxLabel.wordWrap=false;
  473. ymaxLabel.autoSize=TextFieldAutoSize.LEFT;
  474. zmaxLabel=new TextField();
  475. zmaxLabel.type=TextFieldType.DYNAMIC;
  476. zmaxLabel.border=false;
  477. zmaxLabel.background=false;
  478. zmaxLabel.x=220;
  479. zmaxLabel.y=0;
  480. zmaxLabel.wordWrap=false;
  481. zmaxLabel.autoSize=TextFieldAutoSize.LEFT;
  482. setLabelsFormat(0x000000,11);
  483. xLabel.visible=true;
  484. yLabel.visible=true;
  485. zLabel.visible=true;
  486. xminLabel.visible=true;
  487. yminLabel.visible=true;
  488. zminLabel.visible=true;
  489. xmaxLabel.visible=true;
  490. ymaxLabel.visible=true;
  491. zmaxLabel.visible=true;
  492. xLabel.mouseEnabled=false;
  493. xminLabel.mouseEnabled=false;
  494. xmaxLabel.mouseEnabled=false;
  495. yLabel.mouseEnabled=false;
  496. yminLabel.mouseEnabled=false;
  497. ymaxLabel.mouseEnabled=false;
  498. zLabel.mouseEnabled=false;
  499. zminLabel.mouseEnabled=false;
  500. zmaxLabel.mouseEnabled=false;
  501. }
  502. public function setLabelsFormat(colo:Number,s:Number,b:String="bold"): void {
  503. LabelsFormat=new TextFormat();
  504. LabelsFormat.color=colo;
  505. LabelsFormat.size=s;
  506. LabelsFormat.font="Arial";
  507. if(b=="bold"){
  508. LabelsFormat.bold=true;
  509. } else {
  510. LabelsFormat.bold=false;
  511. }
  512. xLabel.defaultTextFormat=LabelsFormat;
  513. yLabel.defaultTextFormat=LabelsFormat;
  514. zLabel.defaultTextFormat=LabelsFormat;
  515. xminLabel.defaultTextFormat=LabelsFormat;
  516. yminLabel.defaultTextFormat=LabelsFormat;
  517. zminLabel.defaultTextFormat=LabelsFormat;
  518. xmaxLabel.defaultTextFormat=LabelsFormat;
  519. ymaxLabel.defaultTextFormat=LabelsFormat;
  520. zmaxLabel.defaultTextFormat=LabelsFormat;
  521. xLabel.text="x";
  522. yLabel.text="y";
  523. zLabel.text="z";
  524. xminLabel.text="xmin";
  525. yminLabel.text="ymin";
  526. zminLabel.text="zmin";
  527. xmaxLabel.text="xmax";
  528. ymaxLabel.text="ymax";
  529. zmaxLabel.text="zmax";
  530. }
  531. public function enableAxesLabels():void {
  532. spBoxHolder.addChild(xLabel);
  533. spBoxHolder.addChild(yLabel);
  534. spBoxHolder.addChild(zLabel);
  535. spBoxHolder.addChild(xminLabel);
  536. spBoxHolder.addChild(yminLabel);
  537. spBoxHolder.addChild(zminLabel);
  538. spBoxHolder.addChild(xmaxLabel);
  539. spBoxHolder.addChild(ymaxLabel);
  540. spBoxHolder.addChild(zmaxLabel);
  541. bAreAxesLabelsOn=true;
  542. }
  543. public function disableAxesLabels():void {
  544. if(bAreAxesLabelsOn){
  545. spBoxHolder.removeChild(xLabel);
  546. spBoxHolder.removeChild(yLabel);
  547. spBoxHolder.removeChild(zLabel);
  548. spBoxHolder.removeChild(xminLabel);
  549. spBoxHolder.removeChild(yminLabel);
  550. spBoxHolder.removeChild(zminLabel);
  551. spBoxHolder.removeChild(xmaxLabel);
  552. spBoxHolder.removeChild(ymaxLabel);
  553. spBoxHolder.removeChild(zmaxLabel);
  554. bAreAxesLabelsOn=false;
  555. }
  556. }
  557. public function getCubeSize():Number {
  558. return nCubeSize;
  559. }
  560. public function setPixArray(A:Array): void {
  561. var i:int;
  562. var j:int;
  563. for(j=0;j<A.length;j++){
  564. pixArray[j]=[];
  565. legalArray[j]=[];
  566. for(i=0;i<A.length;i++){
  567. pixArray[j][i]=[];
  568. pixArray[j][i][0]=A[j][i][0];
  569. pixArray[j][i][1]=A[j][i][1];
  570. pixArray[j][i][2]=A[j][i][2];
  571. legalArray[j][i]=A[j][i][3];
  572. }
  573. }
  574. }
  575. public function drawSurface(M:Array):void {
  576. var j:Number;
  577. var i:Number;
  578. var avx:Number;
  579. var avy:Number;
  580. var avz:Number;
  581. var gcamer:Number;
  582. var dispArray=[];
  583. var depArray=[];
  584. var n:Number;
  585. var depLen:Number;
  586. var coloFactor:Number=92/nCubeSize;
  587. var coloFactorS:Number;
  588. if(nMesh==1){
  589. coloFactorS=nMesh;
  590. } else {
  591. coloFactorS=nMesh/(nMesh-1);
  592. }
  593. patches.graphics.clear();
  594. if(pixArray.length>0){
  595. for(j=0;j<=nMesh;j++){
  596. dispArray[j]=[];
  597. for(i=0;i<=nMesh; i++){
  598. pixArray[j][i]=MatrixUtils.MatrixByVector(M,pixArray[j][i]);
  599. dispArray[j][i]=MatrixUtils.projectPoint(pixArray[j][i],fLength);
  600. }
  601. }
  602. for(j=0;j<nMesh;j++){
  603. if(!bColorsLocked && sColorType=="parametric"){
  604. aTilesColors[j]=[];
  605. } else if(!bColorsLocked && sColorType=="solid"){
  606. aTilesColors[j]=[];
  607. } else if(!bColorsLocked && sColorType=="function"){
  608. aTilesColors[j]=[];
  609. } else { }
  610. for(i=0;i<nMesh;i++){
  611. if(legalArray[j][i]+legalArray[j+1][i]+legalArray[j][i+1]+legalArray[j+1][i+1]==0){
  612. avx=(pixArray[j][i][0]+pixArray[j][i+1][0]+pixArray[j+1][i+1][0]+pixArray[j+1][i][0])/4;
  613. avy=(pixArray[j][i][1]+pixArray[j][i+1][1]+pixArray[j+1][i+1][1]+pixArray[j+1][i][1])/4;
  614. avz=(pixArray[j][i][2]+pixArray[j][i+1][2]+pixArray[j+1][i+1][2]+pixArray[j+1][i][2])/4;
  615. gcamer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  616. depArray.push([gcamer,j,i]);
  617. if(!bColorsLocked && sColorType=="parametric"){
  618. aTilesColors[j][i]=combineRGB((2*coloFactor*avx+100)*0.8+70,(2*coloFactor*avy+100)*0.8+70,(2*coloFactor*avz+100)*0.8+70);
  619. } else if(!bColorsLocked && sColorType=="function"){
  620. aTilesColors[j][i]=combineRGB(Math.floor(coloFactorS*j/nMesh*200)+55, Math.floor((1-(coloFactorS*j/nMesh)*(coloFactorS*i/nMesh))*160)+55,Math.floor(coloFactorS*i/nMesh*200)+55);
  621. } else if(!bColorsLocked && sColorType=="solid"){
  622. aTilesColors[j][i]=nSolidColor;
  623. } else { }
  624. }
  625. }
  626. }
  627. depArray.sort(byDist);
  628. depLen=depArray.length;
  629. for(n=0;n<depLen;n++){
  630. j=depArray[n][1]; i=depArray[n][2];
  631. if(bShowFrame){
  632. patches.graphics.lineStyle(0,nFrameColor);
  633. }
  634. patches.graphics.moveTo(dispArray[j][i][0],dispArray[j][i][1]);
  635. patches.graphics.beginFill(aTilesColors[j][i],nOpacity);
  636. patches.graphics.lineTo(dispArray[j][i+1][0],dispArray[j][i+1][1]);
  637. patches.graphics.lineTo(dispArray[j+1][i+1][0],dispArray[j+1][i+1][1]);
  638. patches.graphics.lineTo(dispArray[j+1][i][0],dispArray[j+1][i][1]);
  639. patches.graphics.lineTo(dispArray[j][i][0],dispArray[j][i][1]);
  640. patches.graphics.endFill();
  641. }
  642. }
  643. bColorsLocked=true;
  644. }
  645. private function byDist(v:Array,w:Array):Number {
  646. if (v[0]>w[0]){
  647. return -1;
  648. } else if (v[0]<w[0]){
  649. return 1;
  650. } else {
  651. return 0;
  652. }
  653. }
  654. public function resetBoard():void {
  655. var k:int;
  656. ErrorBox.text="";
  657. ErrorBox.visible=false;
  658. xLabel.visible=false;
  659. xminLabel.visible=false;
  660. xmaxLabel.visible=false;
  661. yLabel.visible=false;
  662. yminLabel.visible=false;
  663. ymaxLabel.visible=false;
  664. zLabel.visible=false;
  665. zminLabel.visible=false;
  666. zmaxLabel.visible=false;
  667. legalArray=[];
  668. pixArray=[];
  669. aTilesColors=[];
  670. bColorsLocked=false;
  671. prepAxes();
  672. patches.graphics.clear();
  673. for(k=1;k<=12;k++){
  674. this["side"+k].graphics.clear();
  675. }
  676. }
  677. public function getBoardSize():Number {
  678. return nBoardSize;
  679. }
  680. private function signum(a:Number,b:Number):Number {
  681. if(b-a>0){return 1;}
  682. else if(b-a<0){return -1;}
  683. else {return 0;}
  684. }
  685. private function prepAxes():void {
  686. p1=[-nCubeSize,-nCubeSize,-nCubeSize];
  687. p2=[-nCubeSize,nCubeSize,-nCubeSize];
  688. p3=[-nCubeSize,nCubeSize,nCubeSize];
  689. p4=[nCubeSize,nCubeSize,nCubeSize];
  690. p5=[nCubeSize,nCubeSize,-nCubeSize];
  691. p6=[nCubeSize,-nCubeSize,-nCubeSize];
  692. p7=[-nCubeSize,-nCubeSize,nCubeSize];
  693. p8=[nCubeSize,-nCubeSize,nCubeSize];
  694. }
  695. public function setCubeSize(a:Number):void {
  696. nCubeSize=a;
  697. prepAxes();
  698. }
  699. public function drawAxes(M:Array):void {
  700. var dp1:Array=[];
  701. var dp2:Array=[];
  702. var dp3:Array=[];
  703. var dp4:Array=[];
  704. var dp5:Array=[];
  705. var dp6:Array=[];
  706. var dp7:Array=[];
  707. var dp8:Array=[];
  708. var k:Number;
  709. var avx:Number;
  710. var avy:Number;
  711. var avz:Number;
  712. var mid1:Number;
  713. var mid2:Number;
  714. var mid3:Number;
  715. var mid4:Number;
  716. var mid5:Number;
  717. var mid6:Number;
  718. var index1:Number=0;
  719. var index2:Number=0;
  720. var index3:Number=0;
  721. var index4:Number=0;
  722. var index5:Number=0;
  723. var index6:Number=0;
  724. var index7:Number=0;
  725. var index8:Number=0;
  726. var index9:Number=0;
  727. var index10:Number=0;
  728. var index11:Number=0;
  729. var index12:Number=0;
  730. var camer:Number;
  731. var mids:Array=[];
  732. var numObj:Number=spGraphHolder.numChildren;
  733. for(k=1;k<=12;k++){
  734. this["side"+k].graphics.clear();
  735. }
  736. p1=MatrixUtils.MatrixByVector(M,p1);
  737. dp1=MatrixUtils.projectPoint(p1,fLength);
  738. p2=MatrixUtils.MatrixByVector(M,p2);
  739. dp2=MatrixUtils.projectPoint(p2,fLength);
  740. p3=MatrixUtils.MatrixByVector(M,p3);
  741. dp3=MatrixUtils.projectPoint(p3,fLength);
  742. p4=MatrixUtils.MatrixByVector(M,p4);
  743. dp4=MatrixUtils.projectPoint(p4,fLength);
  744. p5=MatrixUtils.MatrixByVector(M,p5);
  745. dp5=MatrixUtils.projectPoint(p5,fLength);
  746. p6=MatrixUtils.MatrixByVector(M,p6);
  747. dp6=MatrixUtils.projectPoint(p6,fLength);
  748. p7=MatrixUtils.MatrixByVector(M,p7);
  749. dp7=MatrixUtils.projectPoint(p7,fLength);
  750. p8=MatrixUtils.MatrixByVector(M,p8);
  751. dp8=MatrixUtils.projectPoint(p8,fLength);
  752. yLabel.x=(dp2[0]+dp5[0])/2;
  753. yLabel.y=(dp2[1]+dp5[1])/2;
  754. yminLabel.x=dp2[0]+signum(dp2[0],dp5[0])*6;
  755. yminLabel.y=dp2[1]+signum(dp2[1],dp5[1])*10;
  756. ymaxLabel.x=dp5[0]-signum(dp2[0],dp5[0])*2;
  757. ymaxLabel.y=dp5[1]-signum(dp2[1],dp5[1])*2;
  758. xLabel.x=(dp2[0]+dp3[0])/2;
  759. xLabel.y=(dp2[1]+dp3[1])/2;
  760. xminLabel.x=dp2[0]+signum(dp2[0],dp3[0])*2;
  761. xminLabel.y=dp2[1]+signum(dp2[1],dp3[1])*2;
  762. xmaxLabel.x=dp3[0]-signum(dp2[0],dp3[0])*2;
  763. xmaxLabel.y=dp3[1]-signum(dp2[1],dp3[1])*2;
  764. zLabel.x=(dp2[0]+dp1[0])/2;
  765. zLabel.y=(dp2[1]+dp1[1])/2;
  766. zminLabel.x=dp2[0]+signum(dp2[0],dp1[0])*8;
  767. zminLabel.y=dp2[1]+signum(dp2[1],dp1[1])*15;
  768. zmaxLabel.x=dp1[0]-signum(dp2[0],dp1[0])*2;
  769. zmaxLabel.y=dp1[1]-signum(dp2[1],dp1[1])*2;
  770. avx=(p7[0]+p8[0]+p3[0]+p4[0])/4;
  771. avy=(p7[1]+p8[1]+p3[1]+p4[1])/4;
  772. avz=(p7[2]+p8[2]+p3[2]+p4[2])/4;
  773. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  774. mid1=camer;
  775. avx=(p8[0]+p6[0]+p4[0]+p5[0])/4;
  776. avy=(p8[1]+p6[1]+p4[1]+p5[1])/4;
  777. avz=(p8[2]+p6[2]+p4[2]+p5[2])/4;
  778. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  779. mid2=camer;
  780. avx=(p1[0]+p6[0]+p2[0]+p5[0])/4;
  781. avy=(p1[1]+p6[1]+p2[1]+p5[1])/4;
  782. avz=(p1[2]+p6[2]+p2[2]+p5[2])/4;
  783. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  784. mid3=camer;
  785. avx=(p1[0]+p2[0]+p3[0]+p7[0])/4;
  786. avy=(p1[1]+p2[1]+p3[1]+p7[1])/4;
  787. avz=(p1[2]+p2[2]+p3[2]+p7[2])/4;
  788. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  789. mid4=camer;
  790. avx=(p8[0]+p6[0]+p1[0]+p7[0])/4;
  791. avy=(p8[1]+p6[1]+p1[1]+p7[1])/4;
  792. avz=(p8[2]+p6[2]+p1[2]+p7[2])/4;
  793. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  794. mid5=camer;
  795. avx=(p2[0]+p3[0]+p4[0]+p5[0])/4;
  796. avy=(p2[1]+p3[1]+p4[1]+p5[1])/4;
  797. avz=(p2[2]+p3[2]+p4[2]+p5[2])/4;
  798. camer=Math.sqrt(Math.pow(avx,2)+Math.pow(avy,2)+Math.pow(fLength-avz,2));
  799. mid6=camer;
  800. mids=[mid1,mid2,mid3,mid4,mid5,mid6];
  801. mids.sort(Array.NUMERIC);
  802. for(k=0; k<3; k++){
  803. if(mids[k]==mid3 || mids[k]==mid4){
  804. index1=1;
  805. }
  806. }
  807. if(index1==1){
  808. spGraphHolder.setChildIndex(side1,numObj-1);
  809. side1.graphics.lineStyle(1,nAxesFront);
  810. }
  811. else {
  812. spGraphHolder.setChildIndex(side1,0);
  813. side1.graphics.lineStyle(1,nAxesBack);
  814. }
  815. for(k=0; k<3; k++){
  816. if(mids[k]==mid6 || mids[k]==mid4){
  817. index2=1;
  818. }
  819. }
  820. if(index2==1){
  821. spGraphHolder.setChildIndex(side2,numObj-1);
  822. side2.graphics.lineStyle(1,nAxesFront);
  823. }
  824. else {
  825. spGraphHolder.setChildIndex(side2,0);
  826. side2.graphics.lineStyle(1,nAxesBack);
  827. }
  828. for(k=0; k<3; k++){
  829. if(mids[k]==mid6 || mids[k]==mid1){
  830. index3=1;
  831. }
  832. }
  833. if(index3==1){
  834. spGraphHolder.setChildIndex(side3,numObj-1);
  835. side3.graphics.lineStyle(1,nAxesFront);
  836. }
  837. else {
  838. spGraphHolder.setChildIndex(side3,0);
  839. side3.graphics.lineStyle(1,nAxesBack);
  840. }
  841. for(k=0; k<3; k++){
  842. if(mids[k]==mid6 || mids[k]==mid2){
  843. index4=1;
  844. }
  845. }
  846. if(index4==1){
  847. spGraphHolder.setChildIndex(side4,numObj-1);
  848. side4.graphics.lineStyle(1,nAxesFront);
  849. }
  850. else {
  851. spGraphHolder.setChildIndex(side4,0);
  852. side4.graphics.lineStyle(1,nAxesBack);
  853. }
  854. for(k=0; k<3; k++){
  855. if(mids[k]==mid6 || mids[k]==mid3){
  856. index5=1;
  857. }
  858. }
  859. if(index5==1){
  860. spGraphHolder.setChildIndex(side5,numObj-1);
  861. side5.graphics.lineStyle(1,nAxesFront);
  862. }
  863. else {
  864. spGraphHolder.setChildIndex(side5,0);
  865. side5.graphics.lineStyle(1,nAxesBack);
  866. }
  867. for(k=0; k<3; k++){
  868. if(mids[k]==mid2 || mids[k]==mid3){
  869. index6=1;
  870. }
  871. }
  872. if(index6==1){
  873. spGraphHolder.setChildIndex(side6,numObj-1);
  874. side6.graphics.lineStyle(1,nAxesFront);
  875. }
  876. else {
  877. spGraphHolder.setChildIndex(side6,0);
  878. side6.graphics.lineStyle(1,nAxesBack);
  879. }
  880. for(k=0; k<3; k++){
  881. if(mids[k]==mid5 || mids[k]==mid3){
  882. index7=1;
  883. }
  884. }
  885. if(index7==1){
  886. spGraphHolder.setChildIndex(side7,numObj-1);
  887. side7.graphics.lineStyle(1,nAxesFront);
  888. }
  889. else {
  890. spGraphHolder.setChildIndex(side7,0);
  891. side7.graphics.lineStyle(1,nAxesBack);
  892. }
  893. for(k=0; k<3; k++){
  894. if(mids[k]==mid5 || mids[k]==mid4){
  895. index8=1;
  896. }
  897. }
  898. if(index8==1){
  899. spGraphHolder.setChildIndex(side8,numObj-1);
  900. side8.graphics.lineStyle(1,nAxesFront);
  901. }
  902. else {
  903. spGraphHolder.setChildIndex(side8,0);
  904. side8.graphics.lineStyle(1,nAxesBack);
  905. }
  906. for(k=0; k<3; k++){
  907. if(mids[k]==mid5 || mids[k]==mid1){
  908. index9=1;
  909. }
  910. }
  911. if(index9==1){
  912. spGraphHolder.setChildIndex(side9,numObj-1);
  913. side9.graphics.lineStyle(1,nAxesFront);
  914. }
  915. else {
  916. spGraphHolder.setChildIndex(side9,0);
  917. side9.graphics.lineStyle(1,nAxesBack);
  918. }
  919. for(k=0; k<3; k++){
  920. if(mids[k]==mid5 || mids[k]==mid2){
  921. index10=1;
  922. }
  923. }
  924. if(index10==1){
  925. spGraphHolder.setChildIndex(side10,numObj-1);
  926. side10.graphics.lineStyle(1,nAxesFront);
  927. }
  928. else {
  929. spGraphHolder.setChildIndex(side10,0);
  930. side10.graphics.lineStyle(1,nAxesBack);
  931. }
  932. for(k=0; k<3; k++){
  933. if(mids[k]==mid1 || mids[k]==mid4){
  934. index11=1;
  935. }
  936. }
  937. if(index11==1){
  938. spGraphHolder.setChildIndex(side11,numObj-1);
  939. side11.graphics.lineStyle(1,nAxesFront);
  940. }
  941. else {
  942. spGraphHolder.setChildIndex(side11,0);
  943. side11.graphics.lineStyle(1,nAxesBack);
  944. }
  945. for(k=0; k<3; k++){
  946. if(mids[k]==mid1 || mids[k]==mid2){
  947. index12=1;
  948. }
  949. }
  950. if(index12==1){
  951. spGraphHolder.setChildIndex(side12,numObj-1);
  952. side12.graphics.lineStyle(1,nAxesFront);
  953. }
  954. else {
  955. spGraphHolder.setChildIndex(side12,0);
  956. side12.graphics.lineStyle(1,nAxesBack);
  957. }
  958. if(spGraphHolder.getChildIndex(side1)<4){
  959. zLabel.visible=false;
  960. zmaxLabel.visible=false;
  961. zminLabel.visible=false;
  962. } else {
  963. zLabel.visible=true;
  964. zmaxLabel.visible=true;
  965. zminLabel.visible=true;
  966. }
  967. if(spGraphHolder.getChildIndex(side5)<4){
  968. yLabel.visible=false;
  969. ymaxLabel.visible=false;
  970. yminLabel.visible=false;
  971. } else {
  972. yLabel.visible=true;
  973. ymaxLabel.visible=true;
  974. yminLabel.visible=true;
  975. }
  976. if(spGraphHolder.getChildIndex(side2)<4){
  977. xLabel.visible=false;
  978. xmaxLabel.visible=false;
  979. xminLabel.visible=false;
  980. } else {
  981. xLabel.visible=true;
  982. xmaxLabel.visible=true;
  983. xminLabel.visible=true;
  984. }
  985. if(Math.abs(xmaxLabel.x)>=nBoardSize/2-xmaxLabel.width || Math.abs(xmaxLabel.y)>=nBoardSize/2-xmaxLabel.height){
  986. xmaxLabel.visible=false;
  987. }
  988. if(Math.abs(xminLabel.x)>=nBoardSize/2-xminLabel.width || Math.abs(xminLabel.y)>=nBoardSize/2-xminLabel.height){
  989. xminLabel.visible=false;
  990. }
  991. if(Math.abs(xLabel.x)>=nBoardSize/2-xLabel.width || Math.abs(xLabel.y)>=nBoardSize/2-xLabel.height){
  992. xLabel.visible=false;
  993. }
  994. if(Math.abs(ymaxLabel.x)>=nBoardSize/2-ymaxLabel.width || Math.abs(ymaxLabel.y)>=nBoardSize/2-ymaxLabel.height){
  995. ymaxLabel.visible=false;
  996. }
  997. if(Math.abs(yminLabel.x)>=nBoardSize/2-yminLabel.width || Math.abs(yminLabel.y)>=nBoardSize/2-yminLabel.height){
  998. yminLabel.visible=false;
  999. }
  1000. if(Math.abs(yLabel.x)>=nBoardSize/2-yLabel.width || Math.abs(yLabel.y)>=nBoardSize/2-yLabel.height){
  1001. yLabel.visible=false;
  1002. }
  1003. if(Math.abs(zmaxLabel.x)>=nBoardSize/2-zmaxLabel.width || Math.abs(zmaxLabel.y)>=nBoardSize/2-zmaxLabel.height){
  1004. zmaxLabel.visible=false;
  1005. }
  1006. if(Math.abs(zminLabel.x)>=nBoardSize/2-zminLabel.width || Math.abs(zminLabel.y)>=nBoardSize/2-zminLabel.height){
  1007. zminLabel.visible=false;
  1008. }
  1009. if(Math.abs(zLabel.x)>=nBoardSize/2-zLabel.width || Math.abs(zLabel.y)>=nBoardSize/2-zLabel.height){
  1010. zLabel.visible=false;
  1011. }
  1012. side1.graphics.moveTo(dp1[0], dp1[1]);
  1013. side1.graphics.lineTo(dp2[0], dp2[1]);
  1014. side2.graphics.moveTo(dp2[0], dp2[1]);
  1015. side2.graphics.lineTo(dp3[0], dp3[1]);
  1016. side3.graphics.moveTo(dp3[0], dp3[1]);
  1017. side3.graphics.lineTo(dp4[0], dp4[1]);
  1018. side4.graphics.moveTo(dp4[0], dp4[1]);
  1019. side4.graphics.lineTo(dp5[0], dp5[1]);
  1020. side5.graphics.moveTo(dp5[0], dp5[1]);
  1021. side5.graphics.lineTo(dp2[0], dp2[1]);
  1022. side6.graphics.moveTo(dp5[0], dp5[1]);
  1023. side6.graphics.lineTo(dp6[0], dp6[1]);
  1024. side7.graphics.moveTo(dp6[0], dp6[1]);
  1025. side7.graphics.lineTo(dp1[0], dp1[1]);
  1026. side8.graphics.moveTo(dp1[0], dp1[1]);
  1027. side8.graphics.lineTo(dp7[0], dp7[1]);
  1028. side9.graphics.moveTo(dp7[0], dp7[1]);
  1029. side9.graphics.lineTo(dp8[0], dp8[1]);
  1030. side10.graphics.moveTo(dp8[0], dp8[1]);
  1031. side10.graphics.lineTo(dp6[0], dp6[1]);
  1032. side11.graphics.moveTo(dp7[0], dp7[1]);
  1033. side11.graphics.lineTo(dp3[0], dp3[1]);
  1034. side12.graphics.moveTo(dp8[0], dp8[1]);
  1035. side12.graphics.lineTo(dp4[0], dp4[1]);
  1036. }
  1037. public function combineRGB(red:Number,green:Number,blue:Number):Number {
  1038. var RGB:Number;
  1039. if(red>255){red=255;}
  1040. if(green>255){green=255;}
  1041. if(blue>255){blue=255;}
  1042. if(red<0){red=0;}
  1043. if(green<0){green=0;}
  1044. if(blue<0){blue=0;}
  1045. RGB=(red<<16) | (green<<8) | blue;
  1046. return RGB;
  1047. }
  1048. public function destroy():void {
  1049. var i:int;
  1050. var countBoxes:int=spBoxHolder.numChildren;
  1051. var countGraphs:int=spGraphHolder.numChildren;
  1052. var countMain:int=this.numChildren;
  1053. var k:int;
  1054. patches.graphics.clear();
  1055. for(k=1;k<=12;k++){
  1056. this["side"+k].graphics.clear();
  1057. }
  1058. shBorder.graphics.clear();
  1059. shBack.graphics.clear();
  1060. spMask.graphics.clear();
  1061. spGraphHolder.mask=null;
  1062. legalArray=null;
  1063. pixArray=null;
  1064. aTilesColors=null;
  1065. for(k=1;k<=8;k++){
  1066. this["p"+k]=null;
  1067. }
  1068. for(i=0;i<countGraphs;i++){
  1069. spGraphHolder.removeChildAt(0);
  1070. }
  1071. for(i=0;i<countBoxes;i++){
  1072. spBoxHolder.removeChildAt(0);
  1073. }
  1074. for(i=0;i<countMain;i++){
  1075. this.removeChildAt(0);
  1076. }
  1077. for(k=1;k<=12;k++){
  1078. this["side"+k]=null;
  1079. }
  1080. spMask=null;
  1081. spBoxHolder=null;
  1082. spGraphHolder=null;
  1083. ErrorBox=null;
  1084. shBorder=null;
  1085. shBack=null;
  1086. patches=null;
  1087. WaitBox=null;
  1088. xLabel=null;
  1089. xminLabel=null;
  1090. xmaxLabel=null;
  1091. yLabel=null;
  1092. yminLabel=null;
  1093. ymaxLabel=null;
  1094. zLabel=null;
  1095. zminLabel=null;
  1096. zmaxLabel=null;
  1097. zRangeBox=null;
  1098. yRangeBox=null;
  1099. xRangeBox=null;
  1100. ErrorFormat=null;
  1101. LabelsFormat=null;
  1102. WaitFormat=null;
  1103. RangesFormat=null;
  1104. }
  1105. }
  1106. }