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