index.html 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095
  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>