index.html 67 KB

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