index.html 71 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>The Vault GUI</title>
  6. <link rel="stylesheet" href="{{ static_url("style.css") }}">
  7. <link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
  8. <!--[if lt IE 9]>
  9. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  10. <![endif]-->
  11. </head>
  12. <body>
  13. <div id="container"></div>
  14. <!--<div id="slider"></div>-->
  15. <div id="slider-tooltip"></div>
  16. <div id="obj-tooltip">Module: </div>
  17. <div id="val-tooltip">Value: </div>
  18. <!--<div id="stat-tooltip">Status: </div>-->
  19. <div class="window-item window-unitem" id="message">
  20. <div class="bar-header">
  21. <div class="bar-title noselect">Message Log</div>
  22. <div class="bar-dropdown noselect">^</div>
  23. <div class="bar-close noselect">&#215;</div>
  24. </div>
  25. <div class="bar-message">
  26. <div class="bar-wrapper" style="height:200px; overflow-y:scroll;">
  27. </div>
  28. </div>
  29. </div>
  30. <!--
  31. <div class="window-item window-unitem" id="settings">
  32. <div class="bar-header">
  33. <div class="bar-title noselect">Settings</div>
  34. <div class="bar-dropdown noselect">^</div>
  35. <div class="bar-close noselect">&#215;</div>
  36. </div>
  37. <div class="bar-settings">
  38. <div class="bar-wrapper">
  39. <div class="bar-setup">
  40. <input type="checkbox" id="mylabel">label<br>
  41. <!--
  42. <span class="bl bar-hl">Start time</span>
  43. <span class="br bar-info">
  44. <input id="start_time" class="jscolor" value="1472688000">
  45. </span>
  46. -->
  47. </div>
  48. <div class="bar-setup">
  49. <span class="bl bar-hl">End time</span>
  50. <span class="br bar-info">
  51. <input id="end_time" class="jscolor" value="1472774400">
  52. </span>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. -->
  58. <div class="window-item" id="orientation">
  59. <div class="bar-header">
  60. <div class="bar-title noselect">Orientation</div>
  61. <div class="bar-dropdown noselect">^</div>
  62. <div class="bar-close noselect">&#215;</div>
  63. </div>
  64. <div class="bar-orientation">
  65. <canvas class="bar-wrapper" id="compass" width="200" height="180"></canvas>
  66. </div>
  67. </div>
  68. <div id="window-tab">
  69. <div id="offMessage" class="noselect bar-pil">Message Log</div>
  70. <div id="offOrientation" class="noselect bar-pil">Orientation</div>
  71. <!--<div id="offSettings" class="noselect bar-pil">Settings</div>-->
  72. </div>
  73. <div class="window-cp" id="control-panel">
  74. <div class="bar-header">
  75. <div id="toggleGUI" class="bar-button noselect">Show/Hide GUI</div>
  76. <div id="showTabs" class="bar-button noselect">Windows</div>
  77. <!--<div id="runSimulation" class="bar-button noselect">Run</div>-->
  78. <!---
  79. <div id="testTrigger" class="bar-button noselect">Test Trigger</div>
  80. -->
  81. </div>
  82. </div>
  83. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  84. <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  85. <script src="{{ static_url("scripts.js") }}"></script>
  86. <script src="{{ static_url("three.min.js") }}"></script>
  87. <script src="{{ static_url("OrbitControls.js") }}"></script>
  88. <script>
  89. // Global variable
  90. var img = null,
  91. needle = null,
  92. ctx = null;
  93. function clearCanvas() {
  94. // clear canvas
  95. ctx.clearRect(0, 0, 200, 200);
  96. }
  97. function draw(degrees) {
  98. //console.log("Draw degree");
  99. //console.log(degrees);
  100. clearCanvas();
  101. // Draw the compass onto the canvas
  102. ctx.drawImage(img, 0, 0);
  103. // Save the current drawing state
  104. ctx.save();
  105. // Now move across and down half the
  106. ctx.translate(100, 100);
  107. // Rotate around this point
  108. ctx.rotate(degrees * (Math.PI / 180));
  109. // Draw the image back and up
  110. ctx.drawImage(needle, -100, -100);
  111. // Restore the previous drawing state
  112. ctx.restore();
  113. // Increment the angle of the needle by 5 degrees
  114. //degrees += 5;
  115. }
  116. function imgLoaded() {
  117. // Image loaded event complete. Start the timer
  118. draw(myvalue);
  119. //setInterval(draw, 100);
  120. }
  121. function init() {
  122. // Grab the compass element
  123. var canvas = document.getElementById('compass');
  124. // Canvas supported?
  125. if (canvas.getContext('2d')) {
  126. ctx = canvas.getContext('2d');
  127. // Load the needle image
  128. needle = new Image();
  129. needle.src = 'http://katrin.kit.edu/static/needle.png';
  130. // Load the compass image
  131. img = new Image();
  132. img.src = 'http://katrin.kit.edu/static/compass.png';
  133. img.onload = imgLoaded;
  134. } else {
  135. alert("Canvas not supported!");
  136. }
  137. }
  138. var myvalue = 0;
  139. init();
  140. </script>
  141. <script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/CSS3DRenderer.js"></script>
  142. <script>
  143. var camera, scene, renderer;
  144. var container;
  145. var mycontrol;
  146. var enableControls = true;
  147. var pv001;
  148. var data;
  149. var labelFlag;
  150. var raycaster = new THREE.Raycaster();
  151. var mouse = new THREE.Vector2();
  152. $("#mylabel").change(function() {
  153. if(this.checked) {
  154. labelFlag = true;
  155. } else {
  156. labelFlag = false;
  157. }
  158. });
  159. function onMouseMove( event ) {
  160. // calculate mouse position in normalized device coordinates
  161. // (-1 to +1) for both components
  162. mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
  163. mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
  164. }
  165. init();
  166. animate();
  167. window.addEventListener( 'mousemove', onMouseMove, false );
  168. function createLabel(name) {
  169. var text2 = document.createElement('div');
  170. text2.style.position = 'absolute';
  171. //text2.style.zIndex = 1; // if you still don't see the label, try uncommenting this
  172. text2.style.fontSize = "12px";
  173. text2.style.width = 100;
  174. text2.style.height = 100;
  175. text2.style.padding = "2px";
  176. text2.style.backgroundColor = '#303030';
  177. text2.style.color = '#fff';
  178. text2.innerHTML = name;
  179. //text2.style.top = 200 + 'px';
  180. //text2.style.left = 200 + 'px';
  181. text2.id = "text"+name;
  182. document.body.appendChild(text2);
  183. }
  184. function init() {
  185. setMessage("3D", "Initialization.");
  186. scene = new THREE.Scene();
  187. camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
  188. camera.position.set(0, 45, 100);
  189. camera.lookAt(scene.position);
  190. container = document.getElementById( 'container' );
  191. document.body.appendChild( container );
  192. renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
  193. //renderer = new THREE.CSS3DRenderer();
  194. renderer.setSize(window.innerWidth, window.innerHeight);
  195. renderer.setClearColor( 0xffffff, 0);
  196. container.appendChild(renderer.domElement);
  197. mycontrol = new THREE.OrbitControls( camera );
  198. var size = 40, step = 1;
  199. var geometry = new THREE.Geometry();
  200. var material = new THREE.LineBasicMaterial({color: 0xe3e3e3, linewidth: 1, fog:true});
  201. for ( var i = - size; i <= size; i += step ) {
  202. geometry.vertices.push(new THREE.Vector3( -size, -0.04, i ));
  203. geometry.vertices.push(new THREE.Vector3( size, -0.04, i ));
  204. geometry.vertices.push(new THREE.Vector3( i, -0.04, -size ));
  205. geometry.vertices.push(new THREE.Vector3( i, -0.04, size ));
  206. }
  207. var line = new THREE.LineSegments( geometry, material );
  208. scene.add(line);
  209. setMessage("3D", "Added grid plane.");
  210. /*
  211. var geometry = new THREE.BoxGeometry( 1, 1, 1 );
  212. var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
  213. var cube = new THREE.Mesh( geometry, material );
  214. */
  215. var light = new THREE.DirectionalLight( 0xffffff );
  216. light.position.set( 0, 1, 1 ).normalize();
  217. scene.add(light);
  218. setMessage("3D", "Added directional light.");
  219. pv001 = new THREE.Mesh(
  220. new THREE.CubeGeometry( 4, 0.1, 1 ),
  221. new THREE.MeshPhongMaterial( {
  222. color: 0xD3D3D3,
  223. specular: 0x050505,
  224. shininess: 100
  225. })
  226. );
  227. pv001.position.set(-18, 0.5, 29);
  228. pv001.rotateY( Math.PI / 3 );
  229. pv001.rotateX( Math.PI / 12);
  230. pv001.name = "2A_15_60e_001";
  231. scene.add(pv001);
  232. setMessage("3D", "Loaded PV001.");
  233. createLabel("001");
  234. pv002 = new THREE.Mesh(
  235. new THREE.CubeGeometry( 4, 0.1, 1 ),
  236. new THREE.MeshPhongMaterial( {
  237. color: 0xD3D3D3,
  238. specular: 0x050505,
  239. shininess: 100
  240. })
  241. );
  242. pv002.position.set(-14, 0.5, 30);
  243. pv002.rotateY( Math.PI / 3 );
  244. pv002.rotateX( Math.PI / 12);
  245. pv002.name = "5A_15_60e_002";
  246. scene.add(pv002);
  247. setMessage("3D", "Loaded PV002.");
  248. createLabel("002");
  249. pv003 = new THREE.Mesh(
  250. new THREE.CubeGeometry( 4, 0.1, 1 ),
  251. new THREE.MeshPhongMaterial( {
  252. color: 0xD3D3D3,
  253. specular: 0x050505,
  254. shininess: 100
  255. })
  256. );
  257. pv003.position.set(9.5, 0.5, 2);
  258. pv003.rotateY( Math.PI / 3 );
  259. pv003.rotateX( Math.PI / 6);
  260. pv003.name = "6A_30_60e_003";
  261. scene.add(pv003);
  262. setMessage("3D", "Loaded PV003.");
  263. createLabel("003");
  264. pv004 = new THREE.Mesh(
  265. new THREE.CubeGeometry( 4, 0.1, 1 ),
  266. new THREE.MeshPhongMaterial( {
  267. color: 0xD3D3D3,
  268. specular: 0x050505,
  269. shininess: 100
  270. })
  271. );
  272. pv004.position.set(6, 0.5, 1);
  273. pv004.rotateY( Math.PI / 3 );
  274. pv004.rotateX( Math.PI / 6);
  275. pv004.name = "1A_30_60e_004";
  276. scene.add(pv004);
  277. setMessage("3D", "Loaded PV004.");
  278. createLabel("004");
  279. pv005 = new THREE.Mesh(
  280. new THREE.CubeGeometry( 4, 0.1, 1 ),
  281. new THREE.MeshPhongMaterial( {
  282. color: 0xD3D3D3,
  283. specular: 0x050505,
  284. shininess: 100
  285. })
  286. );
  287. pv005.position.set(-8, 0.5, -3);
  288. pv005.rotateY( Math.PI / 3 );
  289. pv005.rotateX( Math.PI / 4);
  290. pv005.name = "6A_45_60e_005";
  291. scene.add(pv005);
  292. setMessage("3D", "Loaded PV005.");
  293. createLabel("005");
  294. pv006 = new THREE.Mesh(
  295. new THREE.CubeGeometry( 4, 0.1, 1 ),
  296. new THREE.MeshPhongMaterial( {
  297. color: 0xD3D3D3,
  298. specular: 0x050505,
  299. shininess: 100
  300. })
  301. );
  302. pv006.position.set(-4.5, 0.5, -2);
  303. pv006.rotateY( Math.PI / 3 );
  304. pv006.rotateX( Math.PI / 4);
  305. pv006.name = "1A_45_60e_006";
  306. scene.add(pv006);
  307. setMessage("3D", "Loaded PV006.");
  308. createLabel("006");
  309. pv007 = new THREE.Mesh(
  310. new THREE.CubeGeometry( 4, 0.1, 1 ),
  311. new THREE.MeshPhongMaterial( {
  312. color: 0xD3D3D3,
  313. specular: 0x050505,
  314. shininess: 100
  315. })
  316. );
  317. pv007.position.set(-5, 0.5, -16);
  318. pv007.rotateY( Math.PI / 3 );
  319. pv007.rotateX( Math.PI / 3);
  320. pv007.name = "6C_60_60e_007";
  321. scene.add(pv007);
  322. setMessage("3D", "Loaded PV007.");
  323. createLabel("007");
  324. pv008 = new THREE.Mesh(
  325. new THREE.CubeGeometry( 4, 0.1, 1 ),
  326. new THREE.MeshPhongMaterial( {
  327. color: 0xD3D3D3,
  328. specular: 0x050505,
  329. shininess: 100
  330. })
  331. );
  332. pv008.position.set(-7, 0.5, -9);
  333. pv008.rotateY( Math.PI / 3 );
  334. pv008.rotateX( Math.PI / 3);
  335. pv008.name = "1C_60_60e_008";
  336. scene.add(pv008);
  337. setMessage("3D", "Loaded PV008.");
  338. createLabel("008");
  339. pv009 = new THREE.Mesh(
  340. new THREE.CubeGeometry( 4, 0.1, 1 ),
  341. new THREE.MeshPhongMaterial( {
  342. color: 0xD3D3D3,
  343. specular: 0x050505,
  344. shininess: 100
  345. })
  346. );
  347. pv009.position.set(13, 0.5, 3);
  348. pv009.rotateY( Math.PI / 4 );
  349. pv009.rotateX( Math.PI / 12);
  350. pv009.name = "2A_15_45e_009";
  351. scene.add(pv009);
  352. setMessage("3D", "Loaded PV009.");
  353. createLabel("009");
  354. pv010 = new THREE.Mesh(
  355. new THREE.CubeGeometry( 4, 0.1, 1 ),
  356. new THREE.MeshPhongMaterial( {
  357. color: 0xD3D3D3,
  358. specular: 0x050505,
  359. shininess: 100
  360. })
  361. );
  362. pv010.position.set(18, 0.5, 4);
  363. pv010.rotateY( Math.PI / 4 );
  364. pv010.rotateX( Math.PI / 12);
  365. pv010.name = "1A_15_45e_010";
  366. scene.add(pv010);
  367. setMessage("3D", "Loaded PV010.");
  368. createLabel("010");
  369. pv011 = new THREE.Mesh(
  370. new THREE.CubeGeometry( 4, 0.1, 1 ),
  371. new THREE.MeshPhongMaterial( {
  372. color: 0xD3D3D3,
  373. specular: 0x050505,
  374. shininess: 100
  375. })
  376. );
  377. pv011.position.set(3.5, 0.5, -0.5);
  378. pv011.rotateY( Math.PI / 4 );
  379. pv011.rotateX( Math.PI / 12);
  380. pv011.name = "4A_15_45e_011";
  381. scene.add(pv011);
  382. setMessage("3D", "Loaded PV011.");
  383. createLabel("011");
  384. pv012 = new THREE.Mesh(
  385. new THREE.CubeGeometry( 4, 0.1, 1 ),
  386. new THREE.MeshPhongMaterial( {
  387. color: 0xD3D3D3,
  388. specular: 0x050505,
  389. shininess: 100
  390. })
  391. );
  392. pv012.position.set(17, 0.5, -1);
  393. pv012.rotateY( Math.PI / 4 );
  394. pv012.rotateX( Math.PI / 6);
  395. pv012.name = "6A_30_45e_012";
  396. scene.add(pv012);
  397. setMessage("3D", "Loaded PV012.");
  398. createLabel("012");
  399. pv013 = new THREE.Mesh(
  400. new THREE.CubeGeometry( 4, 0.1, 1 ),
  401. new THREE.MeshPhongMaterial( {
  402. color: 0xD3D3D3,
  403. specular: 0x050505,
  404. shininess: 100
  405. })
  406. );
  407. pv013.position.set(-2, 0.5, -1);
  408. pv013.rotateY( Math.PI / 4 );
  409. pv013.rotateX( Math.PI / 6);
  410. pv013.name = "2A_30_45e_013";
  411. scene.add(pv013);
  412. setMessage("3D", "Loaded PV013.");
  413. createLabel("013");
  414. pv014 = new THREE.Mesh(
  415. new THREE.CubeGeometry( 4, 0.1, 1 ),
  416. new THREE.MeshPhongMaterial( {
  417. color: 0xD3D3D3,
  418. specular: 0x050505,
  419. shininess: 100
  420. })
  421. );
  422. pv014.position.set(9, 0.5, -3);
  423. pv014.rotateY( Math.PI / 4 );
  424. pv014.rotateX( Math.PI / 4);
  425. pv014.name = "2A_45_45e_014";
  426. scene.add(pv014);
  427. setMessage("3D", "Loaded PV014.");
  428. createLabel("014");
  429. pv015 = new THREE.Mesh(
  430. new THREE.CubeGeometry( 4, 0.1, 1 ),
  431. new THREE.MeshPhongMaterial( {
  432. color: 0xD3D3D3,
  433. specular: 0x050505,
  434. shininess: 100
  435. })
  436. );
  437. pv015.position.set(12.5, 0.5, -2);
  438. pv015.rotateY( Math.PI / 4 );
  439. pv015.rotateX( Math.PI / 4);
  440. pv015.name = "4A_45_45e_015";
  441. scene.add(pv015);
  442. setMessage("3D", "Loaded PV015.");
  443. createLabel("015");
  444. pv016 = new THREE.Mesh(
  445. new THREE.CubeGeometry( 4, 0.1, 1 ),
  446. new THREE.MeshPhongMaterial( {
  447. color: 0xD3D3D3,
  448. specular: 0x050505,
  449. shininess: 100
  450. })
  451. );
  452. pv016.position.set(-1, 0.5, -22);
  453. pv016.rotateY( Math.PI / 4 );
  454. pv016.rotateX( Math.PI / 3);
  455. pv016.name = "6A_60_45e_016";
  456. scene.add(pv016);
  457. setMessage("3D", "Loaded PV016.");
  458. createLabel("016");
  459. pv017 = new THREE.Mesh(
  460. new THREE.CubeGeometry( 4, 0.1, 1 ),
  461. new THREE.MeshPhongMaterial( {
  462. color: 0xD3D3D3,
  463. specular: 0x050505,
  464. shininess: 100
  465. })
  466. );
  467. pv017.position.set(-2, 0.5, -26);
  468. pv017.rotateY( Math.PI / 4 );
  469. pv017.rotateX( Math.PI / 3);
  470. pv017.name = "2A_60_45e_017";
  471. scene.add(pv017);
  472. setMessage("3D", "Loaded PV017.");
  473. createLabel("017");
  474. pv018 = new THREE.Mesh(
  475. new THREE.CubeGeometry( 4, 0.1, 1 ),
  476. new THREE.MeshPhongMaterial( {
  477. color: 0xD3D3D3,
  478. specular: 0x050505,
  479. shininess: 100
  480. })
  481. );
  482. pv018.position.set(-8.5, 0.5, 23);
  483. pv018.rotateY( Math.PI / 6 );
  484. pv018.rotateX( Math.PI / 12);
  485. pv018.name = "3A_15_30e_018";
  486. scene.add(pv018);
  487. setMessage("3D", "Loaded PV018.");
  488. createLabel("018");
  489. pv019 = new THREE.Mesh(
  490. new THREE.CubeGeometry( 4, 0.1, 1 ),
  491. new THREE.MeshPhongMaterial( {
  492. color: 0xD3D3D3,
  493. specular: 0x050505,
  494. shininess: 100
  495. })
  496. );
  497. pv019.position.set(-10, 0.5, 26.5);
  498. pv019.rotateY( Math.PI / 6 );
  499. pv019.rotateX( Math.PI / 12);
  500. pv019.name = "1A_15_30e_019";
  501. scene.add(pv019);
  502. setMessage("3D", "Loaded PV019.");
  503. createLabel("019");
  504. pv020 = new THREE.Mesh(
  505. new THREE.CubeGeometry( 4, 0.1, 1 ),
  506. new THREE.MeshPhongMaterial( {
  507. color: 0xD3D3D3,
  508. specular: 0x050505,
  509. shininess: 100
  510. })
  511. );
  512. pv020.position.set(6, 0.5, 14);
  513. pv020.rotateY( Math.PI / 6 );
  514. pv020.rotateX( Math.PI / 12);
  515. pv020.name = "1B_15_30e_020";
  516. scene.add(pv020);
  517. setMessage("3D", "Loaded PV020.");
  518. createLabel("020");
  519. pv021 = new THREE.Mesh(
  520. new THREE.CubeGeometry( 4, 0.1, 1 ),
  521. new THREE.MeshPhongMaterial( {
  522. color: 0xD3D3D3,
  523. specular: 0x050505,
  524. shininess: 100
  525. })
  526. );
  527. pv021.position.set(12, 0.5, 19);
  528. pv021.rotateY( Math.PI / 6 );
  529. pv021.rotateX( Math.PI / 12);
  530. pv021.name = "1D_15_30e_021";
  531. scene.add(pv021);
  532. setMessage("3D", "Loaded PV021.");
  533. createLabel("021");
  534. pv022 = new THREE.Mesh(
  535. new THREE.CubeGeometry( 4, 0.1, 1 ),
  536. new THREE.MeshPhongMaterial( {
  537. color: 0xD3D3D3,
  538. specular: 0x050505,
  539. shininess: 100
  540. })
  541. );
  542. pv022.position.set(6, 0.5, 17);
  543. pv022.rotateY( Math.PI / 6 );
  544. pv022.rotateX( Math.PI / 12);
  545. pv022.name = "1C_15_30e_022";
  546. scene.add(pv022);
  547. setMessage("3D", "Loaded PV022.");
  548. createLabel("022");
  549. pv023 = new THREE.Mesh(
  550. new THREE.CubeGeometry( 4, 0.1, 1 ),
  551. new THREE.MeshPhongMaterial( {
  552. color: 0xD3D3D3,
  553. specular: 0x050505,
  554. shininess: 100
  555. })
  556. );
  557. pv023.position.set(9, 0.5, 18);
  558. pv023.rotateY( Math.PI / 6 );
  559. pv023.rotateX( Math.PI / 12);
  560. pv023.name = "5A_15_30e_023";
  561. scene.add(pv023);
  562. setMessage("3D", "Loaded PV023.");
  563. createLabel("023");
  564. pv024 = new THREE.Mesh(
  565. new THREE.CubeGeometry( 4, 0.1, 1 ),
  566. new THREE.MeshPhongMaterial( {
  567. color: 0xD3D3D3,
  568. specular: 0x050505,
  569. shininess: 100
  570. })
  571. );
  572. pv024.position.set(-16, 0.5, 24);
  573. pv024.rotateY( Math.PI / 6 );
  574. pv024.rotateX( Math.PI / 6);
  575. pv024.name = "6D_30_30e_024";
  576. scene.add(pv024);
  577. setMessage("3D", "Loaded PV024.");
  578. createLabel("024");
  579. pv025 = new THREE.Mesh(
  580. new THREE.CubeGeometry( 4, 0.1, 1 ),
  581. new THREE.MeshPhongMaterial( {
  582. color: 0xD3D3D3,
  583. specular: 0x050505,
  584. shininess: 100
  585. })
  586. );
  587. pv025.position.set(-15, 0.5, 26);
  588. pv025.rotateY( Math.PI / 6 );
  589. pv025.rotateX( Math.PI / 6);
  590. pv025.name = "3D_30_30e_025";
  591. scene.add(pv025);
  592. setMessage("3D", "Loaded PV025.");
  593. createLabel("025");
  594. pv026 = new THREE.Mesh(
  595. new THREE.CubeGeometry( 4, 0.1, 1 ),
  596. new THREE.MeshPhongMaterial( {
  597. color: 0xD3D3D3,
  598. specular: 0x050505,
  599. shininess: 100
  600. })
  601. );
  602. pv026.position.set(1.5, 0.5, -7.5);
  603. pv026.rotateY( Math.PI / 6 );
  604. pv026.rotateX( Math.PI / 4);
  605. pv026.name = "6A_45_30e_026";
  606. scene.add(pv026);
  607. setMessage("3D", "Loaded PV026.");
  608. createLabel("026");
  609. pv027 = new THREE.Mesh(
  610. new THREE.CubeGeometry( 4, 0.1, 1 ),
  611. new THREE.MeshPhongMaterial( {
  612. color: 0xD3D3D3,
  613. specular: 0x050505,
  614. shininess: 100
  615. })
  616. );
  617. pv027.position.set(-3, 0.5, -8.5);
  618. pv027.rotateY( Math.PI / 6 );
  619. pv027.rotateX( Math.PI / 4);
  620. pv027.name = "3A_45_30e_027";
  621. scene.add(pv027);
  622. setMessage("3D", "Loaded PV027.");
  623. createLabel("027");
  624. pv028 = new THREE.Mesh(
  625. new THREE.CubeGeometry( 4, 0.1, 1 ),
  626. new THREE.MeshPhongMaterial( {
  627. color: 0xD3D3D3,
  628. specular: 0x050505,
  629. shininess: 100
  630. })
  631. );
  632. pv028.position.set(3, 0.5, -4.5);
  633. pv028.rotateY( Math.PI / 6 );
  634. pv028.rotateX( Math.PI / 4);
  635. pv028.name = "1A_45_30e_028";
  636. scene.add(pv028);
  637. setMessage("3D", "Loaded PV028.");
  638. createLabel("028");
  639. pv029 = new THREE.Mesh(
  640. new THREE.CubeGeometry( 4, 0.1, 1 ),
  641. new THREE.MeshPhongMaterial( {
  642. color: 0xD3D3D3,
  643. specular: 0x050505,
  644. shininess: 100
  645. })
  646. );
  647. pv029.position.set(3, 0.5, -25);
  648. pv029.rotateY( Math.PI / 6 );
  649. pv029.rotateX( Math.PI / 3);
  650. pv029.name = "6A_60_30e_029";
  651. scene.add(pv029);
  652. setMessage("3D", "Loaded PV029.");
  653. createLabel("029");
  654. pv030 = new THREE.Mesh(
  655. new THREE.CubeGeometry( 4, 0.1, 1 ),
  656. new THREE.MeshPhongMaterial( {
  657. color: 0xD3D3D3,
  658. specular: 0x050505,
  659. shininess: 100
  660. })
  661. );
  662. pv030.position.set(1, 0.5, -13);
  663. pv030.rotateY( Math.PI / 6 );
  664. pv030.rotateX( Math.PI / 3);
  665. pv030.name = "3A_60_30e_030";
  666. scene.add(pv030);
  667. setMessage("3D", "Loaded PV030.");
  668. createLabel("030");
  669. pv031 = new THREE.Mesh(
  670. new THREE.CubeGeometry( 4, 0.1, 1 ),
  671. new THREE.MeshPhongMaterial( {
  672. color: 0xD3D3D3,
  673. specular: 0x050505,
  674. shininess: 100
  675. })
  676. );
  677. pv031.position.set(0, 0.5, -16);
  678. pv031.rotateY( Math.PI / 6 );
  679. pv031.rotateX( Math.PI / 3);
  680. pv031.name = "1A_60_30e_031";
  681. scene.add(pv031);
  682. setMessage("3D", "Loaded PV031.");
  683. createLabel("031");
  684. pv032 = new THREE.Mesh(
  685. new THREE.CubeGeometry( 4, 0.1, 1 ),
  686. new THREE.MeshPhongMaterial( {
  687. color: 0xD3D3D3,
  688. specular: 0x050505,
  689. shininess: 100
  690. })
  691. );
  692. pv032.position.set(7, 0.5, 10.5);
  693. pv032.rotateY( Math.PI / 12 );
  694. pv032.rotateX( Math.PI / 12);
  695. pv032.name = "3A_15_15e_032";
  696. scene.add(pv032);
  697. setMessage("3D", "Loaded PV032.");
  698. createLabel("032");
  699. pv033 = new THREE.Mesh(
  700. new THREE.CubeGeometry( 4, 0.1, 1 ),
  701. new THREE.MeshPhongMaterial( {
  702. color: 0xD3D3D3,
  703. specular: 0x050505,
  704. shininess: 100
  705. })
  706. );
  707. pv033.position.set(-10, 0.5, 29.5);
  708. pv033.rotateY( Math.PI / 12 );
  709. pv033.rotateX( Math.PI / 12);
  710. pv033.name = "1B_15_15e_033";
  711. scene.add(pv033);
  712. setMessage("3D", "Loaded PV033.");
  713. createLabel("033");
  714. pv034 = new THREE.Mesh(
  715. new THREE.CubeGeometry( 4, 0.1, 1 ),
  716. new THREE.MeshPhongMaterial( {
  717. color: 0xD3D3D3,
  718. specular: 0x050505,
  719. shininess: 100
  720. })
  721. );
  722. pv034.position.set(-11, 0.5, 31.5);
  723. pv034.rotateY( Math.PI / 12 );
  724. pv034.rotateX( Math.PI / 12);
  725. pv034.name = "4B_15_15e_034";
  726. scene.add(pv034);
  727. setMessage("3D", "Loaded PV034.");
  728. createLabel("034");
  729. pv035 = new THREE.Mesh(
  730. new THREE.CubeGeometry( 4, 0.1, 1 ),
  731. new THREE.MeshPhongMaterial( {
  732. color: 0xD3D3D3,
  733. specular: 0x050505,
  734. shininess: 100
  735. })
  736. );
  737. pv035.position.set(-13, 0.5, 19);
  738. pv035.rotateY( Math.PI / 12 );
  739. pv035.rotateX( Math.PI / 6);
  740. pv035.name = "3A_30_15e_035";
  741. scene.add(pv035);
  742. setMessage("3D", "Loaded PV035.");
  743. createLabel("035");
  744. pv036 = new THREE.Mesh(
  745. new THREE.CubeGeometry( 4, 0.1, 1 ),
  746. new THREE.MeshPhongMaterial( {
  747. color: 0xD3D3D3,
  748. specular: 0x050505,
  749. shininess: 100
  750. })
  751. );
  752. pv036.position.set(-13, 0.5, 21);
  753. pv036.rotateY( Math.PI / 12 );
  754. pv036.rotateX( Math.PI / 6);
  755. pv036.name = "1A_30_15e_036";
  756. scene.add(pv036);
  757. setMessage("3D", "Loaded PV036.");
  758. createLabel("036");
  759. pv037 = new THREE.Mesh(
  760. new THREE.CubeGeometry( 4, 0.1, 1 ),
  761. new THREE.MeshPhongMaterial( {
  762. color: 0xD3D3D3,
  763. specular: 0x050505,
  764. shininess: 100
  765. })
  766. );
  767. pv037.position.set(-7, 0.5, 20);
  768. pv037.rotateY( Math.PI / 12 );
  769. pv037.rotateX( Math.PI / 6);
  770. pv037.name = "5A_30_15e_037";
  771. scene.add(pv037);
  772. setMessage("3D", "Loaded PV037.");
  773. createLabel("037");
  774. pv038 = new THREE.Mesh(
  775. new THREE.CubeGeometry( 4, 0.1, 1 ),
  776. new THREE.MeshPhongMaterial( {
  777. color: 0xD3D3D3,
  778. specular: 0x050505,
  779. shininess: 100
  780. })
  781. );
  782. pv038.position.set(8, 0.5, -14);
  783. pv038.rotateY( Math.PI / 12 );
  784. pv038.rotateX( Math.PI / 4);
  785. pv038.name = "3A_45_15e_038";
  786. scene.add(pv038);
  787. setMessage("3D", "Loaded PV038.");
  788. createLabel("038");
  789. pv039 = new THREE.Mesh(
  790. new THREE.CubeGeometry( 4, 0.1, 1 ),
  791. new THREE.MeshPhongMaterial( {
  792. color: 0xD3D3D3,
  793. specular: 0x050505,
  794. shininess: 100
  795. })
  796. );
  797. pv039.position.set(8, 0.5, -10);
  798. pv039.rotateY( Math.PI / 12 );
  799. pv039.rotateX( Math.PI / 4);
  800. pv039.name = "1A_45_15e_039";
  801. scene.add(pv039);
  802. setMessage("3D", "Loaded PV039.");
  803. createLabel("039");
  804. pv040 = new THREE.Mesh(
  805. new THREE.CubeGeometry( 4, 0.1, 1 ),
  806. new THREE.MeshPhongMaterial( {
  807. color: 0xD3D3D3,
  808. specular: 0x050505,
  809. shininess: 100
  810. })
  811. );
  812. pv040.position.set(9, 0.5, -6.5);
  813. pv040.rotateY( Math.PI / 12 );
  814. pv040.rotateX( Math.PI / 4);
  815. pv040.name = "4A_45_15e_040";
  816. scene.add(pv040);
  817. setMessage("3D", "Loaded PV040.");
  818. createLabel("040");
  819. pv041 = new THREE.Mesh(
  820. new THREE.CubeGeometry( 4, 0.1, 1 ),
  821. new THREE.MeshPhongMaterial( {
  822. color: 0xD3D3D3,
  823. specular: 0x050505,
  824. shininess: 100
  825. })
  826. );
  827. pv041.position.set(4, 0.5, -20.5);
  828. pv041.rotateY( Math.PI / 12 );
  829. pv041.rotateX( Math.PI / 3);
  830. pv041.name = "6A_60_15e_041";
  831. scene.add(pv041);
  832. setMessage("3D", "Loaded PV041.");
  833. createLabel("041");
  834. pv042 = new THREE.Mesh(
  835. new THREE.CubeGeometry( 4, 0.1, 1 ),
  836. new THREE.MeshPhongMaterial( {
  837. color: 0xD3D3D3,
  838. specular: 0x050505,
  839. shininess: 100
  840. })
  841. );
  842. pv042.position.set(9, 0.5, -22);
  843. pv042.rotateY( Math.PI / 12 );
  844. pv042.rotateX( Math.PI / 3);
  845. pv042.name = "3A_60_15e_042";
  846. scene.add(pv042);
  847. setMessage("3D", "Loaded PV042.");
  848. createLabel("042");
  849. pv043 = new THREE.Mesh(
  850. new THREE.CubeGeometry( 4, 0.1, 1 ),
  851. new THREE.MeshPhongMaterial( {
  852. color: 0xD3D3D3,
  853. specular: 0x050505,
  854. shininess: 100
  855. })
  856. );
  857. pv043.position.set(8, 0.5, -17.5);
  858. pv043.rotateY( Math.PI / 12 );
  859. pv043.rotateX( Math.PI / 3);
  860. pv043.name = "1A_60_15e_043";
  861. scene.add(pv043);
  862. setMessage("3D", "Loaded PV043.");
  863. createLabel("043");
  864. pv044 = new THREE.Mesh(
  865. new THREE.CubeGeometry( 4, 0.1, 1 ),
  866. new THREE.MeshPhongMaterial( {
  867. color: 0xD3D3D3,
  868. specular: 0x050505,
  869. shininess: 100
  870. })
  871. );
  872. pv044.position.set(2, 0.5, 33);
  873. pv044.rotateY( Math.PI );
  874. pv044.rotateX( 11 * Math.PI / 12);
  875. pv044.name = "3B_15_00s_044";
  876. scene.add(pv044);
  877. setMessage("3D", "Loaded PV044.");
  878. createLabel("044");
  879. pv045 = new THREE.Mesh(
  880. new THREE.CubeGeometry( 4, 0.1, 1 ),
  881. new THREE.MeshPhongMaterial( {
  882. color: 0xD3D3D3,
  883. specular: 0x050505,
  884. shininess: 100
  885. })
  886. );
  887. pv045.position.set(5, 0.5, 34.5);
  888. pv045.rotateY( Math.PI );
  889. pv045.rotateX( 11 * Math.PI / 12);
  890. pv045.name = "4B_15_00s_045";
  891. scene.add(pv045);
  892. setMessage("3D", "Loaded PV045.");
  893. createLabel("045");
  894. pv046 = new THREE.Mesh(
  895. new THREE.CubeGeometry( 4, 0.1, 1 ),
  896. new THREE.MeshPhongMaterial( {
  897. color: 0xD3D3D3,
  898. specular: 0x050505,
  899. shininess: 100
  900. })
  901. );
  902. pv046.position.set(-1, 0.5, 35);
  903. pv046.rotateY( Math.PI );
  904. pv046.rotateX( 89 * Math.PI / 90);
  905. pv046.name = "6A_02_00s_046";
  906. scene.add(pv046);
  907. setMessage("3D", "Loaded PV046.");
  908. createLabel("046");
  909. pv047 = new THREE.Mesh(
  910. new THREE.CubeGeometry( 4, 0.1, 1 ),
  911. new THREE.MeshPhongMaterial( {
  912. color: 0xD3D3D3,
  913. specular: 0x050505,
  914. shininess: 100
  915. })
  916. );
  917. pv047.position.set(3, 0.5, 36);
  918. pv047.rotateY( Math.PI );
  919. pv047.rotateX( 89 * Math.PI / 90);
  920. pv047.name = "2A_02_00s_047";
  921. scene.add(pv047);
  922. setMessage("3D", "Loaded PV047.");
  923. createLabel("047");
  924. pv048 = new THREE.Mesh(
  925. new THREE.CubeGeometry( 4, 0.1, 1 ),
  926. new THREE.MeshPhongMaterial( {
  927. color: 0xD3D3D3,
  928. specular: 0x050505,
  929. shininess: 100
  930. })
  931. );
  932. pv048.position.set(6, 0.5, 37);
  933. pv048.rotateY( Math.PI );
  934. pv048.rotateX( 89 * Math.PI / 90);
  935. pv048.name = "1A_02_00s_048";
  936. scene.add(pv048);
  937. setMessage("3D", "Loaded PV048.");
  938. createLabel("048");
  939. pv049 = new THREE.Mesh(
  940. new THREE.CubeGeometry( 4, 0.1, 1 ),
  941. new THREE.MeshPhongMaterial( {
  942. color: 0xD3D3D3,
  943. specular: 0x050505,
  944. shininess: 100
  945. })
  946. );
  947. pv049.position.set(-11, 0.5, 14);
  948. pv049.rotateY( Math.PI );
  949. pv049.rotateX( 5 * Math.PI / 6);
  950. pv049.name = "3C_30_00s_049";
  951. scene.add(pv049);
  952. setMessage("3D", "Loaded PV049.");
  953. createLabel("049");
  954. pv050 = new THREE.Mesh(
  955. new THREE.CubeGeometry( 4, 0.1, 1 ),
  956. new THREE.MeshPhongMaterial( {
  957. color: 0xD3D3D3,
  958. specular: 0x050505,
  959. shininess: 100
  960. })
  961. );
  962. pv050.position.set(-10.5, 0.5, 11);
  963. pv050.rotateY( Math.PI );
  964. pv050.rotateX( 5 * Math.PI / 6);
  965. pv050.name = "1A_30_00s_050";
  966. scene.add(pv050);
  967. setMessage("3D", "Loaded PV050.");
  968. createLabel("050");
  969. pv051 = new THREE.Mesh(
  970. new THREE.CubeGeometry( 4, 0.1, 1 ),
  971. new THREE.MeshPhongMaterial( {
  972. color: 0xD3D3D3,
  973. specular: 0x050505,
  974. shininess: 100
  975. })
  976. );
  977. pv051.position.set(8, 0.5, 7.5);
  978. pv051.rotateY( Math.PI );
  979. pv051.rotateX( 5 * Math.PI / 6);
  980. pv051.name = "1B_30_00s_051";
  981. scene.add(pv051);
  982. setMessage("3D", "Loaded PV051.");
  983. createLabel("051");
  984. pv052 = new THREE.Mesh(
  985. new THREE.CubeGeometry( 4, 0.1, 1 ),
  986. new THREE.MeshPhongMaterial( {
  987. color: 0xD3D3D3,
  988. specular: 0x050505,
  989. shininess: 100
  990. })
  991. );
  992. pv052.position.set(-10, 0.5, 8);
  993. pv052.rotateY( Math.PI );
  994. pv052.rotateX( 5 * Math.PI / 6);
  995. pv052.name = "1D_30_00s_052";
  996. scene.add(pv052);
  997. setMessage("3D", "Loaded PV052.");
  998. createLabel("052");
  999. pv053 = new THREE.Mesh(
  1000. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1001. new THREE.MeshPhongMaterial( {
  1002. color: 0xD3D3D3,
  1003. specular: 0x050505,
  1004. shininess: 100
  1005. })
  1006. );
  1007. pv053.position.set(3, 0.5, 25);
  1008. pv053.rotateY( Math.PI );
  1009. pv053.rotateX( 5 * Math.PI / 6);
  1010. pv053.name = "1C_30_00s_053";
  1011. scene.add(pv053);
  1012. setMessage("3D", "Loaded PV053.");
  1013. createLabel("053");
  1014. pv054 = new THREE.Mesh(
  1015. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1016. new THREE.MeshPhongMaterial( {
  1017. color: 0xD3D3D3,
  1018. specular: 0x050505,
  1019. shininess: 100
  1020. })
  1021. );
  1022. pv054.position.set(2.5, 0.5, 28);
  1023. pv054.rotateY( Math.PI );
  1024. pv054.rotateX( 5 * Math.PI / 6);
  1025. pv054.name = "4D_30_00s_054";
  1026. scene.add(pv054);
  1027. setMessage("3D", "Loaded PV054.");
  1028. createLabel("054");
  1029. pv055 = new THREE.Mesh(
  1030. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1031. new THREE.MeshPhongMaterial( {
  1032. color: 0xD3D3D3,
  1033. specular: 0x050505,
  1034. shininess: 100
  1035. })
  1036. );
  1037. pv055.position.set(15, 0.5, -7);
  1038. pv055.rotateY( Math.PI );
  1039. pv055.rotateX( 3 * Math.PI / 4);
  1040. pv055.name = "3A_45_00s_055";
  1041. scene.add(pv055);
  1042. setMessage("3D", "Loaded PV055.");
  1043. createLabel("055");
  1044. pv056 = new THREE.Mesh(
  1045. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1046. new THREE.MeshPhongMaterial( {
  1047. color: 0xD3D3D3,
  1048. specular: 0x050505,
  1049. shininess: 100
  1050. })
  1051. );
  1052. pv056.position.set(15, 0.5, -11);
  1053. pv056.rotateY( Math.PI );
  1054. pv056.rotateX( 3 * Math.PI / 4);
  1055. pv056.name = "4A_45_00s_056";
  1056. scene.add(pv056);
  1057. setMessage("3D", "Loaded PV056.");
  1058. createLabel("056");
  1059. pv057 = new THREE.Mesh(
  1060. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1061. new THREE.MeshPhongMaterial( {
  1062. color: 0xD3D3D3,
  1063. specular: 0x050505,
  1064. shininess: 100
  1065. })
  1066. );
  1067. pv057.position.set(9, 0.5, -27.5);
  1068. pv057.rotateY( Math.PI );
  1069. pv057.rotateX( 2 * Math.PI / 3);
  1070. pv057.name = "6A_60_00s_057";
  1071. scene.add(pv057);
  1072. setMessage("3D", "Loaded PV057.");
  1073. createLabel("057");
  1074. pv058 = new THREE.Mesh(
  1075. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1076. new THREE.MeshPhongMaterial( {
  1077. color: 0xD3D3D3,
  1078. specular: 0x050505,
  1079. shininess: 100
  1080. })
  1081. );
  1082. pv058.position.set(0, 0.5, -30);
  1083. pv058.rotateY( Math.PI );
  1084. pv058.rotateX( 2 * Math.PI / 3);
  1085. pv058.name = "3A_60_00s_058";
  1086. scene.add(pv058);
  1087. setMessage("3D", "Loaded PV058.");
  1088. createLabel("058");
  1089. pv059 = new THREE.Mesh(
  1090. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1091. new THREE.MeshPhongMaterial( {
  1092. color: 0xD3D3D3,
  1093. specular: 0x050505,
  1094. shininess: 100
  1095. })
  1096. );
  1097. pv059.position.set(8, 0.5, 25.5);
  1098. pv059.rotateY( 11 * Math.PI / 12 );
  1099. pv059.rotateX( 11 * Math.PI / 12);
  1100. pv059.name = "3B_15_15w_059";
  1101. scene.add(pv059);
  1102. setMessage("3D", "Loaded PV059.");
  1103. createLabel("059");
  1104. pv060 = new THREE.Mesh(
  1105. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1106. new THREE.MeshPhongMaterial( {
  1107. color: 0xD3D3D3,
  1108. specular: 0x050505,
  1109. shininess: 100
  1110. })
  1111. );
  1112. pv060.position.set(2.5, 0.5, 31);
  1113. pv060.rotateY( 11 * Math.PI / 12 );
  1114. pv060.rotateX( 11 * Math.PI / 12);
  1115. pv060.name = "1B_15_15w_060";
  1116. scene.add(pv060);
  1117. setMessage("3D", "Loaded PV060.");
  1118. createLabel("060");
  1119. pv061 = new THREE.Mesh(
  1120. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1121. new THREE.MeshPhongMaterial( {
  1122. color: 0xD3D3D3,
  1123. specular: 0x050505,
  1124. shininess: 100
  1125. })
  1126. );
  1127. pv061.position.set(9.5, 0.5, 35.5);
  1128. pv061.rotateY( 11 * Math.PI / 12 );
  1129. pv061.rotateX( 11 * Math.PI / 12);
  1130. pv061.name = "4B_15_15w_061";
  1131. scene.add(pv061);
  1132. setMessage("3D", "Loaded PV061.");
  1133. createLabel("061");
  1134. pv062 = new THREE.Mesh(
  1135. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1136. new THREE.MeshPhongMaterial( {
  1137. color: 0xD3D3D3,
  1138. specular: 0x050505,
  1139. shininess: 100
  1140. })
  1141. );
  1142. pv062.position.set(8, 0.5, 22.15);
  1143. pv062.rotateY( 11 * Math.PI / 12 );
  1144. pv062.rotateX( 5 * Math.PI / 6);
  1145. pv062.name = "3A_30_15w_062";
  1146. scene.add(pv062);
  1147. setMessage("3D", "Loaded PV062.");
  1148. createLabel("062");
  1149. pv063 = new THREE.Mesh(
  1150. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1151. new THREE.MeshPhongMaterial( {
  1152. color: 0xD3D3D3,
  1153. specular: 0x050505,
  1154. shininess: 100
  1155. })
  1156. );
  1157. pv063.position.set(12.5, 0.5, 23.25);
  1158. pv063.rotateY( 11 * Math.PI / 12 );
  1159. pv063.rotateX( 5 * Math.PI / 6);
  1160. pv063.name = "1A_30_15w_063";
  1161. scene.add(pv063);
  1162. setMessage("3D", "Loaded PV063.");
  1163. createLabel("063");
  1164. pv064 = new THREE.Mesh(
  1165. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1166. new THREE.MeshPhongMaterial( {
  1167. color: 0xD3D3D3,
  1168. specular: 0x050505,
  1169. shininess: 100
  1170. })
  1171. );
  1172. pv064.position.set(3.5, 0.5, 21);
  1173. pv064.rotateY( 11 * Math.PI / 12 );
  1174. pv064.rotateX( 5 * Math.PI / 6);
  1175. pv064.name = "5A_30_15w_064";
  1176. scene.add(pv064);
  1177. setMessage("3D", "Loaded PV064.");
  1178. createLabel("064");
  1179. pv065 = new THREE.Mesh(
  1180. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1181. new THREE.MeshPhongMaterial( {
  1182. color: 0xD3D3D3,
  1183. specular: 0x050505,
  1184. shininess: 100
  1185. })
  1186. );
  1187. pv065.position.set(16, 0.5, -19);
  1188. pv065.rotateY( 11 * Math.PI / 12 );
  1189. pv065.rotateX( 3 * Math.PI / 4);
  1190. pv065.name = "3A_45_15w_065";
  1191. scene.add(pv065);
  1192. setMessage("3D", "Loaded PV065.");
  1193. createLabel("065");
  1194. pv066 = new THREE.Mesh(
  1195. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1196. new THREE.MeshPhongMaterial( {
  1197. color: 0xD3D3D3,
  1198. specular: 0x050505,
  1199. shininess: 100
  1200. })
  1201. );
  1202. pv066.position.set(17, 0.5, -22);
  1203. pv066.rotateY( 11 * Math.PI / 12 );
  1204. pv066.rotateX( 3 * Math.PI / 4);
  1205. pv066.name = "1A_45_15w_066";
  1206. scene.add(pv066);
  1207. setMessage("3D", "Loaded PV066.");
  1208. createLabel("066");
  1209. pv067 = new THREE.Mesh(
  1210. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1211. new THREE.MeshPhongMaterial( {
  1212. color: 0xD3D3D3,
  1213. specular: 0x050505,
  1214. shininess: 100
  1215. })
  1216. );
  1217. pv067.position.set(15, 0.5, -15);
  1218. pv067.rotateY( 11 * Math.PI / 12 );
  1219. pv067.rotateX( 3 * Math.PI / 4);
  1220. pv067.name = "4A_45_15w_067";
  1221. scene.add(pv067);
  1222. setMessage("3D", "Loaded PV067.");
  1223. createLabel("067");
  1224. pv068 = new THREE.Mesh(
  1225. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1226. new THREE.MeshPhongMaterial( {
  1227. color: 0xD3D3D3,
  1228. specular: 0x050505,
  1229. shininess: 100
  1230. })
  1231. );
  1232. pv068.position.set(15, 0.5, -27);
  1233. pv068.rotateY( 11 * Math.PI / 12 );
  1234. pv068.rotateX( 2 * Math.PI / 3);
  1235. pv068.name = "6A_60_15w_068";
  1236. scene.add(pv068);
  1237. setMessage("3D", "Loaded PV068.");
  1238. createLabel("068");
  1239. pv069 = new THREE.Mesh(
  1240. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1241. new THREE.MeshPhongMaterial( {
  1242. color: 0xD3D3D3,
  1243. specular: 0x050505,
  1244. shininess: 100
  1245. })
  1246. );
  1247. pv069.position.set(20, 0.5, -25.75);
  1248. pv069.rotateY( 11 * Math.PI / 12 );
  1249. pv069.rotateX( 2 * Math.PI / 3);
  1250. pv069.name = "3A_60_15w_069";
  1251. scene.add(pv069);
  1252. setMessage("3D", "Loaded PV069.");
  1253. createLabel("069");
  1254. pv070 = new THREE.Mesh(
  1255. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1256. new THREE.MeshPhongMaterial( {
  1257. color: 0xD3D3D3,
  1258. specular: 0x050505,
  1259. shininess: 100
  1260. })
  1261. );
  1262. pv070.position.set(25, 0.5, -24.5);
  1263. pv070.rotateY( 11 * Math.PI / 12 );
  1264. pv070.rotateX( 2 * Math.PI / 3);
  1265. pv070.name = "1A_60_15w_070";
  1266. scene.add(pv070);
  1267. setMessage("3D", "Loaded PV070.");
  1268. createLabel("070");
  1269. pv071 = new THREE.Mesh(
  1270. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1271. new THREE.MeshPhongMaterial( {
  1272. color: 0xD3D3D3,
  1273. specular: 0x050505,
  1274. shininess: 100
  1275. })
  1276. );
  1277. pv071.position.set(17, 0.5, 25);
  1278. pv071.rotateY( 11 * Math.PI / 6 );
  1279. pv071.rotateX( Math.PI / 12);
  1280. pv071.name = "3A_15_30w_071";
  1281. scene.add(pv071);
  1282. setMessage("3D", "Loaded PV071.");
  1283. createLabel("071");
  1284. pv072 = new THREE.Mesh(
  1285. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1286. new THREE.MeshPhongMaterial( {
  1287. color: 0xD3D3D3,
  1288. specular: 0x050505,
  1289. shininess: 100
  1290. })
  1291. );
  1292. pv072.position.set(6.75, 0.5, 32.5);
  1293. pv072.rotateY( 11 * Math.PI / 6 );
  1294. pv072.rotateX( Math.PI / 12);
  1295. pv072.name = "1A_15_30w_072";
  1296. scene.add(pv072);
  1297. setMessage("3D", "Loaded PV072.");
  1298. createLabel("072");
  1299. pv073 = new THREE.Mesh(
  1300. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1301. new THREE.MeshPhongMaterial( {
  1302. color: 0xD3D3D3,
  1303. specular: 0x050505,
  1304. shininess: 100
  1305. })
  1306. );
  1307. pv073.position.set(10.5, 0.5, 38.25);
  1308. pv073.rotateY( 11 * Math.PI / 6 );
  1309. pv073.rotateX( Math.PI / 12);
  1310. pv073.name = "1B_15_30w_073";
  1311. scene.add(pv073);
  1312. setMessage("3D", "Loaded PV073.");
  1313. createLabel("073");
  1314. pv074 = new THREE.Mesh(
  1315. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1316. new THREE.MeshPhongMaterial( {
  1317. color: 0xD3D3D3,
  1318. specular: 0x050505,
  1319. shininess: 100
  1320. })
  1321. );
  1322. pv074.position.set(12.5, 0.5, 27.5);
  1323. pv074.rotateY( 11 * Math.PI / 6 );
  1324. pv074.rotateX( Math.PI / 12);
  1325. pv074.name = "1D_15_30w_074";
  1326. scene.add(pv074);
  1327. setMessage("3D", "Loaded PV074.");
  1328. createLabel("074");
  1329. pv075 = new THREE.Mesh(
  1330. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1331. new THREE.MeshPhongMaterial( {
  1332. color: 0xD3D3D3,
  1333. specular: 0x050505,
  1334. shininess: 100
  1335. })
  1336. );
  1337. pv075.position.set(7.5, 0.5, 29.5);
  1338. pv075.rotateY( 11 * Math.PI / 6 );
  1339. pv075.rotateX( Math.PI / 12);
  1340. pv075.name = "1C_15_30w_075";
  1341. scene.add(pv075);
  1342. createLabel("075");
  1343. pv076 = new THREE.Mesh(
  1344. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1345. new THREE.MeshPhongMaterial( {
  1346. color: 0xD3D3D3,
  1347. specular: 0x050505,
  1348. shininess: 100
  1349. })
  1350. );
  1351. pv076.position.set(11, 0.5, 33.5);
  1352. pv076.rotateY( 11 * Math.PI / 6 );
  1353. pv076.rotateX( Math.PI / 12);
  1354. pv076.name = "5D_15_30w_076";
  1355. scene.add(pv076);
  1356. setMessage("3D", "Loaded PV076.");
  1357. createLabel("076");
  1358. pv077 = new THREE.Mesh(
  1359. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1360. new THREE.MeshPhongMaterial( {
  1361. color: 0xD3D3D3,
  1362. specular: 0x050505,
  1363. shininess: 100
  1364. })
  1365. );
  1366. pv077.position.set(13, 0.5, 12);
  1367. pv077.rotateY( 11 * Math.PI / 6 );
  1368. pv077.rotateX( Math.PI / 6);
  1369. pv077.name = "6D_30_30w_077";
  1370. scene.add(pv077);
  1371. setMessage("3D", "Loaded PV077.");
  1372. createLabel("077");
  1373. pv078 = new THREE.Mesh(
  1374. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1375. new THREE.MeshPhongMaterial( {
  1376. color: 0xD3D3D3,
  1377. specular: 0x050505,
  1378. shininess: 100
  1379. })
  1380. );
  1381. pv078.position.set(12, 0.5, 15);
  1382. pv078.rotateY( 11 * Math.PI / 6 );
  1383. pv078.rotateX( Math.PI / 6);
  1384. pv078.name = "3D_30_30w_078";
  1385. scene.add(pv078);
  1386. setMessage("3D", "Loaded PV078.");
  1387. createLabel("078");
  1388. pv079 = new THREE.Mesh(
  1389. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1390. new THREE.MeshPhongMaterial( {
  1391. color: 0xD3D3D3,
  1392. specular: 0x050505,
  1393. shininess: 100
  1394. })
  1395. );
  1396. pv079.position.set(14, 0.5, 9);
  1397. pv079.rotateY( 11 * Math.PI / 6 );
  1398. pv079.rotateX( Math.PI / 6);
  1399. pv079.name = "1D_30_30w_079";
  1400. scene.add(pv079);
  1401. setMessage("3D", "Loaded PV079.");
  1402. createLabel("079");
  1403. pv080 = new THREE.Mesh(
  1404. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1405. new THREE.MeshPhongMaterial( {
  1406. color: 0xD3D3D3,
  1407. specular: 0x050505,
  1408. shininess: 100
  1409. })
  1410. );
  1411. pv080.position.set(20, 0.5, -4);
  1412. pv080.rotateY( 11 * Math.PI / 6 );
  1413. pv080.rotateX( Math.PI / 4);
  1414. pv080.name = "3A_45_30w_080";
  1415. scene.add(pv080);
  1416. setMessage("3D", "Loaded PV080.");
  1417. createLabel("080");
  1418. pv081 = new THREE.Mesh(
  1419. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1420. new THREE.MeshPhongMaterial( {
  1421. color: 0xD3D3D3,
  1422. specular: 0x050505,
  1423. shininess: 100
  1424. })
  1425. );
  1426. pv081.position.set(21, 0.5, -7);
  1427. pv081.rotateY( 11 * Math.PI / 6 );
  1428. pv081.rotateX( Math.PI / 4);
  1429. pv081.name = "1A_45_30w_081";
  1430. scene.add(pv081);
  1431. setMessage("3D", "Loaded PV081.");
  1432. createLabel("081");
  1433. pv082 = new THREE.Mesh(
  1434. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1435. new THREE.MeshPhongMaterial( {
  1436. color: 0xD3D3D3,
  1437. specular: 0x050505,
  1438. shininess: 100
  1439. })
  1440. );
  1441. pv082.position.set(21.5, 0.5, -11);
  1442. pv082.rotateY( 11 * Math.PI / 6 );
  1443. pv082.rotateX( Math.PI / 4);
  1444. pv082.name = "5A_45_30w_082";
  1445. scene.add(pv082);
  1446. setMessage("3D", "Loaded PV082.");
  1447. createLabel("082");
  1448. pv083 = new THREE.Mesh(
  1449. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1450. new THREE.MeshPhongMaterial( {
  1451. color: 0xD3D3D3,
  1452. specular: 0x050505,
  1453. shininess: 100
  1454. })
  1455. );
  1456. pv083.position.set(24, 0.5, -21);
  1457. pv083.rotateY( 11 * Math.PI / 6 );
  1458. pv083.rotateX( Math.PI / 3);
  1459. pv083.name = "6A_60_30w_083";
  1460. scene.add(pv083);
  1461. setMessage("3D", "Loaded PV083.");
  1462. createLabel("083");
  1463. pv084 = new THREE.Mesh(
  1464. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1465. new THREE.MeshPhongMaterial( {
  1466. color: 0xD3D3D3,
  1467. specular: 0x050505,
  1468. shininess: 100
  1469. })
  1470. );
  1471. pv084.position.set(23, 0.5, -18);
  1472. pv084.rotateY( 11 * Math.PI / 6 );
  1473. pv084.rotateX( Math.PI / 3);
  1474. pv084.name = "3A_60_30w_084";
  1475. scene.add(pv084);
  1476. setMessage("3D", "Loaded PV084.");
  1477. createLabel("084");
  1478. pv085 = new THREE.Mesh(
  1479. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1480. new THREE.MeshPhongMaterial( {
  1481. color: 0xD3D3D3,
  1482. specular: 0x050505,
  1483. shininess: 100
  1484. })
  1485. );
  1486. pv085.position.set(23, 0.5, -14);
  1487. pv085.rotateY( 11 * Math.PI / 6 );
  1488. pv085.rotateX( Math.PI / 3);
  1489. pv085.name = "1A_60_30w_085";
  1490. scene.add(pv085);
  1491. setMessage("3D", "Loaded PV085.");
  1492. createLabel("085");
  1493. pv086 = new THREE.Mesh(
  1494. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1495. new THREE.MeshPhongMaterial( {
  1496. color: 0xD3D3D3,
  1497. specular: 0x050505,
  1498. shininess: 100
  1499. })
  1500. );
  1501. pv086.position.set(12, 0.5, 30.5);
  1502. pv086.rotateY( 7 * Math.PI / 4 );
  1503. pv086.rotateX( Math.PI / 12);
  1504. pv086.name = "2A_15_45w_086";
  1505. scene.add(pv086);
  1506. setMessage("3D", "Loaded PV086.");
  1507. createLabel("086");
  1508. pv087 = new THREE.Mesh(
  1509. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1510. new THREE.MeshPhongMaterial( {
  1511. color: 0xD3D3D3,
  1512. specular: 0x050505,
  1513. shininess: 100
  1514. })
  1515. );
  1516. pv087.position.set(16, 0.5, 30.5);
  1517. pv087.rotateY( 7 * Math.PI / 4 );
  1518. pv087.rotateX( Math.PI / 12);
  1519. pv087.name = "1A_15_45w_087";
  1520. scene.add(pv087);
  1521. setMessage("3D", "Loaded PV087.");
  1522. createLabel("087");
  1523. pv088 = new THREE.Mesh(
  1524. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1525. new THREE.MeshPhongMaterial( {
  1526. color: 0xD3D3D3,
  1527. specular: 0x050505,
  1528. shininess: 100
  1529. })
  1530. );
  1531. pv088.position.set(17, 0.5, 27.5);
  1532. pv088.rotateY( 7 * Math.PI / 4 );
  1533. pv088.rotateX( Math.PI / 12);
  1534. pv088.name = "4A_15_45w_088";
  1535. scene.add(pv088);
  1536. setMessage("3D", "Loaded PV088.");
  1537. createLabel("088");
  1538. pv089 = new THREE.Mesh(
  1539. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1540. new THREE.MeshPhongMaterial( {
  1541. color: 0xD3D3D3,
  1542. specular: 0x050505,
  1543. shininess: 100
  1544. })
  1545. );
  1546. pv089.position.set(20, 0.5, 11);
  1547. pv089.rotateY( 7 * Math.PI / 4 );
  1548. pv089.rotateX( Math.PI / 6);
  1549. pv089.name = "6A_30_45w_089";
  1550. scene.add(pv089);
  1551. setMessage("3D", "Loaded PV089.");
  1552. createLabel("089");
  1553. pv090 = new THREE.Mesh(
  1554. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1555. new THREE.MeshPhongMaterial( {
  1556. color: 0xD3D3D3,
  1557. specular: 0x050505,
  1558. shininess: 100
  1559. })
  1560. );
  1561. pv090.position.set(19, 0.5, 14);
  1562. pv090.rotateY( 7 * Math.PI / 4 );
  1563. pv090.rotateX( Math.PI / 6);
  1564. pv090.name = "2A_30_45w_090";
  1565. scene.add(pv090);
  1566. setMessage("3D", "Loaded PV090.");
  1567. createLabel("090");
  1568. pv091 = new THREE.Mesh(
  1569. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1570. new THREE.MeshPhongMaterial( {
  1571. color: 0xD3D3D3,
  1572. specular: 0x050505,
  1573. shininess: 100
  1574. })
  1575. );
  1576. pv091.position.set(29, 0.5, -14);
  1577. pv091.rotateY( 7 * Math.PI / 4 );
  1578. pv091.rotateX( Math.PI / 4);
  1579. pv091.name = "2C_45_45w_091";
  1580. scene.add(pv091);
  1581. setMessage("3D", "Loaded PV091.");
  1582. createLabel("091");
  1583. pv092 = new THREE.Mesh(
  1584. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1585. new THREE.MeshPhongMaterial( {
  1586. color: 0xD3D3D3,
  1587. specular: 0x050505,
  1588. shininess: 100
  1589. })
  1590. );
  1591. pv092.position.set(23, 0.5, 7);
  1592. pv092.rotateY( 7 * Math.PI / 4 );
  1593. pv092.rotateX( Math.PI / 4);
  1594. pv092.name = "4C_45_45w_092";
  1595. scene.add(pv092);
  1596. setMessage("3D", "Loaded PV092.");
  1597. createLabel("092");
  1598. pv093 = new THREE.Mesh(
  1599. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1600. new THREE.MeshPhongMaterial( {
  1601. color: 0xD3D3D3,
  1602. specular: 0x050505,
  1603. shininess: 100
  1604. })
  1605. );
  1606. pv093.position.set(30, 0.5, -18);
  1607. pv093.rotateY( 7 * Math.PI / 4 );
  1608. pv093.rotateX( Math.PI / 3);
  1609. pv093.name = "6A_60_45w_093";
  1610. scene.add(pv093);
  1611. setMessage("3D", "Loaded PV093.");
  1612. createLabel("093");
  1613. pv094 = new THREE.Mesh(
  1614. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1615. new THREE.MeshPhongMaterial( {
  1616. color: 0xD3D3D3,
  1617. specular: 0x050505,
  1618. shininess: 100
  1619. })
  1620. );
  1621. pv094.position.set(30, 0.5, -22);
  1622. pv094.rotateY( 7 * Math.PI / 4 );
  1623. pv094.rotateX( Math.PI / 3);
  1624. pv094.name = "2A_60_45w_094";
  1625. scene.add(pv094);
  1626. setMessage("3D", "Loaded PV094.");
  1627. createLabel("094");
  1628. pv095 = new THREE.Mesh(
  1629. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1630. new THREE.MeshPhongMaterial( {
  1631. color: 0xD3D3D3,
  1632. specular: 0x050505,
  1633. shininess: 100
  1634. })
  1635. );
  1636. pv095.position.set(15, 0.5, 34);
  1637. pv095.rotateY( 5 * Math.PI / 3);
  1638. pv095.rotateX( Math.PI / 12);
  1639. pv095.name = "6A_15_60w_095";
  1640. scene.add(pv095);
  1641. setMessage("3D", "Loaded PV095.");
  1642. createLabel("095");
  1643. pv096 = new THREE.Mesh(
  1644. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1645. new THREE.MeshPhongMaterial( {
  1646. color: 0xD3D3D3,
  1647. specular: 0x050505,
  1648. shininess: 100
  1649. })
  1650. );
  1651. pv096.position.set(14, 0.5, 37);
  1652. pv096.rotateY( 5 * Math.PI / 3);
  1653. pv096.rotateX( Math.PI / 12);
  1654. pv096.name = "2A_15_60w_096";
  1655. scene.add(pv096);
  1656. setMessage("3D", "Loaded PV096.");
  1657. createLabel("096");
  1658. pv097 = new THREE.Mesh(
  1659. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1660. new THREE.MeshPhongMaterial( {
  1661. color: 0xD3D3D3,
  1662. specular: 0x050505,
  1663. shininess: 100
  1664. })
  1665. );
  1666. pv097.position.set(16, 0.5, 20);
  1667. pv097.rotateY( 5 * Math.PI / 3);
  1668. pv097.rotateX( Math.PI / 6);
  1669. pv097.name = "6A_30_60w_097";
  1670. scene.add(pv097);
  1671. setMessage("3D", "Loaded PV097.");
  1672. createLabel("097");
  1673. pv098 = new THREE.Mesh(
  1674. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1675. new THREE.MeshPhongMaterial( {
  1676. color: 0xD3D3D3,
  1677. specular: 0x050505,
  1678. shininess: 100
  1679. })
  1680. );
  1681. pv098.position.set(17, 0.5, 17);
  1682. pv098.rotateY( 5 * Math.PI / 3);
  1683. pv098.rotateX( Math.PI / 6);
  1684. pv098.name = "1A_30_60w_098";
  1685. scene.add(pv098);
  1686. setMessage("3D", "Loaded PV098.");
  1687. createLabel("098");
  1688. pv099 = new THREE.Mesh(
  1689. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1690. new THREE.MeshPhongMaterial( {
  1691. color: 0xD3D3D3,
  1692. specular: 0x050505,
  1693. shininess: 100
  1694. })
  1695. );
  1696. pv099.position.set(25, 0.5, -1);
  1697. pv099.rotateY( 5 * Math.PI / 3);
  1698. pv099.rotateX( Math.PI / 4);
  1699. pv099.name = "6A_45_60w_099";
  1700. scene.add(pv099);
  1701. setMessage("3D", "Loaded PV099.");
  1702. createLabel("099");
  1703. pv100 = new THREE.Mesh(
  1704. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1705. new THREE.MeshPhongMaterial( {
  1706. color: 0xD3D3D3,
  1707. specular: 0x050505,
  1708. shininess: 100
  1709. })
  1710. );
  1711. pv100.position.set(22, 0.5, 2);
  1712. pv100.rotateY( 5 * Math.PI / 3);
  1713. pv100.rotateX( Math.PI / 4);
  1714. pv100.name = "1A_45_60w_100";
  1715. scene.add(pv100);
  1716. setMessage("3D", "Loaded PV100.");
  1717. createLabel("100");
  1718. pv101 = new THREE.Mesh(
  1719. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1720. new THREE.MeshPhongMaterial( {
  1721. color: 0xD3D3D3,
  1722. specular: 0x050505,
  1723. shininess: 100
  1724. })
  1725. );
  1726. pv101.position.set(28, 0.5, -10);
  1727. pv101.rotateY( 5 * Math.PI / 3);
  1728. pv101.rotateX( Math.PI / 3);
  1729. pv101.name = "2C_60_60w_101";
  1730. scene.add(pv101);
  1731. setMessage("3D", "Loaded PV101.");
  1732. createLabel("101");
  1733. pv102 = new THREE.Mesh(
  1734. new THREE.CubeGeometry( 4, 0.1, 1 ),
  1735. new THREE.MeshPhongMaterial( {
  1736. color: 0xD3D3D3,
  1737. specular: 0x050505,
  1738. shininess: 100
  1739. })
  1740. );
  1741. pv102.position.set(26, 0.5, -6);
  1742. pv102.rotateY( 5 * Math.PI / 3);
  1743. pv102.rotateX( Math.PI / 3);
  1744. pv102.name = "1C_60_60w_102";
  1745. scene.add(pv102);
  1746. setMessage("3D", "Loaded PV102.");
  1747. createLabel("102");
  1748. //scene.fog = new THREE.FogExp2( 0x000000, 0.0128 );
  1749. //renderer.setClearColor( scene.fog.color, 1 );
  1750. render();
  1751. }
  1752. function animate() {
  1753. requestAnimationFrame(animate);
  1754. if (enableControls){
  1755. mycontrol.enabled = true;
  1756. } else {
  1757. mycontrol.enabled = false;
  1758. }
  1759. mycontrol.update();
  1760. render();
  1761. }
  1762. var vector;
  1763. function render() {
  1764. //console.log(camera.position);
  1765. // if camera.position.y more than 90 then show module number
  1766. scene.traverse( function( node ) {
  1767. if (node.name != "") {
  1768. //console.log(node.name);
  1769. var _id = node.name;
  1770. _id = _id.split("_");
  1771. _id = _id.pop();
  1772. _id = "#text" + _id;
  1773. if (camera.position.y > 0 && labelFlag == true) {
  1774. //console.log(scene.children);
  1775. var obj1 = scene.getObjectByName( node.name );
  1776. var width = window.innerWidth, height = window.innerHeight;
  1777. var widthHalf = width / 2, heightHalf = height / 2;
  1778. var pos = obj1.position.clone();
  1779. pos.project(camera);
  1780. pos.x = ( pos.x * widthHalf ) + widthHalf;
  1781. pos.y = - ( pos.y * heightHalf ) + heightHalf;
  1782. $(_id).show();
  1783. $(_id).css("top", pos.y + 'px');
  1784. $(_id).css("left", (pos.x-10) + 'px');
  1785. //console.log(pos);
  1786. } else {
  1787. $(_id).hide();
  1788. }
  1789. }
  1790. });
  1791. /*
  1792. if (camera.position.y > 0) {
  1793. //console.log(scene.children);
  1794. var obj1 = scene.getObjectByName( "2A_15_60e_001" );
  1795. var width = window.innerWidth, height = window.innerHeight;
  1796. var widthHalf = width / 2, heightHalf = height / 2;
  1797. var pos = obj1.position.clone();
  1798. pos.project(camera);
  1799. pos.x = ( pos.x * widthHalf ) + widthHalf;
  1800. pos.y = - ( pos.y * heightHalf ) + heightHalf;
  1801. $("#text001").show();
  1802. $("#text001").css("top", pos.y + 'px');
  1803. $("#text001").css("left", (pos.x-10) + 'px');
  1804. //console.log(pos);
  1805. } else {
  1806. $("#text001").hide();
  1807. }
  1808. */
  1809. // update the picking ray with the camera and mouse position
  1810. raycaster.setFromCamera( mouse, camera );
  1811. // calculate objects intersecting the picking ray
  1812. var intersects = raycaster.intersectObjects( scene.children );
  1813. //console.log("Check intersection");
  1814. //console.log(intersects);
  1815. for ( var i = 0; i < intersects.length; i++ ) {
  1816. //intersects[ i ].object.material.color.set( 0xff0000 );
  1817. //$("#obj-tooltip").text(intersects[ i ].object.name);
  1818. if (intersects[ i ].object.name != "") {
  1819. $("#obj-tooltip").text("Module: " + intersects[ i ].object.name);
  1820. $("#val-tooltip").text("Value: " + data[ intersects[ i ].object.name ]);
  1821. }
  1822. }
  1823. renderer.render(scene, camera);
  1824. vector = camera.getWorldDirection();
  1825. theta = Math.atan2(vector.x,vector.z);
  1826. theta = theta + 3.142; // add/minux pi to inverse
  1827. var degree = theta * (180/3.142);
  1828. //console.log(degree);
  1829. draw(degree);
  1830. }
  1831. $("#testTrigger").click(function() {
  1832. pv001.material.color.setHex( 0x00ff00 );
  1833. pv001.scale.y = 10;
  1834. pv001.position.y = 5.5;
  1835. setMessage("3D", "Updated PV001.");
  1836. render();
  1837. });
  1838. $("#message").mousedown(function() {
  1839. enableControls = false;
  1840. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  1841. //render();
  1842. });
  1843. $("#orientation").mousedown(function() {
  1844. enableControls = false;
  1845. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  1846. //render();
  1847. });
  1848. $("#settings").mousedown(function() {
  1849. enableControls = false;
  1850. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  1851. //render();
  1852. });
  1853. $("#slider").mousedown(function() {
  1854. enableControls = false;
  1855. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  1856. //render();
  1857. });
  1858. $("#container").click(function() {
  1859. enableControls = true;
  1860. animate();
  1861. setMessage("GUI", "Selected main scene.");
  1862. });
  1863. </script>
  1864. <script>
  1865. jQuery(window).load(function () {
  1866. myTimer();
  1867. var myVar = setInterval(myTimer, 10000);
  1868. function myTimer() {
  1869. var dataToSend = {};
  1870. var object;
  1871. var colour;
  1872. var value;
  1873. $.ajax({
  1874. url: '/getdata/',
  1875. type: 'GET',
  1876. data: dataToSend,
  1877. success: function (response) {
  1878. //var objresponse = JSON.parse(response);
  1879. console.log(response);
  1880. data = response;
  1881. var obj = response;
  1882. for (var prop in obj) {
  1883. value = obj[prop];
  1884. if (prop == "time") {
  1885. $("#slider-tooltip").text(value);
  1886. } else {
  1887. // 0 = red
  1888. // 1 = green
  1889. if (value <= 0) {
  1890. colour = "0xff0000";
  1891. } else {
  1892. colour = "0x00ff00";
  1893. }
  1894. object = scene.getObjectByName( prop, true );
  1895. object.material.color.setHex( colour );
  1896. }
  1897. }
  1898. },
  1899. error: function () {
  1900. console.log("Error.")
  1901. }
  1902. });
  1903. }
  1904. });
  1905. </script>
  1906. </body>
  1907. </html>