index.html 71 KB

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