index.html 128 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111
  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="kit-logo"><img src="{{ static_url("kit_logo.svg") }}" height:5%></div>
  14. <div id="competence-logo"><img src="{{ static_url("CompetenceE-Logo.png") }}" height=100></div>
  15. <div id="ipe-logo"><img src="{{ static_url("IPE-Logo.png") }}" height=100></div>
  16. <div id="container"></div>
  17. <!--<div id="slider"></div>-->
  18. <div id="slider-tooltip"></div>
  19. <div id="obj-tooltip">Module: </div>
  20. <div id="val-tooltip">Power: </div>
  21. <div id="ts-tooltip">Last fetched (ADEI): </div>
  22. <div id="delta-tooltip">Delta Time: </div>
  23. <!--<div id="stat-tooltip">Status: </div>-->
  24. <div class="window-item window-unitem" id="message">
  25. <div class="bar-header">
  26. <div class="bar-title noselect">Message Log</div>
  27. <div class="bar-dropdown noselect">^</div>
  28. <div class="bar-close noselect">&#215;</div>
  29. </div>
  30. <div class="bar-message">
  31. <div class="bar-wrapper" style="height:200px; overflow-y:scroll;">
  32. </div>
  33. </div>
  34. </div>
  35. <div class="window-item window-unitem" id="settings">
  36. <div class="bar-header">
  37. <div class="bar-title noselect">Settings</div>
  38. <div class="bar-dropdown noselect">^</div>
  39. <div class="bar-close noselect">&#215;</div>
  40. </div>
  41. <div class="bar-settings">
  42. <div class="bar-wrapper">
  43. <div class="bar-setup">
  44. <span class="bl bar-hl">Select modes</span>
  45. <span class="br bar-info">
  46. <input type="radio" name="moduleMode" value="0" checked>On/Off<br>
  47. <input type="radio" name="moduleMode" value="1">Gradient
  48. </span>
  49. </div>
  50. <div class="bar-setup">
  51. <span class="bl bar-hl">Show array number</span>
  52. <span class="br bar-info">
  53. <input type="checkbox" id="mylabel">
  54. </span>
  55. </div>
  56. <div class="bar-setup">
  57. <span class="bl bar-hl">Show inverter type</span>
  58. <span class="br bar-info">
  59. <input type="checkbox" id="myType">
  60. </span>
  61. </div>
  62. <div class="bar-setup">
  63. <span class="bl bar-hl"></span>
  64. <span class="br bar-info">
  65. <input type="radio" name="moduleType" value="A">A<br>
  66. <input type="radio" name="moduleType" value="B">B<br>
  67. <input type="radio" name="moduleType" value="C">C<br>
  68. <input type="radio" name="moduleType" value="D">D
  69. </span>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. <div class="window-item" id="orientation">
  75. <div class="bar-header">
  76. <div class="bar-title noselect">Orientation</div>
  77. <div class="bar-dropdown noselect">^</div>
  78. <div class="bar-close noselect">&#215;</div>
  79. </div>
  80. <div class="bar-orientation">
  81. <canvas class="bar-wrapper" id="compass" width="200" height="180"></canvas>
  82. </div>
  83. </div>
  84. <div id="window-tab">
  85. <div id="offMessage" class="noselect bar-pil">Message Log</div>
  86. <div id="offSettings" class="noselect bar-pil">Settings</div>
  87. <div id="offOrientation" class="noselect bar-pil">Orientation</div>
  88. <!--<div id="offSettings" class="noselect bar-pil">Settings</div>-->
  89. </div>
  90. <div class="window-cp" id="control-panel">
  91. <div class="bar-header">
  92. <div id="toggleGUI" class="bar-button noselect">Show/Hide GUI</div>
  93. <div id="showTabs" class="bar-button noselect">Windows</div>
  94. <!--<div id="runSimulation" class="bar-button noselect">Run</div>-->
  95. <!---
  96. <div id="testTrigger" class="bar-button noselect">Test Trigger</div>
  97. -->
  98. </div>
  99. </div>
  100. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  101. <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  102. <script src="{{ static_url("scripts.js") }}"></script>
  103. <script src="{{ static_url("three.min.js") }}"></script>
  104. <script src="{{ static_url("Lut.js") }}"></script>
  105. <script src="{{ static_url("OrbitControls.js") }}"></script>
  106. <script>
  107. // Global variable
  108. var img = null,
  109. needle = null,
  110. ctx = null;
  111. function clearCanvas() {
  112. // clear canvas
  113. ctx.clearRect(0, 0, 200, 200);
  114. }
  115. function draw(degrees) {
  116. //console.log("Draw degree");
  117. //console.log(degrees);
  118. clearCanvas();
  119. // Draw the compass onto the canvas
  120. ctx.drawImage(img, 0, 0);
  121. // Save the current drawing state
  122. ctx.save();
  123. // Now move across and down half the
  124. ctx.translate(100, 100);
  125. // Rotate around this point
  126. ctx.rotate(degrees * (Math.PI / 180));
  127. // Draw the image back and up
  128. ctx.drawImage(needle, -100, -100);
  129. // Restore the previous drawing state
  130. ctx.restore();
  131. // Increment the angle of the needle by 5 degrees
  132. //degrees += 5;
  133. }
  134. function imgLoaded() {
  135. // Image loaded event complete. Start the timer
  136. draw(myvalue);
  137. //setInterval(draw, 100);
  138. }
  139. function init() {
  140. // Grab the compass element
  141. var canvas = document.getElementById('compass');
  142. // Canvas supported?
  143. if (canvas.getContext('2d')) {
  144. ctx = canvas.getContext('2d');
  145. // Load the needle image
  146. needle = new Image();
  147. needle.src = '{{ static_url("needle_01.svg") }}';
  148. // Load the compass image
  149. img = new Image();
  150. img.src = '{{ static_url("compass_01.svg") }}';
  151. img.onload = imgLoaded;
  152. } else {
  153. alert("Canvas not supported!");
  154. }
  155. }
  156. var myvalue = 0;
  157. init();
  158. </script>
  159. <!--
  160. <script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/CSS3DRenderer.js"></script>
  161. -->
  162. <script>
  163. var camera, scene, renderer;
  164. var container;
  165. var mycontrol;
  166. var enableControls = true;
  167. var enableRotate = false;
  168. var data = [];
  169. var labelFlag;
  170. var raycaster = new THREE.Raycaster();
  171. var mouse = new THREE.Vector2();
  172. $("#mylabel").change(function() {
  173. if(this.checked) {
  174. labelFlag = true;
  175. } else {
  176. labelFlag = false;
  177. }
  178. });
  179. function onMouseMove( event ) {
  180. // calculate mouse position in normalized device coordinates
  181. // (-1 to +1) for both components
  182. mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
  183. mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
  184. }
  185. init();
  186. animate();
  187. window.addEventListener( 'mousemove', onMouseMove, false );
  188. function createLabel(name) {
  189. var text2 = document.createElement('div');
  190. text2.style.position = 'absolute';
  191. //text2.style.zIndex = 1; // if you still don't see the label, try uncommenting this
  192. text2.style.fontSize = "12px";
  193. text2.style.width = 100;
  194. text2.style.height = 100;
  195. text2.style.padding = "2px";
  196. text2.style.backgroundColor = '#303030';
  197. text2.style.color = '#fff';
  198. text2.innerHTML = name;
  199. //text2.style.top = 200 + 'px';
  200. //text2.style.left = 200 + 'px';
  201. text2.id = "text"+name;
  202. document.body.appendChild(text2);
  203. }
  204. function init() {
  205. setMessage("3D", "Initialization.");
  206. scene = new THREE.Scene();
  207. camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
  208. camera.position.set(0, 45, 100);
  209. camera.lookAt(scene.position);
  210. container = document.getElementById( 'container' );
  211. document.body.appendChild( container );
  212. renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
  213. //renderer = new THREE.CSS3DRenderer();
  214. renderer.setSize(window.innerWidth, window.innerHeight);
  215. renderer.setClearColor( 0xffffff, 0);
  216. container.appendChild(renderer.domElement);
  217. mycontrol = new THREE.OrbitControls( camera );
  218. var size = 40, step = 1;
  219. var geometry = new THREE.Geometry();
  220. var material = new THREE.LineBasicMaterial({color: 0xe3e3e3, linewidth: 1, fog:true});
  221. for ( var i = - size; i <= size; i += step ) {
  222. geometry.vertices.push(new THREE.Vector3( -size, -0.04, i ));
  223. geometry.vertices.push(new THREE.Vector3( size, -0.04, i ));
  224. geometry.vertices.push(new THREE.Vector3( i, -0.04, -size ));
  225. geometry.vertices.push(new THREE.Vector3( i, -0.04, size ));
  226. }
  227. var line = new THREE.LineSegments( geometry, material );
  228. scene.add(line);
  229. setMessage("3D", "Added grid plane.");
  230. /*
  231. var geometry = new THREE.BoxGeometry( 1, 1, 1 );
  232. var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
  233. var cube = new THREE.Mesh( geometry, material );
  234. */
  235. var light = new THREE.DirectionalLight( 0xffffff );
  236. light.position.set( 0, 1, 1 ).normalize();
  237. scene.add(light);
  238. setMessage("3D", "Added directional light.");
  239. pv001 = new THREE.Mesh(
  240. new THREE.CubeGeometry( 4, 0.1,0.5),
  241. new THREE.MeshPhongMaterial( {
  242. color: 0xD3D3D3,
  243. specular: 0x050505,
  244. shininess: 100
  245. })
  246. );
  247. pv001.position.set(-18, 0.5, 29);
  248. pv001.rotateY( Math.PI / 3 );
  249. pv001.rotateX( Math.PI / 12);
  250. pv001.name = "2A_15_60e_001_02";
  251. scene.add(pv001);
  252. setMessage("3D", "Loaded PV001.");
  253. createLabel("001");
  254. pv002 = new THREE.Mesh(
  255. new THREE.CubeGeometry( 4, 0.1,0.5),
  256. new THREE.MeshPhongMaterial( {
  257. color: 0xD3D3D3,
  258. specular: 0x050505,
  259. shininess: 100
  260. })
  261. );
  262. pv002.position.set(-14, 0.5, 30);
  263. pv002.rotateY( Math.PI / 3 );
  264. pv002.rotateX( Math.PI / 12);
  265. pv002.name = "5A_15_60e_002_02";
  266. scene.add(pv002);
  267. setMessage("3D", "Loaded PV002.");
  268. createLabel("002");
  269. pv003 = new THREE.Mesh(
  270. new THREE.CubeGeometry( 4, 0.1,0.5),
  271. new THREE.MeshPhongMaterial( {
  272. color: 0xD3D3D3,
  273. specular: 0x050505,
  274. shininess: 100
  275. })
  276. );
  277. pv003.position.set(9.5, 0.5, 2);
  278. pv003.rotateY( Math.PI / 3 );
  279. pv003.rotateX( Math.PI / 6);
  280. pv003.name = "6A_30_60e_003_02";
  281. scene.add(pv003);
  282. setMessage("3D", "Loaded PV003.");
  283. createLabel("003");
  284. pv004 = new THREE.Mesh(
  285. new THREE.CubeGeometry( 4, 0.1,0.5),
  286. new THREE.MeshPhongMaterial( {
  287. color: 0xD3D3D3,
  288. specular: 0x050505,
  289. shininess: 100
  290. })
  291. );
  292. pv004.position.set(6, 0.5, 1);
  293. pv004.rotateY( Math.PI / 3 );
  294. pv004.rotateX( Math.PI / 6);
  295. pv004.name = "1A_30_60e_004_02";
  296. scene.add(pv004);
  297. setMessage("3D", "Loaded PV004.");
  298. createLabel("004");
  299. pv005 = new THREE.Mesh(
  300. new THREE.CubeGeometry( 4, 0.1,0.5),
  301. new THREE.MeshPhongMaterial( {
  302. color: 0xD3D3D3,
  303. specular: 0x050505,
  304. shininess: 100
  305. })
  306. );
  307. pv005.position.set(-8, 0.5, -3);
  308. pv005.rotateY( Math.PI / 3 );
  309. pv005.rotateX( Math.PI / 4);
  310. pv005.name = "6A_45_60e_005_02";
  311. scene.add(pv005);
  312. setMessage("3D", "Loaded PV005.");
  313. createLabel("005");
  314. pv006 = new THREE.Mesh(
  315. new THREE.CubeGeometry( 4, 0.1,0.5),
  316. new THREE.MeshPhongMaterial( {
  317. color: 0xD3D3D3,
  318. specular: 0x050505,
  319. shininess: 100
  320. })
  321. );
  322. pv006.position.set(-4.5, 0.5, -2);
  323. pv006.rotateY( Math.PI / 3 );
  324. pv006.rotateX( Math.PI / 4);
  325. pv006.name = "1A_45_60e_006_02";
  326. scene.add(pv006);
  327. setMessage("3D", "Loaded PV006.");
  328. createLabel("006");
  329. pv007 = new THREE.Mesh(
  330. new THREE.CubeGeometry( 4, 0.1,0.5),
  331. new THREE.MeshPhongMaterial( {
  332. color: 0xD3D3D3,
  333. specular: 0x050505,
  334. shininess: 100
  335. })
  336. );
  337. pv007.position.set(-5, 0.5, -16);
  338. pv007.rotateY( Math.PI / 3 );
  339. pv007.rotateX( Math.PI / 3);
  340. pv007.name = "6C_60_60e_007_02";
  341. scene.add(pv007);
  342. setMessage("3D", "Loaded PV007.");
  343. createLabel("007");
  344. pv008 = new THREE.Mesh(
  345. new THREE.CubeGeometry( 4, 0.1,0.5),
  346. new THREE.MeshPhongMaterial( {
  347. color: 0xD3D3D3,
  348. specular: 0x050505,
  349. shininess: 100
  350. })
  351. );
  352. pv008.position.set(-7, 0.5, -9);
  353. pv008.rotateY( Math.PI / 3 );
  354. pv008.rotateX( Math.PI / 3);
  355. pv008.name = "1C_60_60e_008_02";
  356. scene.add(pv008);
  357. setMessage("3D", "Loaded PV008.");
  358. createLabel("008");
  359. pv009 = new THREE.Mesh(
  360. new THREE.CubeGeometry( 4, 0.1,0.5),
  361. new THREE.MeshPhongMaterial( {
  362. color: 0xD3D3D3,
  363. specular: 0x050505,
  364. shininess: 100
  365. })
  366. );
  367. pv009.position.set(13, 0.5, 3);
  368. pv009.rotateY( Math.PI / 4 );
  369. pv009.rotateX( Math.PI / 12);
  370. pv009.name = "2A_15_45e_009_02";
  371. scene.add(pv009);
  372. setMessage("3D", "Loaded PV009.");
  373. createLabel("009");
  374. pv010 = new THREE.Mesh(
  375. new THREE.CubeGeometry( 4, 0.1,0.5),
  376. new THREE.MeshPhongMaterial( {
  377. color: 0xD3D3D3,
  378. specular: 0x050505,
  379. shininess: 100
  380. })
  381. );
  382. pv010.position.set(18, 0.5, 4);
  383. pv010.rotateY( Math.PI / 4 );
  384. pv010.rotateX( Math.PI / 12);
  385. pv010.name = "1A_15_45e_010_02";
  386. scene.add(pv010);
  387. setMessage("3D", "Loaded PV010.");
  388. createLabel("010");
  389. pv011 = new THREE.Mesh(
  390. new THREE.CubeGeometry( 4, 0.1,0.5),
  391. new THREE.MeshPhongMaterial( {
  392. color: 0xD3D3D3,
  393. specular: 0x050505,
  394. shininess: 100
  395. })
  396. );
  397. pv011.position.set(3.5, 0.5, -0.5);
  398. pv011.rotateY( Math.PI / 4 );
  399. pv011.rotateX( Math.PI / 12);
  400. pv011.name = "4A_15_45e_011_02";
  401. scene.add(pv011);
  402. setMessage("3D", "Loaded PV011.");
  403. createLabel("011");
  404. pv012 = new THREE.Mesh(
  405. new THREE.CubeGeometry( 4, 0.1,0.5),
  406. new THREE.MeshPhongMaterial( {
  407. color: 0xD3D3D3,
  408. specular: 0x050505,
  409. shininess: 100
  410. })
  411. );
  412. pv012.position.set(17, 0.5, -1);
  413. pv012.rotateY( Math.PI / 4 );
  414. pv012.rotateX( Math.PI / 6);
  415. pv012.name = "6A_30_45e_012_02";
  416. scene.add(pv012);
  417. setMessage("3D", "Loaded PV012.");
  418. createLabel("012");
  419. pv013 = new THREE.Mesh(
  420. new THREE.CubeGeometry( 4, 0.1,0.5),
  421. new THREE.MeshPhongMaterial( {
  422. color: 0xD3D3D3,
  423. specular: 0x050505,
  424. shininess: 100
  425. })
  426. );
  427. pv013.position.set(-2, 0.5, -1);
  428. pv013.rotateY( Math.PI / 4 );
  429. pv013.rotateX( Math.PI / 6);
  430. pv013.name = "2A_30_45e_013_02";
  431. scene.add(pv013);
  432. setMessage("3D", "Loaded PV013.");
  433. createLabel("013");
  434. pv014 = new THREE.Mesh(
  435. new THREE.CubeGeometry( 4, 0.1,0.5),
  436. new THREE.MeshPhongMaterial( {
  437. color: 0xD3D3D3,
  438. specular: 0x050505,
  439. shininess: 100
  440. })
  441. );
  442. pv014.position.set(9, 0.5, -3);
  443. pv014.rotateY( Math.PI / 4 );
  444. pv014.rotateX( Math.PI / 4);
  445. pv014.name = "2A_45_45e_014_02";
  446. scene.add(pv014);
  447. setMessage("3D", "Loaded PV014.");
  448. createLabel("014");
  449. pv015 = new THREE.Mesh(
  450. new THREE.CubeGeometry( 4, 0.1,0.5),
  451. new THREE.MeshPhongMaterial( {
  452. color: 0xD3D3D3,
  453. specular: 0x050505,
  454. shininess: 100
  455. })
  456. );
  457. pv015.position.set(12.5, 0.5, -2);
  458. pv015.rotateY( Math.PI / 4 );
  459. pv015.rotateX( Math.PI / 4);
  460. pv015.name = "4A_45_45e_015_02";
  461. scene.add(pv015);
  462. setMessage("3D", "Loaded PV015.");
  463. createLabel("015");
  464. pv016 = new THREE.Mesh(
  465. new THREE.CubeGeometry( 4, 0.1,0.5),
  466. new THREE.MeshPhongMaterial( {
  467. color: 0xD3D3D3,
  468. specular: 0x050505,
  469. shininess: 100
  470. })
  471. );
  472. pv016.position.set(-1, 0.5, -22);
  473. pv016.rotateY( Math.PI / 4 );
  474. pv016.rotateX( Math.PI / 3);
  475. pv016.name = "6A_60_45e_016_02";
  476. scene.add(pv016);
  477. setMessage("3D", "Loaded PV016.");
  478. createLabel("016");
  479. pv017 = new THREE.Mesh(
  480. new THREE.CubeGeometry( 4, 0.1,0.5),
  481. new THREE.MeshPhongMaterial( {
  482. color: 0xD3D3D3,
  483. specular: 0x050505,
  484. shininess: 100
  485. })
  486. );
  487. pv017.position.set(-2, 0.5, -26);
  488. pv017.rotateY( Math.PI / 4 );
  489. pv017.rotateX( Math.PI / 3);
  490. pv017.name = "2A_60_45e_017_02";
  491. scene.add(pv017);
  492. setMessage("3D", "Loaded PV017.");
  493. createLabel("017");
  494. pv018 = new THREE.Mesh(
  495. new THREE.CubeGeometry( 4, 0.1,0.5),
  496. new THREE.MeshPhongMaterial( {
  497. color: 0xD3D3D3,
  498. specular: 0x050505,
  499. shininess: 100
  500. })
  501. );
  502. pv018.position.set(-8.5, 0.5, 23);
  503. pv018.rotateY( Math.PI / 6 );
  504. pv018.rotateX( Math.PI / 12);
  505. pv018.name = "3A_15_30e_018_02";
  506. scene.add(pv018);
  507. setMessage("3D", "Loaded PV018.");
  508. createLabel("018");
  509. pv019 = new THREE.Mesh(
  510. new THREE.CubeGeometry( 4, 0.1,0.5),
  511. new THREE.MeshPhongMaterial( {
  512. color: 0xD3D3D3,
  513. specular: 0x050505,
  514. shininess: 100
  515. })
  516. );
  517. pv019.position.set(-10, 0.5, 26.5);
  518. pv019.rotateY( Math.PI / 6 );
  519. pv019.rotateX( Math.PI / 12);
  520. pv019.name = "1A_15_30e_019_02";
  521. scene.add(pv019);
  522. setMessage("3D", "Loaded PV019.");
  523. createLabel("019");
  524. pv020 = new THREE.Mesh(
  525. new THREE.CubeGeometry( 4, 0.1,0.5),
  526. new THREE.MeshPhongMaterial( {
  527. color: 0xD3D3D3,
  528. specular: 0x050505,
  529. shininess: 100
  530. })
  531. );
  532. pv020.position.set(6, 0.5, 14);
  533. pv020.rotateY( Math.PI / 6 );
  534. pv020.rotateX( Math.PI / 12);
  535. pv020.name = "1B_15_30e_020_02";
  536. scene.add(pv020);
  537. setMessage("3D", "Loaded PV020.");
  538. createLabel("020");
  539. pv021 = new THREE.Mesh(
  540. new THREE.CubeGeometry( 4, 0.1,0.5),
  541. new THREE.MeshPhongMaterial( {
  542. color: 0xD3D3D3,
  543. specular: 0x050505,
  544. shininess: 100
  545. })
  546. );
  547. pv021.position.set(12, 0.5, 19);
  548. pv021.rotateY( Math.PI / 6 );
  549. pv021.rotateX( Math.PI / 12);
  550. pv021.name = "1D_15_30e_021_02";
  551. scene.add(pv021);
  552. setMessage("3D", "Loaded PV021.");
  553. createLabel("021");
  554. pv022 = new THREE.Mesh(
  555. new THREE.CubeGeometry( 4, 0.1,0.5),
  556. new THREE.MeshPhongMaterial( {
  557. color: 0xD3D3D3,
  558. specular: 0x050505,
  559. shininess: 100
  560. })
  561. );
  562. pv022.position.set(6, 0.5, 17);
  563. pv022.rotateY( Math.PI / 6 );
  564. pv022.rotateX( Math.PI / 12);
  565. pv022.name = "1C_15_30e_022_02";
  566. scene.add(pv022);
  567. setMessage("3D", "Loaded PV022.");
  568. createLabel("022");
  569. pv023 = new THREE.Mesh(
  570. new THREE.CubeGeometry( 4, 0.1,0.5),
  571. new THREE.MeshPhongMaterial( {
  572. color: 0xD3D3D3,
  573. specular: 0x050505,
  574. shininess: 100
  575. })
  576. );
  577. pv023.position.set(9, 0.5, 18);
  578. pv023.rotateY( Math.PI / 6 );
  579. pv023.rotateX( Math.PI / 12);
  580. pv023.name = "5A_15_30e_023_02";
  581. scene.add(pv023);
  582. setMessage("3D", "Loaded PV023.");
  583. createLabel("023");
  584. pv024 = new THREE.Mesh(
  585. new THREE.CubeGeometry( 4, 0.1,0.5),
  586. new THREE.MeshPhongMaterial( {
  587. color: 0xD3D3D3,
  588. specular: 0x050505,
  589. shininess: 100
  590. })
  591. );
  592. pv024.position.set(-16, 0.5, 24);
  593. pv024.rotateY( Math.PI / 6 );
  594. pv024.rotateX( Math.PI / 6);
  595. pv024.name = "6D_30_30e_024_02";
  596. scene.add(pv024);
  597. setMessage("3D", "Loaded PV024.");
  598. createLabel("024");
  599. pv025 = new THREE.Mesh(
  600. new THREE.CubeGeometry( 4, 0.1,0.5),
  601. new THREE.MeshPhongMaterial( {
  602. color: 0xD3D3D3,
  603. specular: 0x050505,
  604. shininess: 100
  605. })
  606. );
  607. pv025.position.set(-15, 0.5, 26);
  608. pv025.rotateY( Math.PI / 6 );
  609. pv025.rotateX( Math.PI / 6);
  610. pv025.name = "3D_30_30e_025_02";
  611. scene.add(pv025);
  612. setMessage("3D", "Loaded PV025.");
  613. createLabel("025");
  614. pv026 = new THREE.Mesh(
  615. new THREE.CubeGeometry( 4, 0.1,0.5),
  616. new THREE.MeshPhongMaterial( {
  617. color: 0xD3D3D3,
  618. specular: 0x050505,
  619. shininess: 100
  620. })
  621. );
  622. pv026.position.set(1.5, 0.5, -7.5);
  623. pv026.rotateY( Math.PI / 6 );
  624. pv026.rotateX( Math.PI / 4);
  625. pv026.name = "6A_45_30e_026_02";
  626. scene.add(pv026);
  627. setMessage("3D", "Loaded PV026.");
  628. createLabel("026");
  629. pv027 = new THREE.Mesh(
  630. new THREE.CubeGeometry( 4, 0.1,0.5),
  631. new THREE.MeshPhongMaterial( {
  632. color: 0xD3D3D3,
  633. specular: 0x050505,
  634. shininess: 100
  635. })
  636. );
  637. pv027.position.set(-3, 0.5, -8.5);
  638. pv027.rotateY( Math.PI / 6 );
  639. pv027.rotateX( Math.PI / 4);
  640. pv027.name = "3A_45_30e_027_02";
  641. scene.add(pv027);
  642. setMessage("3D", "Loaded PV027.");
  643. createLabel("027");
  644. pv028 = new THREE.Mesh(
  645. new THREE.CubeGeometry( 4, 0.1,0.5),
  646. new THREE.MeshPhongMaterial( {
  647. color: 0xD3D3D3,
  648. specular: 0x050505,
  649. shininess: 100
  650. })
  651. );
  652. pv028.position.set(3, 0.5, -4.5);
  653. pv028.rotateY( Math.PI / 6 );
  654. pv028.rotateX( Math.PI / 4);
  655. pv028.name = "1A_45_30e_028_02";
  656. scene.add(pv028);
  657. setMessage("3D", "Loaded PV028.");
  658. createLabel("028");
  659. pv029 = new THREE.Mesh(
  660. new THREE.CubeGeometry( 4, 0.1,0.5),
  661. new THREE.MeshPhongMaterial( {
  662. color: 0xD3D3D3,
  663. specular: 0x050505,
  664. shininess: 100
  665. })
  666. );
  667. pv029.position.set(3, 0.5, -25);
  668. pv029.rotateY( Math.PI / 6 );
  669. pv029.rotateX( Math.PI / 3);
  670. pv029.name = "6A_60_30e_029_02";
  671. scene.add(pv029);
  672. setMessage("3D", "Loaded PV029.");
  673. createLabel("029");
  674. pv030 = new THREE.Mesh(
  675. new THREE.CubeGeometry( 4, 0.1,0.5),
  676. new THREE.MeshPhongMaterial( {
  677. color: 0xD3D3D3,
  678. specular: 0x050505,
  679. shininess: 100
  680. })
  681. );
  682. pv030.position.set(1, 0.5, -13);
  683. pv030.rotateY( Math.PI / 6 );
  684. pv030.rotateX( Math.PI / 3);
  685. pv030.name = "3A_60_30e_030_02";
  686. scene.add(pv030);
  687. setMessage("3D", "Loaded PV030.");
  688. createLabel("030");
  689. pv031 = new THREE.Mesh(
  690. new THREE.CubeGeometry( 4, 0.1,0.5),
  691. new THREE.MeshPhongMaterial( {
  692. color: 0xD3D3D3,
  693. specular: 0x050505,
  694. shininess: 100
  695. })
  696. );
  697. pv031.position.set(0, 0.5, -16);
  698. pv031.rotateY( Math.PI / 6 );
  699. pv031.rotateX( Math.PI / 3);
  700. pv031.name = "1A_60_30e_031_02";
  701. scene.add(pv031);
  702. setMessage("3D", "Loaded PV031.");
  703. createLabel("031");
  704. pv032 = new THREE.Mesh(
  705. new THREE.CubeGeometry( 4, 0.1,0.5),
  706. new THREE.MeshPhongMaterial( {
  707. color: 0xD3D3D3,
  708. specular: 0x050505,
  709. shininess: 100
  710. })
  711. );
  712. pv032.position.set(7, 0.5, 10.5);
  713. pv032.rotateY( Math.PI / 12 );
  714. pv032.rotateX( Math.PI / 12);
  715. pv032.name = "3A_15_15e_032_02";
  716. scene.add(pv032);
  717. setMessage("3D", "Loaded PV032.");
  718. createLabel("032");
  719. pv033 = new THREE.Mesh(
  720. new THREE.CubeGeometry( 4, 0.1,0.5),
  721. new THREE.MeshPhongMaterial( {
  722. color: 0xD3D3D3,
  723. specular: 0x050505,
  724. shininess: 100
  725. })
  726. );
  727. pv033.position.set(-10, 0.5, 29.5);
  728. pv033.rotateY( Math.PI / 12 );
  729. pv033.rotateX( Math.PI / 12);
  730. pv033.name = "1B_15_15e_033_02";
  731. scene.add(pv033);
  732. setMessage("3D", "Loaded PV033.");
  733. createLabel("033");
  734. pv034 = new THREE.Mesh(
  735. new THREE.CubeGeometry( 4, 0.1,0.5),
  736. new THREE.MeshPhongMaterial( {
  737. color: 0xD3D3D3,
  738. specular: 0x050505,
  739. shininess: 100
  740. })
  741. );
  742. pv034.position.set(-11, 0.5, 31.5);
  743. pv034.rotateY( Math.PI / 12 );
  744. pv034.rotateX( Math.PI / 12);
  745. pv034.name = "4B_15_15e_034_02";
  746. scene.add(pv034);
  747. setMessage("3D", "Loaded PV034.");
  748. createLabel("034");
  749. pv035 = new THREE.Mesh(
  750. new THREE.CubeGeometry( 4, 0.1,0.5),
  751. new THREE.MeshPhongMaterial( {
  752. color: 0xD3D3D3,
  753. specular: 0x050505,
  754. shininess: 100
  755. })
  756. );
  757. pv035.position.set(-13, 0.5, 19);
  758. pv035.rotateY( Math.PI / 12 );
  759. pv035.rotateX( Math.PI / 6);
  760. pv035.name = "3A_30_15e_035_02";
  761. scene.add(pv035);
  762. setMessage("3D", "Loaded PV035.");
  763. createLabel("035");
  764. pv036 = new THREE.Mesh(
  765. new THREE.CubeGeometry( 4, 0.1,0.5),
  766. new THREE.MeshPhongMaterial( {
  767. color: 0xD3D3D3,
  768. specular: 0x050505,
  769. shininess: 100
  770. })
  771. );
  772. pv036.position.set(-13, 0.5, 21);
  773. pv036.rotateY( Math.PI / 12 );
  774. pv036.rotateX( Math.PI / 6);
  775. pv036.name = "1A_30_15e_036_02";
  776. scene.add(pv036);
  777. setMessage("3D", "Loaded PV036.");
  778. createLabel("036");
  779. pv037 = new THREE.Mesh(
  780. new THREE.CubeGeometry( 4, 0.1,0.5),
  781. new THREE.MeshPhongMaterial( {
  782. color: 0xD3D3D3,
  783. specular: 0x050505,
  784. shininess: 100
  785. })
  786. );
  787. pv037.position.set(-7, 0.5, 20);
  788. pv037.rotateY( Math.PI / 12 );
  789. pv037.rotateX( Math.PI / 6);
  790. pv037.name = "5A_30_15e_037_02";
  791. scene.add(pv037);
  792. setMessage("3D", "Loaded PV037.");
  793. createLabel("037");
  794. pv038 = new THREE.Mesh(
  795. new THREE.CubeGeometry( 4, 0.1,0.5),
  796. new THREE.MeshPhongMaterial( {
  797. color: 0xD3D3D3,
  798. specular: 0x050505,
  799. shininess: 100
  800. })
  801. );
  802. pv038.position.set(8, 0.5, -14);
  803. pv038.rotateY( Math.PI / 12 );
  804. pv038.rotateX( Math.PI / 4);
  805. pv038.name = "3A_45_15e_038_02";
  806. scene.add(pv038);
  807. setMessage("3D", "Loaded PV038.");
  808. createLabel("038");
  809. pv039 = new THREE.Mesh(
  810. new THREE.CubeGeometry( 4, 0.1,0.5),
  811. new THREE.MeshPhongMaterial( {
  812. color: 0xD3D3D3,
  813. specular: 0x050505,
  814. shininess: 100
  815. })
  816. );
  817. pv039.position.set(8, 0.5, -10);
  818. pv039.rotateY( Math.PI / 12 );
  819. pv039.rotateX( Math.PI / 4);
  820. pv039.name = "1A_45_15e_039_02";
  821. scene.add(pv039);
  822. setMessage("3D", "Loaded PV039.");
  823. createLabel("039");
  824. pv040 = new THREE.Mesh(
  825. new THREE.CubeGeometry( 4, 0.1,0.5),
  826. new THREE.MeshPhongMaterial( {
  827. color: 0xD3D3D3,
  828. specular: 0x050505,
  829. shininess: 100
  830. })
  831. );
  832. pv040.position.set(9, 0.5, -6.5);
  833. pv040.rotateY( Math.PI / 12 );
  834. pv040.rotateX( Math.PI / 4);
  835. pv040.name = "4A_45_15e_040_02";
  836. scene.add(pv040);
  837. setMessage("3D", "Loaded PV040.");
  838. createLabel("040");
  839. pv041 = new THREE.Mesh(
  840. new THREE.CubeGeometry( 4, 0.1,0.5),
  841. new THREE.MeshPhongMaterial( {
  842. color: 0xD3D3D3,
  843. specular: 0x050505,
  844. shininess: 100
  845. })
  846. );
  847. pv041.position.set(4, 0.5, -20.5);
  848. pv041.rotateY( Math.PI / 12 );
  849. pv041.rotateX( Math.PI / 3);
  850. pv041.name = "6A_60_15e_041_02";
  851. scene.add(pv041);
  852. setMessage("3D", "Loaded PV041.");
  853. createLabel("041");
  854. pv042 = new THREE.Mesh(
  855. new THREE.CubeGeometry( 4, 0.1,0.5),
  856. new THREE.MeshPhongMaterial( {
  857. color: 0xD3D3D3,
  858. specular: 0x050505,
  859. shininess: 100
  860. })
  861. );
  862. pv042.position.set(9, 0.5, -22);
  863. pv042.rotateY( Math.PI / 12 );
  864. pv042.rotateX( Math.PI / 3);
  865. pv042.name = "3A_60_15e_042_02";
  866. scene.add(pv042);
  867. setMessage("3D", "Loaded PV042.");
  868. createLabel("042");
  869. pv043 = new THREE.Mesh(
  870. new THREE.CubeGeometry( 4, 0.1,0.5),
  871. new THREE.MeshPhongMaterial( {
  872. color: 0xD3D3D3,
  873. specular: 0x050505,
  874. shininess: 100
  875. })
  876. );
  877. pv043.position.set(8, 0.5, -17.5);
  878. pv043.rotateY( Math.PI / 12 );
  879. pv043.rotateX( Math.PI / 3);
  880. pv043.name = "1A_60_15e_043_02";
  881. scene.add(pv043);
  882. setMessage("3D", "Loaded PV043.");
  883. createLabel("043");
  884. pv044 = new THREE.Mesh(
  885. new THREE.CubeGeometry( 4, 0.1,0.5),
  886. new THREE.MeshPhongMaterial( {
  887. color: 0xD3D3D3,
  888. specular: 0x050505,
  889. shininess: 100
  890. })
  891. );
  892. pv044.position.set(2, 0.5, 33);
  893. pv044.rotateY( Math.PI );
  894. pv044.rotateX( 11 * Math.PI / 12);
  895. pv044.name = "3B_15_00s_044_02";
  896. scene.add(pv044);
  897. setMessage("3D", "Loaded PV044.");
  898. createLabel("044");
  899. pv045 = new THREE.Mesh(
  900. new THREE.CubeGeometry( 4, 0.1,0.5),
  901. new THREE.MeshPhongMaterial( {
  902. color: 0xD3D3D3,
  903. specular: 0x050505,
  904. shininess: 100
  905. })
  906. );
  907. pv045.position.set(5, 0.5, 34.5);
  908. pv045.rotateY( Math.PI );
  909. pv045.rotateX( 11 * Math.PI / 12);
  910. pv045.name = "4B_15_00s_045_02";
  911. scene.add(pv045);
  912. setMessage("3D", "Loaded PV045.");
  913. createLabel("045");
  914. pv046 = new THREE.Mesh(
  915. new THREE.CubeGeometry( 4, 0.1,0.5),
  916. new THREE.MeshPhongMaterial( {
  917. color: 0xD3D3D3,
  918. specular: 0x050505,
  919. shininess: 100
  920. })
  921. );
  922. pv046.position.set(-1, 0.5, 35);
  923. pv046.rotateY( Math.PI );
  924. pv046.rotateX( 89 * Math.PI / 90);
  925. pv046.name = "6A_02_00s_046_02";
  926. scene.add(pv046);
  927. setMessage("3D", "Loaded PV046.");
  928. createLabel("046");
  929. pv047 = new THREE.Mesh(
  930. new THREE.CubeGeometry( 4, 0.1,0.5),
  931. new THREE.MeshPhongMaterial( {
  932. color: 0xD3D3D3,
  933. specular: 0x050505,
  934. shininess: 100
  935. })
  936. );
  937. pv047.position.set(3, 0.5, 36);
  938. pv047.rotateY( Math.PI );
  939. pv047.rotateX( 89 * Math.PI / 90);
  940. pv047.name = "2A_02_00s_047_02";
  941. scene.add(pv047);
  942. setMessage("3D", "Loaded PV047.");
  943. createLabel("047");
  944. pv048 = new THREE.Mesh(
  945. new THREE.CubeGeometry( 4, 0.1,0.5),
  946. new THREE.MeshPhongMaterial( {
  947. color: 0xD3D3D3,
  948. specular: 0x050505,
  949. shininess: 100
  950. })
  951. );
  952. pv048.position.set(6, 0.5, 37);
  953. pv048.rotateY( Math.PI );
  954. pv048.rotateX( 89 * Math.PI / 90);
  955. pv048.name = "1A_02_00s_048_02";
  956. scene.add(pv048);
  957. setMessage("3D", "Loaded PV048.");
  958. createLabel("048");
  959. pv049 = new THREE.Mesh(
  960. new THREE.CubeGeometry( 4, 0.1,0.5),
  961. new THREE.MeshPhongMaterial( {
  962. color: 0xD3D3D3,
  963. specular: 0x050505,
  964. shininess: 100
  965. })
  966. );
  967. pv049.position.set(-11, 0.5, 14);
  968. pv049.rotateY( Math.PI );
  969. pv049.rotateX( 5 * Math.PI / 6);
  970. pv049.name = "3C_30_00s_049_02";
  971. scene.add(pv049);
  972. setMessage("3D", "Loaded PV049.");
  973. createLabel("049");
  974. pv050 = new THREE.Mesh(
  975. new THREE.CubeGeometry( 4, 0.1,0.5),
  976. new THREE.MeshPhongMaterial( {
  977. color: 0xD3D3D3,
  978. specular: 0x050505,
  979. shininess: 100
  980. })
  981. );
  982. pv050.position.set(-10.5, 0.5, 11);
  983. pv050.rotateY( Math.PI );
  984. pv050.rotateX( 5 * Math.PI / 6);
  985. pv050.name = "1A_30_00s_050_02";
  986. scene.add(pv050);
  987. setMessage("3D", "Loaded PV050.");
  988. createLabel("050");
  989. pv051 = new THREE.Mesh(
  990. new THREE.CubeGeometry( 4, 0.1,0.5),
  991. new THREE.MeshPhongMaterial( {
  992. color: 0xD3D3D3,
  993. specular: 0x050505,
  994. shininess: 100
  995. })
  996. );
  997. pv051.position.set(8, 0.5, 7.5);
  998. pv051.rotateY( Math.PI );
  999. pv051.rotateX( 5 * Math.PI / 6);
  1000. pv051.name = "1B_30_00s_051_02";
  1001. scene.add(pv051);
  1002. setMessage("3D", "Loaded PV051.");
  1003. createLabel("051");
  1004. pv052 = new THREE.Mesh(
  1005. new THREE.CubeGeometry( 4, 0.1,0.5),
  1006. new THREE.MeshPhongMaterial( {
  1007. color: 0xD3D3D3,
  1008. specular: 0x050505,
  1009. shininess: 100
  1010. })
  1011. );
  1012. pv052.position.set(-10, 0.5, 8);
  1013. pv052.rotateY( Math.PI );
  1014. pv052.rotateX( 5 * Math.PI / 6);
  1015. pv052.name = "1D_30_00s_052_02";
  1016. scene.add(pv052);
  1017. setMessage("3D", "Loaded PV052.");
  1018. createLabel("052");
  1019. pv053 = new THREE.Mesh(
  1020. new THREE.CubeGeometry( 4, 0.1,0.5),
  1021. new THREE.MeshPhongMaterial( {
  1022. color: 0xD3D3D3,
  1023. specular: 0x050505,
  1024. shininess: 100
  1025. })
  1026. );
  1027. pv053.position.set(3, 0.5, 25);
  1028. pv053.rotateY( Math.PI );
  1029. pv053.rotateX( 5 * Math.PI / 6);
  1030. pv053.name = "1C_30_00s_053_02";
  1031. scene.add(pv053);
  1032. setMessage("3D", "Loaded PV053.");
  1033. createLabel("053");
  1034. pv054 = new THREE.Mesh(
  1035. new THREE.CubeGeometry( 4, 0.1,0.5),
  1036. new THREE.MeshPhongMaterial( {
  1037. color: 0xD3D3D3,
  1038. specular: 0x050505,
  1039. shininess: 100
  1040. })
  1041. );
  1042. pv054.position.set(2.5, 0.5, 28);
  1043. pv054.rotateY( Math.PI );
  1044. pv054.rotateX( 5 * Math.PI / 6);
  1045. pv054.name = "4D_30_00s_054_02";
  1046. scene.add(pv054);
  1047. setMessage("3D", "Loaded PV054.");
  1048. createLabel("054");
  1049. pv055 = new THREE.Mesh(
  1050. new THREE.CubeGeometry( 4, 0.1,0.5),
  1051. new THREE.MeshPhongMaterial( {
  1052. color: 0xD3D3D3,
  1053. specular: 0x050505,
  1054. shininess: 100
  1055. })
  1056. );
  1057. pv055.position.set(15, 0.5, -7);
  1058. pv055.rotateY( Math.PI );
  1059. pv055.rotateX( 3 * Math.PI / 4);
  1060. pv055.name = "3A_45_00s_055_02";
  1061. scene.add(pv055);
  1062. setMessage("3D", "Loaded PV055.");
  1063. createLabel("055");
  1064. pv056 = new THREE.Mesh(
  1065. new THREE.CubeGeometry( 4, 0.1,0.5),
  1066. new THREE.MeshPhongMaterial( {
  1067. color: 0xD3D3D3,
  1068. specular: 0x050505,
  1069. shininess: 100
  1070. })
  1071. );
  1072. pv056.position.set(15, 0.5, -11);
  1073. pv056.rotateY( Math.PI );
  1074. pv056.rotateX( 3 * Math.PI / 4);
  1075. pv056.name = "4A_45_00s_056_02";
  1076. scene.add(pv056);
  1077. setMessage("3D", "Loaded PV056.");
  1078. createLabel("056");
  1079. pv057 = new THREE.Mesh(
  1080. new THREE.CubeGeometry( 4, 0.1,0.5),
  1081. new THREE.MeshPhongMaterial( {
  1082. color: 0xD3D3D3,
  1083. specular: 0x050505,
  1084. shininess: 100
  1085. })
  1086. );
  1087. pv057.position.set(9, 0.5, -27.5);
  1088. pv057.rotateY( Math.PI );
  1089. pv057.rotateX( 2 * Math.PI / 3);
  1090. pv057.name = "6A_60_00s_057_02";
  1091. scene.add(pv057);
  1092. setMessage("3D", "Loaded PV057.");
  1093. createLabel("057");
  1094. pv058 = new THREE.Mesh(
  1095. new THREE.CubeGeometry( 4, 0.1,0.5),
  1096. new THREE.MeshPhongMaterial( {
  1097. color: 0xD3D3D3,
  1098. specular: 0x050505,
  1099. shininess: 100
  1100. })
  1101. );
  1102. pv058.position.set(0, 0.5, -30);
  1103. pv058.rotateY( Math.PI );
  1104. pv058.rotateX( 2 * Math.PI / 3);
  1105. pv058.name = "3A_60_00s_058_02";
  1106. scene.add(pv058);
  1107. setMessage("3D", "Loaded PV058.");
  1108. createLabel("058");
  1109. pv059 = new THREE.Mesh(
  1110. new THREE.CubeGeometry( 4, 0.1,0.5),
  1111. new THREE.MeshPhongMaterial( {
  1112. color: 0xD3D3D3,
  1113. specular: 0x050505,
  1114. shininess: 100
  1115. })
  1116. );
  1117. pv059.position.set(8, 0.5, 25.5);
  1118. pv059.rotateY( 11 * Math.PI / 12 );
  1119. pv059.rotateX( 11 * Math.PI / 12);
  1120. pv059.name = "3B_15_15w_059_02";
  1121. scene.add(pv059);
  1122. setMessage("3D", "Loaded PV059.");
  1123. createLabel("059");
  1124. pv060 = new THREE.Mesh(
  1125. new THREE.CubeGeometry( 4, 0.1,0.5),
  1126. new THREE.MeshPhongMaterial( {
  1127. color: 0xD3D3D3,
  1128. specular: 0x050505,
  1129. shininess: 100
  1130. })
  1131. );
  1132. pv060.position.set(2.5, 0.5, 31);
  1133. pv060.rotateY( 11 * Math.PI / 12 );
  1134. pv060.rotateX( 11 * Math.PI / 12);
  1135. pv060.name = "1B_15_15w_060_02";
  1136. scene.add(pv060);
  1137. setMessage("3D", "Loaded PV060.");
  1138. createLabel("060");
  1139. pv061 = new THREE.Mesh(
  1140. new THREE.CubeGeometry( 4, 0.1,0.5),
  1141. new THREE.MeshPhongMaterial( {
  1142. color: 0xD3D3D3,
  1143. specular: 0x050505,
  1144. shininess: 100
  1145. })
  1146. );
  1147. pv061.position.set(9.5, 0.5, 35.5);
  1148. pv061.rotateY( 11 * Math.PI / 12 );
  1149. pv061.rotateX( 11 * Math.PI / 12);
  1150. pv061.name = "4B_15_15w_061_02";
  1151. scene.add(pv061);
  1152. setMessage("3D", "Loaded PV061.");
  1153. createLabel("061");
  1154. pv062 = new THREE.Mesh(
  1155. new THREE.CubeGeometry( 4, 0.1,0.5),
  1156. new THREE.MeshPhongMaterial( {
  1157. color: 0xD3D3D3,
  1158. specular: 0x050505,
  1159. shininess: 100
  1160. })
  1161. );
  1162. pv062.position.set(8, 0.5, 22.15);
  1163. pv062.rotateY( 11 * Math.PI / 12 );
  1164. pv062.rotateX( 5 * Math.PI / 6);
  1165. pv062.name = "3A_30_15w_062_02";
  1166. scene.add(pv062);
  1167. setMessage("3D", "Loaded PV062.");
  1168. createLabel("062");
  1169. pv063 = new THREE.Mesh(
  1170. new THREE.CubeGeometry( 4, 0.1,0.5),
  1171. new THREE.MeshPhongMaterial( {
  1172. color: 0xD3D3D3,
  1173. specular: 0x050505,
  1174. shininess: 100
  1175. })
  1176. );
  1177. pv063.position.set(12.5, 0.5, 23.25);
  1178. pv063.rotateY( 11 * Math.PI / 12 );
  1179. pv063.rotateX( 5 * Math.PI / 6);
  1180. pv063.name = "1A_30_15w_063_02";
  1181. scene.add(pv063);
  1182. setMessage("3D", "Loaded PV063.");
  1183. createLabel("063");
  1184. pv064 = new THREE.Mesh(
  1185. new THREE.CubeGeometry( 4, 0.1,0.5),
  1186. new THREE.MeshPhongMaterial( {
  1187. color: 0xD3D3D3,
  1188. specular: 0x050505,
  1189. shininess: 100
  1190. })
  1191. );
  1192. pv064.position.set(3.5, 0.5, 21);
  1193. pv064.rotateY( 11 * Math.PI / 12 );
  1194. pv064.rotateX( 5 * Math.PI / 6);
  1195. pv064.name = "5A_30_15w_064_02";
  1196. scene.add(pv064);
  1197. setMessage("3D", "Loaded PV064.");
  1198. createLabel("064");
  1199. pv065 = new THREE.Mesh(
  1200. new THREE.CubeGeometry( 4, 0.1,0.5),
  1201. new THREE.MeshPhongMaterial( {
  1202. color: 0xD3D3D3,
  1203. specular: 0x050505,
  1204. shininess: 100
  1205. })
  1206. );
  1207. pv065.position.set(16, 0.5, -19);
  1208. pv065.rotateY( 11 * Math.PI / 12 );
  1209. pv065.rotateX( 3 * Math.PI / 4);
  1210. pv065.name = "3A_45_15w_065_02";
  1211. scene.add(pv065);
  1212. setMessage("3D", "Loaded PV065.");
  1213. createLabel("065");
  1214. pv066 = new THREE.Mesh(
  1215. new THREE.CubeGeometry( 4, 0.1,0.5),
  1216. new THREE.MeshPhongMaterial( {
  1217. color: 0xD3D3D3,
  1218. specular: 0x050505,
  1219. shininess: 100
  1220. })
  1221. );
  1222. pv066.position.set(17, 0.5, -22);
  1223. pv066.rotateY( 11 * Math.PI / 12 );
  1224. pv066.rotateX( 3 * Math.PI / 4);
  1225. pv066.name = "1A_45_15w_066_02";
  1226. scene.add(pv066);
  1227. setMessage("3D", "Loaded PV066.");
  1228. createLabel("066");
  1229. pv067 = new THREE.Mesh(
  1230. new THREE.CubeGeometry( 4, 0.1,0.5),
  1231. new THREE.MeshPhongMaterial( {
  1232. color: 0xD3D3D3,
  1233. specular: 0x050505,
  1234. shininess: 100
  1235. })
  1236. );
  1237. pv067.position.set(15, 0.5, -15);
  1238. pv067.rotateY( 11 * Math.PI / 12 );
  1239. pv067.rotateX( 3 * Math.PI / 4);
  1240. pv067.name = "4A_45_15w_067_02";
  1241. scene.add(pv067);
  1242. setMessage("3D", "Loaded PV067.");
  1243. createLabel("067");
  1244. pv068 = new THREE.Mesh(
  1245. new THREE.CubeGeometry( 4, 0.1,0.5),
  1246. new THREE.MeshPhongMaterial( {
  1247. color: 0xD3D3D3,
  1248. specular: 0x050505,
  1249. shininess: 100
  1250. })
  1251. );
  1252. pv068.position.set(15, 0.5, -27);
  1253. pv068.rotateY( 11 * Math.PI / 12 );
  1254. pv068.rotateX( 2 * Math.PI / 3);
  1255. pv068.name = "6A_60_15w_068_02";
  1256. scene.add(pv068);
  1257. setMessage("3D", "Loaded PV068.");
  1258. createLabel("068");
  1259. pv069 = new THREE.Mesh(
  1260. new THREE.CubeGeometry( 4, 0.1,0.5),
  1261. new THREE.MeshPhongMaterial( {
  1262. color: 0xD3D3D3,
  1263. specular: 0x050505,
  1264. shininess: 100
  1265. })
  1266. );
  1267. pv069.position.set(20, 0.5, -25.75);
  1268. pv069.rotateY( 11 * Math.PI / 12 );
  1269. pv069.rotateX( 2 * Math.PI / 3);
  1270. pv069.name = "3A_60_15w_069_02";
  1271. scene.add(pv069);
  1272. setMessage("3D", "Loaded PV069.");
  1273. createLabel("069");
  1274. pv070 = new THREE.Mesh(
  1275. new THREE.CubeGeometry( 4, 0.1,0.5),
  1276. new THREE.MeshPhongMaterial( {
  1277. color: 0xD3D3D3,
  1278. specular: 0x050505,
  1279. shininess: 100
  1280. })
  1281. );
  1282. pv070.position.set(25, 0.5, -24.5);
  1283. pv070.rotateY( 11 * Math.PI / 12 );
  1284. pv070.rotateX( 2 * Math.PI / 3);
  1285. pv070.name = "1A_60_15w_070_02";
  1286. scene.add(pv070);
  1287. setMessage("3D", "Loaded PV070.");
  1288. createLabel("070");
  1289. pv071 = new THREE.Mesh(
  1290. new THREE.CubeGeometry( 4, 0.1,0.5),
  1291. new THREE.MeshPhongMaterial( {
  1292. color: 0xD3D3D3,
  1293. specular: 0x050505,
  1294. shininess: 100
  1295. })
  1296. );
  1297. pv071.position.set(17, 0.5, 25);
  1298. pv071.rotateY( 11 * Math.PI / 6 );
  1299. pv071.rotateX( Math.PI / 12);
  1300. pv071.name = "3A_15_30w_071_02";
  1301. scene.add(pv071);
  1302. setMessage("3D", "Loaded PV071.");
  1303. createLabel("071");
  1304. pv072 = new THREE.Mesh(
  1305. new THREE.CubeGeometry( 4, 0.1,0.5),
  1306. new THREE.MeshPhongMaterial( {
  1307. color: 0xD3D3D3,
  1308. specular: 0x050505,
  1309. shininess: 100
  1310. })
  1311. );
  1312. pv072.position.set(6.75, 0.5, 32.5);
  1313. pv072.rotateY( 11 * Math.PI / 6 );
  1314. pv072.rotateX( Math.PI / 12);
  1315. pv072.name = "1A_15_30w_072_02";
  1316. scene.add(pv072);
  1317. setMessage("3D", "Loaded PV072.");
  1318. createLabel("072");
  1319. pv073 = new THREE.Mesh(
  1320. new THREE.CubeGeometry( 4, 0.1,0.5),
  1321. new THREE.MeshPhongMaterial( {
  1322. color: 0xD3D3D3,
  1323. specular: 0x050505,
  1324. shininess: 100
  1325. })
  1326. );
  1327. pv073.position.set(10.5, 0.5, 38.25);
  1328. pv073.rotateY( 11 * Math.PI / 6 );
  1329. pv073.rotateX( Math.PI / 12);
  1330. pv073.name = "1B_15_30w_073_02";
  1331. scene.add(pv073);
  1332. setMessage("3D", "Loaded PV073.");
  1333. createLabel("073");
  1334. pv074 = new THREE.Mesh(
  1335. new THREE.CubeGeometry( 4, 0.1,0.5),
  1336. new THREE.MeshPhongMaterial( {
  1337. color: 0xD3D3D3,
  1338. specular: 0x050505,
  1339. shininess: 100
  1340. })
  1341. );
  1342. pv074.position.set(12.5, 0.5, 27.5);
  1343. pv074.rotateY( 11 * Math.PI / 6 );
  1344. pv074.rotateX( Math.PI / 12);
  1345. pv074.name = "1D_15_30w_074_02";
  1346. scene.add(pv074);
  1347. setMessage("3D", "Loaded PV074.");
  1348. createLabel("074");
  1349. pv075 = new THREE.Mesh(
  1350. new THREE.CubeGeometry( 4, 0.1,0.5),
  1351. new THREE.MeshPhongMaterial( {
  1352. color: 0xD3D3D3,
  1353. specular: 0x050505,
  1354. shininess: 100
  1355. })
  1356. );
  1357. pv075.position.set(7.5, 0.5, 29.5);
  1358. pv075.rotateY( 11 * Math.PI / 6 );
  1359. pv075.rotateX( Math.PI / 12);
  1360. pv075.name = "1C_15_30w_075_02";
  1361. scene.add(pv075);
  1362. createLabel("075");
  1363. pv076 = new THREE.Mesh(
  1364. new THREE.CubeGeometry( 4, 0.1,0.5),
  1365. new THREE.MeshPhongMaterial( {
  1366. color: 0xD3D3D3,
  1367. specular: 0x050505,
  1368. shininess: 100
  1369. })
  1370. );
  1371. pv076.position.set(11, 0.5, 33.5);
  1372. pv076.rotateY( 11 * Math.PI / 6 );
  1373. pv076.rotateX( Math.PI / 12);
  1374. pv076.name = "5D_15_30w_076_02";
  1375. scene.add(pv076);
  1376. setMessage("3D", "Loaded PV076.");
  1377. createLabel("076");
  1378. pv077 = new THREE.Mesh(
  1379. new THREE.CubeGeometry( 4, 0.1,0.5),
  1380. new THREE.MeshPhongMaterial( {
  1381. color: 0xD3D3D3,
  1382. specular: 0x050505,
  1383. shininess: 100
  1384. })
  1385. );
  1386. pv077.position.set(13, 0.5, 12);
  1387. pv077.rotateY( 11 * Math.PI / 6 );
  1388. pv077.rotateX( Math.PI / 6);
  1389. pv077.name = "6D_30_30w_077_02";
  1390. scene.add(pv077);
  1391. setMessage("3D", "Loaded PV077.");
  1392. createLabel("077");
  1393. pv078 = new THREE.Mesh(
  1394. new THREE.CubeGeometry( 4, 0.1,0.5),
  1395. new THREE.MeshPhongMaterial( {
  1396. color: 0xD3D3D3,
  1397. specular: 0x050505,
  1398. shininess: 100
  1399. })
  1400. );
  1401. pv078.position.set(12, 0.5, 15);
  1402. pv078.rotateY( 11 * Math.PI / 6 );
  1403. pv078.rotateX( Math.PI / 6);
  1404. pv078.name = "3D_30_30w_078_02";
  1405. scene.add(pv078);
  1406. setMessage("3D", "Loaded PV078.");
  1407. createLabel("078");
  1408. pv079 = new THREE.Mesh(
  1409. new THREE.CubeGeometry( 4, 0.1,0.5),
  1410. new THREE.MeshPhongMaterial( {
  1411. color: 0xD3D3D3,
  1412. specular: 0x050505,
  1413. shininess: 100
  1414. })
  1415. );
  1416. pv079.position.set(14, 0.5, 9);
  1417. pv079.rotateY( 11 * Math.PI / 6 );
  1418. pv079.rotateX( Math.PI / 6);
  1419. pv079.name = "1D_30_30w_079_02";
  1420. scene.add(pv079);
  1421. setMessage("3D", "Loaded PV079.");
  1422. createLabel("079");
  1423. pv080 = new THREE.Mesh(
  1424. new THREE.CubeGeometry( 4, 0.1,0.5),
  1425. new THREE.MeshPhongMaterial( {
  1426. color: 0xD3D3D3,
  1427. specular: 0x050505,
  1428. shininess: 100
  1429. })
  1430. );
  1431. pv080.position.set(20, 0.5, -4);
  1432. pv080.rotateY( 11 * Math.PI / 6 );
  1433. pv080.rotateX( Math.PI / 4);
  1434. pv080.name = "3A_45_30w_080_02";
  1435. scene.add(pv080);
  1436. setMessage("3D", "Loaded PV080.");
  1437. createLabel("080");
  1438. pv081 = new THREE.Mesh(
  1439. new THREE.CubeGeometry( 4, 0.1,0.5),
  1440. new THREE.MeshPhongMaterial( {
  1441. color: 0xD3D3D3,
  1442. specular: 0x050505,
  1443. shininess: 100
  1444. })
  1445. );
  1446. pv081.position.set(21, 0.5, -7);
  1447. pv081.rotateY( 11 * Math.PI / 6 );
  1448. pv081.rotateX( Math.PI / 4);
  1449. pv081.name = "1A_45_30w_081_02";
  1450. scene.add(pv081);
  1451. setMessage("3D", "Loaded PV081.");
  1452. createLabel("081");
  1453. pv082 = new THREE.Mesh(
  1454. new THREE.CubeGeometry( 4, 0.1,0.5),
  1455. new THREE.MeshPhongMaterial( {
  1456. color: 0xD3D3D3,
  1457. specular: 0x050505,
  1458. shininess: 100
  1459. })
  1460. );
  1461. pv082.position.set(21.5, 0.5, -11);
  1462. pv082.rotateY( 11 * Math.PI / 6 );
  1463. pv082.rotateX( Math.PI / 4);
  1464. pv082.name = "5A_45_30w_082_02";
  1465. scene.add(pv082);
  1466. setMessage("3D", "Loaded PV082.");
  1467. createLabel("082");
  1468. pv083 = new THREE.Mesh(
  1469. new THREE.CubeGeometry( 4, 0.1,0.5),
  1470. new THREE.MeshPhongMaterial( {
  1471. color: 0xD3D3D3,
  1472. specular: 0x050505,
  1473. shininess: 100
  1474. })
  1475. );
  1476. pv083.position.set(24, 0.5, -21);
  1477. pv083.rotateY( 11 * Math.PI / 6 );
  1478. pv083.rotateX( Math.PI / 3);
  1479. pv083.name = "6A_60_30w_083_02";
  1480. scene.add(pv083);
  1481. setMessage("3D", "Loaded PV083.");
  1482. createLabel("083");
  1483. pv084 = new THREE.Mesh(
  1484. new THREE.CubeGeometry( 4, 0.1,0.5),
  1485. new THREE.MeshPhongMaterial( {
  1486. color: 0xD3D3D3,
  1487. specular: 0x050505,
  1488. shininess: 100
  1489. })
  1490. );
  1491. pv084.position.set(23, 0.5, -18);
  1492. pv084.rotateY( 11 * Math.PI / 6 );
  1493. pv084.rotateX( Math.PI / 3);
  1494. pv084.name = "3A_60_30w_084_02";
  1495. scene.add(pv084);
  1496. setMessage("3D", "Loaded PV084.");
  1497. createLabel("084");
  1498. pv085 = new THREE.Mesh(
  1499. new THREE.CubeGeometry( 4, 0.1,0.5),
  1500. new THREE.MeshPhongMaterial( {
  1501. color: 0xD3D3D3,
  1502. specular: 0x050505,
  1503. shininess: 100
  1504. })
  1505. );
  1506. pv085.position.set(23, 0.5, -14);
  1507. pv085.rotateY( 11 * Math.PI / 6 );
  1508. pv085.rotateX( Math.PI / 3);
  1509. pv085.name = "1A_60_30w_085_02";
  1510. scene.add(pv085);
  1511. setMessage("3D", "Loaded PV085.");
  1512. createLabel("085");
  1513. pv086 = new THREE.Mesh(
  1514. new THREE.CubeGeometry( 4, 0.1,0.5),
  1515. new THREE.MeshPhongMaterial( {
  1516. color: 0xD3D3D3,
  1517. specular: 0x050505,
  1518. shininess: 100
  1519. })
  1520. );
  1521. pv086.position.set(12, 0.5, 30.5);
  1522. pv086.rotateY( 7 * Math.PI / 4 );
  1523. pv086.rotateX( Math.PI / 12);
  1524. pv086.name = "2A_15_45w_086_02";
  1525. scene.add(pv086);
  1526. setMessage("3D", "Loaded PV086.");
  1527. createLabel("086");
  1528. pv087 = new THREE.Mesh(
  1529. new THREE.CubeGeometry( 4, 0.1,0.5),
  1530. new THREE.MeshPhongMaterial( {
  1531. color: 0xD3D3D3,
  1532. specular: 0x050505,
  1533. shininess: 100
  1534. })
  1535. );
  1536. pv087.position.set(16, 0.5, 30.5);
  1537. pv087.rotateY( 7 * Math.PI / 4 );
  1538. pv087.rotateX( Math.PI / 12);
  1539. pv087.name = "1A_15_45w_087_02";
  1540. scene.add(pv087);
  1541. setMessage("3D", "Loaded PV087.");
  1542. createLabel("087");
  1543. pv088 = new THREE.Mesh(
  1544. new THREE.CubeGeometry( 4, 0.1,0.5),
  1545. new THREE.MeshPhongMaterial( {
  1546. color: 0xD3D3D3,
  1547. specular: 0x050505,
  1548. shininess: 100
  1549. })
  1550. );
  1551. pv088.position.set(17, 0.5, 27.5);
  1552. pv088.rotateY( 7 * Math.PI / 4 );
  1553. pv088.rotateX( Math.PI / 12);
  1554. pv088.name = "4A_15_45w_088_02";
  1555. scene.add(pv088);
  1556. setMessage("3D", "Loaded PV088.");
  1557. createLabel("088");
  1558. pv089 = new THREE.Mesh(
  1559. new THREE.CubeGeometry( 4, 0.1,0.5),
  1560. new THREE.MeshPhongMaterial( {
  1561. color: 0xD3D3D3,
  1562. specular: 0x050505,
  1563. shininess: 100
  1564. })
  1565. );
  1566. pv089.position.set(20, 0.5, 11);
  1567. pv089.rotateY( 7 * Math.PI / 4 );
  1568. pv089.rotateX( Math.PI / 6);
  1569. pv089.name = "6A_30_45w_089_02";
  1570. scene.add(pv089);
  1571. setMessage("3D", "Loaded PV089.");
  1572. createLabel("089");
  1573. pv090 = new THREE.Mesh(
  1574. new THREE.CubeGeometry( 4, 0.1,0.5),
  1575. new THREE.MeshPhongMaterial( {
  1576. color: 0xD3D3D3,
  1577. specular: 0x050505,
  1578. shininess: 100
  1579. })
  1580. );
  1581. pv090.position.set(19, 0.5, 14);
  1582. pv090.rotateY( 7 * Math.PI / 4 );
  1583. pv090.rotateX( Math.PI / 6);
  1584. pv090.name = "2A_30_45w_090_02";
  1585. scene.add(pv090);
  1586. setMessage("3D", "Loaded PV090.");
  1587. createLabel("090");
  1588. pv091 = new THREE.Mesh(
  1589. new THREE.CubeGeometry( 4, 0.1,0.5),
  1590. new THREE.MeshPhongMaterial( {
  1591. color: 0xD3D3D3,
  1592. specular: 0x050505,
  1593. shininess: 100
  1594. })
  1595. );
  1596. pv091.position.set(29, 0.5, -14);
  1597. pv091.rotateY( 7 * Math.PI / 4 );
  1598. pv091.rotateX( Math.PI / 4);
  1599. pv091.name = "2C_45_45w_091_02";
  1600. scene.add(pv091);
  1601. setMessage("3D", "Loaded PV091.");
  1602. createLabel("091");
  1603. pv092 = new THREE.Mesh(
  1604. new THREE.CubeGeometry( 4, 0.1,0.5),
  1605. new THREE.MeshPhongMaterial( {
  1606. color: 0xD3D3D3,
  1607. specular: 0x050505,
  1608. shininess: 100
  1609. })
  1610. );
  1611. pv092.position.set(23, 0.5, 7);
  1612. pv092.rotateY( 7 * Math.PI / 4 );
  1613. pv092.rotateX( Math.PI / 4);
  1614. pv092.name = "4C_45_45w_092_02";
  1615. scene.add(pv092);
  1616. setMessage("3D", "Loaded PV092.");
  1617. createLabel("092");
  1618. pv093 = new THREE.Mesh(
  1619. new THREE.CubeGeometry( 4, 0.1,0.5),
  1620. new THREE.MeshPhongMaterial( {
  1621. color: 0xD3D3D3,
  1622. specular: 0x050505,
  1623. shininess: 100
  1624. })
  1625. );
  1626. pv093.position.set(30, 0.5, -18);
  1627. pv093.rotateY( 7 * Math.PI / 4 );
  1628. pv093.rotateX( Math.PI / 3);
  1629. pv093.name = "6A_60_45w_093_02";
  1630. scene.add(pv093);
  1631. setMessage("3D", "Loaded PV093.");
  1632. createLabel("093");
  1633. pv094 = new THREE.Mesh(
  1634. new THREE.CubeGeometry( 4, 0.1,0.5),
  1635. new THREE.MeshPhongMaterial( {
  1636. color: 0xD3D3D3,
  1637. specular: 0x050505,
  1638. shininess: 100
  1639. })
  1640. );
  1641. pv094.position.set(30, 0.5, -22);
  1642. pv094.rotateY( 7 * Math.PI / 4 );
  1643. pv094.rotateX( Math.PI / 3);
  1644. pv094.name = "2A_60_45w_094_02";
  1645. scene.add(pv094);
  1646. setMessage("3D", "Loaded PV094.");
  1647. createLabel("094");
  1648. pv095 = new THREE.Mesh(
  1649. new THREE.CubeGeometry( 4, 0.1,0.5),
  1650. new THREE.MeshPhongMaterial( {
  1651. color: 0xD3D3D3,
  1652. specular: 0x050505,
  1653. shininess: 100
  1654. })
  1655. );
  1656. pv095.position.set(15, 0.5, 34);
  1657. pv095.rotateY( 5 * Math.PI / 3);
  1658. pv095.rotateX( Math.PI / 12);
  1659. pv095.name = "6A_15_60w_095_02";
  1660. scene.add(pv095);
  1661. setMessage("3D", "Loaded PV095.");
  1662. createLabel("095");
  1663. pv096 = new THREE.Mesh(
  1664. new THREE.CubeGeometry( 4, 0.1,0.5),
  1665. new THREE.MeshPhongMaterial( {
  1666. color: 0xD3D3D3,
  1667. specular: 0x050505,
  1668. shininess: 100
  1669. })
  1670. );
  1671. pv096.position.set(14, 0.5, 37);
  1672. pv096.rotateY( 5 * Math.PI / 3);
  1673. pv096.rotateX( Math.PI / 12);
  1674. pv096.name = "2A_15_60w_096_02";
  1675. scene.add(pv096);
  1676. setMessage("3D", "Loaded PV096.");
  1677. createLabel("096");
  1678. pv097 = new THREE.Mesh(
  1679. new THREE.CubeGeometry( 4, 0.1,0.5),
  1680. new THREE.MeshPhongMaterial( {
  1681. color: 0xD3D3D3,
  1682. specular: 0x050505,
  1683. shininess: 100
  1684. })
  1685. );
  1686. pv097.position.set(16, 0.5, 20);
  1687. pv097.rotateY( 5 * Math.PI / 3);
  1688. pv097.rotateX( Math.PI / 6);
  1689. pv097.name = "6A_30_60w_097_02";
  1690. scene.add(pv097);
  1691. setMessage("3D", "Loaded PV097.");
  1692. createLabel("097");
  1693. pv098 = new THREE.Mesh(
  1694. new THREE.CubeGeometry( 4, 0.1,0.5),
  1695. new THREE.MeshPhongMaterial( {
  1696. color: 0xD3D3D3,
  1697. specular: 0x050505,
  1698. shininess: 100
  1699. })
  1700. );
  1701. pv098.position.set(17, 0.5, 17);
  1702. pv098.rotateY( 5 * Math.PI / 3);
  1703. pv098.rotateX( Math.PI / 6);
  1704. pv098.name = "1A_30_60w_098_02";
  1705. scene.add(pv098);
  1706. setMessage("3D", "Loaded PV098.");
  1707. createLabel("098");
  1708. pv099 = new THREE.Mesh(
  1709. new THREE.CubeGeometry( 4, 0.1,0.5),
  1710. new THREE.MeshPhongMaterial( {
  1711. color: 0xD3D3D3,
  1712. specular: 0x050505,
  1713. shininess: 100
  1714. })
  1715. );
  1716. pv099.position.set(25, 0.5, -1);
  1717. pv099.rotateY( 5 * Math.PI / 3);
  1718. pv099.rotateX( Math.PI / 4);
  1719. pv099.name = "6A_45_60w_099_02";
  1720. scene.add(pv099);
  1721. setMessage("3D", "Loaded PV099.");
  1722. createLabel("099");
  1723. pv100 = new THREE.Mesh(
  1724. new THREE.CubeGeometry( 4, 0.1,0.5),
  1725. new THREE.MeshPhongMaterial( {
  1726. color: 0xD3D3D3,
  1727. specular: 0x050505,
  1728. shininess: 100
  1729. })
  1730. );
  1731. pv100.position.set(22, 0.5, 2);
  1732. pv100.rotateY( 5 * Math.PI / 3);
  1733. pv100.rotateX( Math.PI / 4);
  1734. pv100.name = "1A_45_60w_100_02";
  1735. scene.add(pv100);
  1736. setMessage("3D", "Loaded PV100.");
  1737. createLabel("100");
  1738. pv101 = new THREE.Mesh(
  1739. new THREE.CubeGeometry( 4, 0.1,0.5),
  1740. new THREE.MeshPhongMaterial( {
  1741. color: 0xD3D3D3,
  1742. specular: 0x050505,
  1743. shininess: 100
  1744. })
  1745. );
  1746. pv101.position.set(28, 0.5, -10);
  1747. pv101.rotateY( 5 * Math.PI / 3);
  1748. pv101.rotateX( Math.PI / 3);
  1749. pv101.name = "2C_60_60w_101_02";
  1750. scene.add(pv101);
  1751. setMessage("3D", "Loaded PV101.");
  1752. createLabel("101");
  1753. pv102 = new THREE.Mesh(
  1754. new THREE.CubeGeometry( 4, 0.1,0.5),
  1755. new THREE.MeshPhongMaterial( {
  1756. color: 0xD3D3D3,
  1757. specular: 0x050505,
  1758. shininess: 100
  1759. })
  1760. );
  1761. pv102.position.set(26, 0.5, -6);
  1762. pv102.rotateY( 5 * Math.PI / 3);
  1763. pv102.rotateX( Math.PI / 3);
  1764. pv102.name = "1C_60_60w_102_02";
  1765. scene.add(pv102);
  1766. setMessage("3D", "Loaded PV102.");
  1767. createLabel("102");
  1768. /* --------------------------------------------------- */
  1769. pv001a = new THREE.Mesh(
  1770. new THREE.CubeGeometry( 4, 0.1,0.5),
  1771. new THREE.MeshPhongMaterial( {
  1772. color: 0xD3D3D3,
  1773. specular: 0x050505,
  1774. shininess: 100
  1775. })
  1776. );
  1777. pv001a.position.set(-18.418, 0.6, 28.758);
  1778. pv001a.rotateY( Math.PI / 3 );
  1779. pv001a.rotateX( Math.PI / 12);
  1780. pv001a.name = "2A_15_60e_001_01";
  1781. scene.add(pv001a);
  1782. pv002a = new THREE.Mesh(
  1783. new THREE.CubeGeometry( 4, 0.1,0.5),
  1784. new THREE.MeshPhongMaterial( {
  1785. color: 0xD3D3D3,
  1786. specular: 0x050505,
  1787. shininess: 100
  1788. })
  1789. );
  1790. pv002a.position.set(-14.418, 0.6, 29.758);
  1791. pv002a.rotateY( Math.PI / 3 );
  1792. pv002a.rotateX( Math.PI / 12);
  1793. pv002a.name = "5A_15_60e_002_01";
  1794. scene.add(pv002a);
  1795. pv003a = new THREE.Mesh(
  1796. new THREE.CubeGeometry( 4, 0.1,0.5),
  1797. new THREE.MeshPhongMaterial( {
  1798. color: 0xD3D3D3,
  1799. specular: 0x050505,
  1800. shininess: 100
  1801. })
  1802. );
  1803. //pv003.position.set(9.5, 0.5, 2);
  1804. pv003a.position.set(9.125, 0.7, 1.783);
  1805. pv003a.rotateY( Math.PI / 3 );
  1806. pv003a.rotateX( Math.PI / 6);
  1807. pv003a.name = "6A_30_60e_003_01";
  1808. scene.add(pv003a);
  1809. pv004a = new THREE.Mesh(
  1810. new THREE.CubeGeometry( 4, 0.1,0.5),
  1811. new THREE.MeshPhongMaterial( {
  1812. color: 0xD3D3D3,
  1813. specular: 0x050505,
  1814. shininess: 100
  1815. })
  1816. );
  1817. //pv004.position.set(6, 0.5, 1);
  1818. pv004a.position.set(5.625, 0.7, 0.783);
  1819. pv004a.rotateY( Math.PI / 3 );
  1820. pv004a.rotateX( Math.PI / 6);
  1821. pv004a.name = "1A_30_60e_004_01";
  1822. scene.add(pv004a);
  1823. pv005a = new THREE.Mesh(
  1824. new THREE.CubeGeometry(4, 0.1, 0.5),
  1825. new THREE.MeshPhongMaterial( {
  1826. color: 0xD3D3D3,
  1827. specular: 0x050505,
  1828. shininess: 100
  1829. })
  1830. );
  1831. //pv005a.position.set(-8, 0.5, -3);
  1832. pv005a.position.set(-8.375, 0.8, -3.216);
  1833. pv005a.rotateY( Math.PI / 3 );
  1834. pv005a.rotateX( Math.PI / 4);
  1835. pv005a.name = "6A_45_60e_005_01";
  1836. scene.add(pv005a);
  1837. pv006a = new THREE.Mesh(
  1838. new THREE.CubeGeometry( 4, 0.1,0.5),
  1839. new THREE.MeshPhongMaterial( {
  1840. color: 0xD3D3D3,
  1841. specular: 0x050505,
  1842. shininess: 100
  1843. })
  1844. );
  1845. //pv006a.position.set(-4.5, 0.5, -2);
  1846. pv006a.position.set(-4.806, 0.8, -2.177);
  1847. pv006a.rotateY( Math.PI / 3 );
  1848. pv006a.rotateX( Math.PI / 4);
  1849. pv006a.name = "1A_45_60e_006_01";
  1850. scene.add(pv006a);
  1851. pv007a = new THREE.Mesh(
  1852. new THREE.CubeGeometry( 4, 0.1,0.5),
  1853. new THREE.MeshPhongMaterial( {
  1854. color: 0xD3D3D3,
  1855. specular: 0x050505,
  1856. shininess: 100
  1857. })
  1858. );
  1859. //pv007a.position.set(-5, 0.5, -16);
  1860. pv007a.position.set(-5.216, 0.9, -16.125);
  1861. pv007a.rotateY( Math.PI / 3 );
  1862. pv007a.rotateX( Math.PI / 3);
  1863. pv007a.name = "6C_60_60e_007_01";
  1864. scene.add(pv007a);
  1865. pv008a = new THREE.Mesh(
  1866. new THREE.CubeGeometry( 4, 0.1,0.5),
  1867. new THREE.MeshPhongMaterial( {
  1868. color: 0xD3D3D3,
  1869. specular: 0x050505,
  1870. shininess: 100
  1871. })
  1872. );
  1873. //pv008a.position.set(-7, 0.5, -9);
  1874. pv008a.position.set(-7.216, 0.9, -9.125);
  1875. pv008a.rotateY( Math.PI / 3 );
  1876. pv008a.rotateX( Math.PI / 3);
  1877. pv008a.name = "1C_60_60e_008_01";
  1878. scene.add(pv008a);
  1879. pv009a = new THREE.Mesh(
  1880. new THREE.CubeGeometry( 4, 0.1,0.5),
  1881. new THREE.MeshPhongMaterial( {
  1882. color: 0xD3D3D3,
  1883. specular: 0x050505,
  1884. shininess: 100
  1885. })
  1886. );
  1887. //pv009a.position.set(13, 0.5, 3);
  1888. pv009a.position.set(12.658, 0.6, 2.658);
  1889. pv009a.rotateY( Math.PI / 4 );
  1890. pv009a.rotateX( Math.PI / 12);
  1891. pv009a.name = "2A_15_45e_009_01";
  1892. scene.add(pv009a);
  1893. pv010a = new THREE.Mesh(
  1894. new THREE.CubeGeometry( 4, 0.1,0.5),
  1895. new THREE.MeshPhongMaterial( {
  1896. color: 0xD3D3D3,
  1897. specular: 0x050505,
  1898. shininess: 100
  1899. })
  1900. );
  1901. pv010a.position.set(17.658, 0.6, 3.658);
  1902. pv010a.rotateY( Math.PI / 4 );
  1903. pv010a.rotateX( Math.PI / 12);
  1904. pv010a.name = "1A_15_45e_010_01";
  1905. scene.add(pv010a);
  1906. pv011a = new THREE.Mesh(
  1907. new THREE.CubeGeometry( 4, 0.1,0.5),
  1908. new THREE.MeshPhongMaterial( {
  1909. color: 0xD3D3D3,
  1910. specular: 0x050505,
  1911. shininess: 100
  1912. })
  1913. );
  1914. //pv011a.position.set(3.5, 0.5, -0.5);
  1915. pv011a.position.set(3.158, 0.6, -0.841);
  1916. pv011a.rotateY( Math.PI / 4 );
  1917. pv011a.rotateX( Math.PI / 12);
  1918. pv011a.name = "4A_15_45e_011_01";
  1919. scene.add(pv011a);
  1920. pv012a = new THREE.Mesh(
  1921. new THREE.CubeGeometry( 4, 0.1,0.5),
  1922. new THREE.MeshPhongMaterial( {
  1923. color: 0xD3D3D3,
  1924. specular: 0x050505,
  1925. shininess: 100
  1926. })
  1927. );
  1928. //pv012a.position.set(17, 0.5, -1);
  1929. pv012a.position.set(16.693, 0.7, -1.306);
  1930. pv012a.rotateY( Math.PI / 4 );
  1931. pv012a.rotateX( Math.PI / 6);
  1932. pv012a.name = "6A_30_45e_012_01";
  1933. scene.add(pv012a);
  1934. pv013a = new THREE.Mesh(
  1935. new THREE.CubeGeometry( 4, 0.1,0.5),
  1936. new THREE.MeshPhongMaterial( {
  1937. color: 0xD3D3D3,
  1938. specular: 0x050505,
  1939. shininess: 100
  1940. })
  1941. );
  1942. //pv013a.position.set(-2, 0.5, -1);
  1943. pv013a.position.set(-2.306, 0.7, -1.306);
  1944. pv013a.rotateY( Math.PI / 4 );
  1945. pv013a.rotateX( Math.PI / 6);
  1946. pv013a.name = "2A_30_45e_013_01";
  1947. scene.add(pv013a);
  1948. pv014a = new THREE.Mesh(
  1949. new THREE.CubeGeometry( 4, 0.1,0.5),
  1950. new THREE.MeshPhongMaterial( {
  1951. color: 0xD3D3D3,
  1952. specular: 0x050505,
  1953. shininess: 100
  1954. })
  1955. );
  1956. //pv014a.position.set(9, 0.5, -3);
  1957. pv014a.position.set(8.75, 0.8, -3.25);
  1958. pv014a.rotateY( Math.PI / 4 );
  1959. pv014a.rotateX( Math.PI / 4);
  1960. pv014a.name = "2A_45_45e_014_01";
  1961. scene.add(pv014a);
  1962. pv015a = new THREE.Mesh(
  1963. new THREE.CubeGeometry(4, 0.1,0.5),
  1964. new THREE.MeshPhongMaterial({
  1965. color: 0xD3D3D3,
  1966. specular: 0x050505,
  1967. shininess: 100
  1968. })
  1969. );
  1970. //pv015a.position.set(12.5, 0.5, -2);
  1971. pv015a.position.set(12.25, 0.8, -2.25);
  1972. pv015a.rotateY( Math.PI / 4 );
  1973. pv015a.rotateX( Math.PI / 4);
  1974. pv015a.name = "4A_45_45e_015_01";
  1975. scene.add(pv015a);
  1976. pv016a = new THREE.Mesh(
  1977. new THREE.CubeGeometry( 4, 0.1,0.5),
  1978. new THREE.MeshPhongMaterial( {
  1979. color: 0xD3D3D3,
  1980. specular: 0x050505,
  1981. shininess: 100
  1982. })
  1983. );
  1984. //pv016a.position.set(-1, 0.5, -22);
  1985. pv016a.position.set(-1.176, 0.9, -22.176);
  1986. pv016a.rotateY( Math.PI / 4 );
  1987. pv016a.rotateX( Math.PI / 3);
  1988. pv016a.name = "6A_60_45e_016_01";
  1989. scene.add(pv016a);
  1990. pv017a = new THREE.Mesh(
  1991. new THREE.CubeGeometry( 4, 0.1,0.5),
  1992. new THREE.MeshPhongMaterial( {
  1993. color: 0xD3D3D3,
  1994. specular: 0x050505,
  1995. shininess: 100
  1996. })
  1997. );
  1998. pv017a.position.set(-2.176, 0.9, -26.176);
  1999. pv017a.rotateY( Math.PI / 4 );
  2000. pv017a.rotateX( Math.PI / 3);
  2001. pv017a.name = "2A_60_45e_017_01";
  2002. scene.add(pv017a);
  2003. pv018a = new THREE.Mesh(
  2004. new THREE.CubeGeometry( 4, 0.1,0.5),
  2005. new THREE.MeshPhongMaterial( {
  2006. color: 0xD3D3D3,
  2007. specular: 0x050505,
  2008. shininess: 100
  2009. })
  2010. );
  2011. //pv018a.position.set(-8.5, 0.5, 23);
  2012. pv018a.position.set(-8.741, 0.6, 22.581);
  2013. pv018a.rotateY( Math.PI / 6 );
  2014. pv018a.rotateX( Math.PI / 12);
  2015. pv018a.name = "3A_15_30e_018_01";
  2016. scene.add(pv018a);
  2017. pv019a = new THREE.Mesh(
  2018. new THREE.CubeGeometry( 4, 0.1,0.5),
  2019. new THREE.MeshPhongMaterial( {
  2020. color: 0xD3D3D3,
  2021. specular: 0x050505,
  2022. shininess: 100
  2023. })
  2024. );
  2025. //pv019a.position.set(-10, 0.5, 26.5);
  2026. pv019a.position.set(-10.241, 0.6, 26.082);
  2027. pv019a.rotateY( Math.PI / 6 );
  2028. pv019a.rotateX( Math.PI / 12);
  2029. pv019a.name = "1A_15_30e_019_01";
  2030. scene.add(pv019a);
  2031. pv020a = new THREE.Mesh(
  2032. new THREE.CubeGeometry( 4, 0.1,0.5),
  2033. new THREE.MeshPhongMaterial( {
  2034. color: 0xD3D3D3,
  2035. specular: 0x050505,
  2036. shininess: 100
  2037. })
  2038. );
  2039. //pv020a.position.set(6, 0.5, 14);
  2040. pv020a.position.set(5.758, 0.6, 13.582);
  2041. pv020a.rotateY( Math.PI / 6 );
  2042. pv020a.rotateX( Math.PI / 12);
  2043. pv020a.name = "1B_15_30e_020_01";
  2044. scene.add(pv020a);
  2045. pv021a = new THREE.Mesh(
  2046. new THREE.CubeGeometry( 4, 0.1,0.5),
  2047. new THREE.MeshPhongMaterial( {
  2048. color: 0xD3D3D3,
  2049. specular: 0x050505,
  2050. shininess: 100
  2051. })
  2052. );
  2053. //pv021a.position.set(12, 0.5, 19);
  2054. pv021a.position.set(11.785, 0.6, 18.582);
  2055. pv021a.rotateY( Math.PI / 6 );
  2056. pv021a.rotateX( Math.PI / 12);
  2057. pv021a.name = "1D_15_30e_021_01";
  2058. scene.add(pv021a);
  2059. pv022a = new THREE.Mesh(
  2060. new THREE.CubeGeometry( 4, 0.1,0.5),
  2061. new THREE.MeshPhongMaterial( {
  2062. color: 0xD3D3D3,
  2063. specular: 0x050505,
  2064. shininess: 100
  2065. })
  2066. );
  2067. //pv022a.position.set(6, 0.5, 17);
  2068. pv022a.position.set(5.758, 0.6, 16.582);
  2069. pv022a.rotateY( Math.PI / 6 );
  2070. pv022a.rotateX( Math.PI / 12);
  2071. pv022a.name = "1C_15_30e_022_01";
  2072. scene.add(pv022a);
  2073. pv023a = new THREE.Mesh(
  2074. new THREE.CubeGeometry( 4, 0.1,0.5),
  2075. new THREE.MeshPhongMaterial( {
  2076. color: 0xD3D3D3,
  2077. specular: 0x050505,
  2078. shininess: 100
  2079. })
  2080. );
  2081. //pv023a.position.set(9, 0.5, 18);
  2082. pv023a.position.set(8.758, 0.6, 17.582);
  2083. pv023a.rotateY( Math.PI / 6 );
  2084. pv023a.rotateX( Math.PI / 12);
  2085. pv023a.name = "5A_15_30e_023_01";
  2086. scene.add(pv023a);
  2087. pv024a = new THREE.Mesh(
  2088. new THREE.CubeGeometry( 4, 0.1,0.5),
  2089. new THREE.MeshPhongMaterial( {
  2090. color: 0xD3D3D3,
  2091. specular: 0x050505,
  2092. shininess: 100
  2093. })
  2094. );
  2095. //pv024a.position.set(-16, 0.5, 24);
  2096. pv024a.position.set(-16.216, 0.7, 23.625);
  2097. pv024a.rotateY( Math.PI / 6 );
  2098. pv024a.rotateX( Math.PI / 6);
  2099. pv024a.name = "6D_30_30e_024_01";
  2100. scene.add(pv024a);
  2101. pv025a = new THREE.Mesh(
  2102. new THREE.CubeGeometry( 4, 0.1,0.5),
  2103. new THREE.MeshPhongMaterial( {
  2104. color: 0xD3D3D3,
  2105. specular: 0x050505,
  2106. shininess: 100
  2107. })
  2108. );
  2109. //pv025a.position.set(-15, 0.5, 26);
  2110. pv025a.position.set(-15.216, 0.7, 25.625);
  2111. pv025a.rotateY( Math.PI / 6 );
  2112. pv025a.rotateX( Math.PI / 6);
  2113. pv025a.name = "3D_30_30e_025_01";
  2114. scene.add(pv025a);
  2115. pv026a = new THREE.Mesh(
  2116. new THREE.CubeGeometry( 4, 0.1,0.5),
  2117. new THREE.MeshPhongMaterial( {
  2118. color: 0xD3D3D3,
  2119. specular: 0x050505,
  2120. shininess: 100
  2121. })
  2122. );
  2123. //pv026a.position.set(1.5, 0.5, -7.5);
  2124. pv026a.position.set(1.323, 0.8, -7.806);
  2125. pv026a.rotateY( Math.PI / 6 );
  2126. pv026a.rotateX( Math.PI / 4);
  2127. pv026a.name = "6A_45_30e_026_01";
  2128. scene.add(pv026a);
  2129. pv027a = new THREE.Mesh(
  2130. new THREE.CubeGeometry( 4, 0.1,0.5),
  2131. new THREE.MeshPhongMaterial( {
  2132. color: 0xD3D3D3,
  2133. specular: 0x050505,
  2134. shininess: 100
  2135. })
  2136. );
  2137. //pv027a.position.set(-3, 0.5, -8.5);
  2138. pv027a.position.set(-3.177, 0.8, -8.806);
  2139. pv027a.rotateY( Math.PI / 6 );
  2140. pv027a.rotateX( Math.PI / 4);
  2141. pv027a.name = "3A_45_30e_027_01";
  2142. scene.add(pv027a);
  2143. pv028a = new THREE.Mesh(
  2144. new THREE.CubeGeometry( 4, 0.1,0.5),
  2145. new THREE.MeshPhongMaterial( {
  2146. color: 0xD3D3D3,
  2147. specular: 0x050505,
  2148. shininess: 100
  2149. })
  2150. );
  2151. //pv028a.position.set(3, 0.5, -4.5);
  2152. pv028a.position.set(2.823, 0.8, -4.806);
  2153. pv028a.rotateY( Math.PI / 6 );
  2154. pv028a.rotateX( Math.PI / 4);
  2155. pv028a.name = "1A_45_30e_028_01";
  2156. scene.add(pv028a);
  2157. pv029a = new THREE.Mesh(
  2158. new THREE.CubeGeometry( 4, 0.1,0.5),
  2159. new THREE.MeshPhongMaterial( {
  2160. color: 0xD3D3D3,
  2161. specular: 0x050505,
  2162. shininess: 100
  2163. })
  2164. );
  2165. //pv029a.position.set(3, 0.5, -25);
  2166. pv029a.position.set(2.875, 0.9, -25.216);
  2167. pv029a.rotateY( Math.PI / 6 );
  2168. pv029a.rotateX( Math.PI / 3);
  2169. pv029a.name = "6A_60_30e_029_01";
  2170. scene.add(pv029a);
  2171. pv030a = new THREE.Mesh(
  2172. new THREE.CubeGeometry( 4, 0.1,0.5),
  2173. new THREE.MeshPhongMaterial( {
  2174. color: 0xD3D3D3,
  2175. specular: 0x050505,
  2176. shininess: 100
  2177. })
  2178. );
  2179. //pv030a.position.set(1, 0.5, -13);
  2180. pv030a.position.set(0.875, 0.9, -13.216);
  2181. pv030a.rotateY( Math.PI / 6 );
  2182. pv030a.rotateX( Math.PI / 3);
  2183. pv030a.name = "3A_60_30e_030_01";
  2184. scene.add(pv030a);
  2185. pv031a = new THREE.Mesh(
  2186. new THREE.CubeGeometry( 4, 0.1,0.5),
  2187. new THREE.MeshPhongMaterial( {
  2188. color: 0xD3D3D3,
  2189. specular: 0x050505,
  2190. shininess: 100
  2191. })
  2192. );
  2193. //pv031a.position.set(0, 0.5, -16);
  2194. pv031a.position.set(-0.125, 0.9, -16.216);
  2195. pv031a.rotateY( Math.PI / 6 );
  2196. pv031a.rotateX( Math.PI / 3);
  2197. pv031a.name = "1A_60_30e_031_01";
  2198. scene.add(pv031a);
  2199. pv032a = new THREE.Mesh(
  2200. new THREE.CubeGeometry( 4, 0.1,0.5),
  2201. new THREE.MeshPhongMaterial( {
  2202. color: 0xD3D3D3,
  2203. specular: 0x050505,
  2204. shininess: 100
  2205. })
  2206. );
  2207. //pv032a.position.set(7, 0.5, 10.5);
  2208. pv032a.position.set(6.875, 0.6, 10.033);
  2209. pv032a.rotateY( Math.PI / 12 );
  2210. pv032a.rotateX( Math.PI / 12);
  2211. pv032a.name = "3A_15_15e_032_01";
  2212. scene.add(pv032a);
  2213. pv033a = new THREE.Mesh(
  2214. new THREE.CubeGeometry( 4, 0.1,0.5),
  2215. new THREE.MeshPhongMaterial( {
  2216. color: 0xD3D3D3,
  2217. specular: 0x050505,
  2218. shininess: 100
  2219. })
  2220. );
  2221. //pv033a.position.set(-10, 0.5, 29.5);
  2222. pv033a.position.set(-10.125, 0.6, 29.033);
  2223. pv033a.rotateY( Math.PI / 12 );
  2224. pv033a.rotateX( Math.PI / 12);
  2225. pv033a.name = "1B_15_15e_033_01";
  2226. scene.add(pv033a);
  2227. pv034a = new THREE.Mesh(
  2228. new THREE.CubeGeometry( 4, 0.1,0.5),
  2229. new THREE.MeshPhongMaterial( {
  2230. color: 0xD3D3D3,
  2231. specular: 0x050505,
  2232. shininess: 100
  2233. })
  2234. );
  2235. //pv034a.position.set(-11, 0.5, 31.5);
  2236. pv034a.position.set(-11.125, 0.6, 31.033);
  2237. pv034a.rotateY( Math.PI / 12 );
  2238. pv034a.rotateX( Math.PI / 12);
  2239. pv034a.name = "4B_15_15e_034_01";
  2240. scene.add(pv034a);
  2241. pv035a = new THREE.Mesh(
  2242. new THREE.CubeGeometry( 4, 0.1,0.5),
  2243. new THREE.MeshPhongMaterial( {
  2244. color: 0xD3D3D3,
  2245. specular: 0x050505,
  2246. shininess: 100
  2247. })
  2248. );
  2249. //pv035a.position.set(-13, 0.5, 19);
  2250. pv035a.position.set(-13.112, 0.7, 18.582);
  2251. pv035a.rotateY( Math.PI / 12 );
  2252. pv035a.rotateX( Math.PI / 6);
  2253. pv035a.name = "3A_30_15e_035_01";
  2254. scene.add(pv035a);
  2255. pv036a = new THREE.Mesh(
  2256. new THREE.CubeGeometry( 4, 0.1,0.5),
  2257. new THREE.MeshPhongMaterial( {
  2258. color: 0xD3D3D3,
  2259. specular: 0x050505,
  2260. shininess: 100
  2261. })
  2262. );
  2263. pv036a.position.set(-13.112, 0.7, 20.582);
  2264. pv036a.rotateY( Math.PI / 12 );
  2265. pv036a.rotateX( Math.PI / 6);
  2266. pv036a.name = "1A_30_15e_036_01";
  2267. scene.add(pv036a);
  2268. pv037a = new THREE.Mesh(
  2269. new THREE.CubeGeometry( 4, 0.1,0.5),
  2270. new THREE.MeshPhongMaterial( {
  2271. color: 0xD3D3D3,
  2272. specular: 0x050505,
  2273. shininess: 100
  2274. })
  2275. );
  2276. pv037a.position.set(-7.112, 0.7, 19.582);
  2277. pv037a.rotateY( Math.PI / 12 );
  2278. pv037a.rotateX( Math.PI / 6);
  2279. pv037a.name = "5A_30_15e_037_01";
  2280. scene.add(pv037a);
  2281. pv038a = new THREE.Mesh(
  2282. new THREE.CubeGeometry( 4, 0.1,0.5),
  2283. new THREE.MeshPhongMaterial( {
  2284. color: 0xD3D3D3,
  2285. specular: 0x050505,
  2286. shininess: 100
  2287. })
  2288. );
  2289. pv038a.position.set(7.908, 0.8, -14.342);
  2290. pv038a.rotateY( Math.PI / 12 );
  2291. pv038a.rotateX( Math.PI / 4);
  2292. pv038a.name = "3A_45_15e_038_01";
  2293. scene.add(pv038a);
  2294. pv039a = new THREE.Mesh(
  2295. new THREE.CubeGeometry( 4, 0.1,0.5),
  2296. new THREE.MeshPhongMaterial( {
  2297. color: 0xD3D3D3,
  2298. specular: 0x050505,
  2299. shininess: 100
  2300. })
  2301. );
  2302. pv039a.position.set(7.908, 0.8, -10.342);
  2303. pv039a.rotateY( Math.PI / 12 );
  2304. pv039a.rotateX( Math.PI / 4);
  2305. pv039a.name = "1A_45_15e_039_01";
  2306. scene.add(pv039a);
  2307. pv040a = new THREE.Mesh(
  2308. new THREE.CubeGeometry( 4, 0.1,0.5),
  2309. new THREE.MeshPhongMaterial( {
  2310. color: 0xD3D3D3,
  2311. specular: 0x050505,
  2312. shininess: 100
  2313. })
  2314. );
  2315. pv040a.position.set(8.908, 0.8, -6.842);
  2316. pv040a.rotateY( Math.PI / 12 );
  2317. pv040a.rotateX( Math.PI / 4);
  2318. pv040a.name = "4A_45_15e_040_01";
  2319. scene.add(pv040a);
  2320. pv041a = new THREE.Mesh(
  2321. new THREE.CubeGeometry( 4, 0.1,0.5),
  2322. new THREE.MeshPhongMaterial( {
  2323. color: 0xD3D3D3,
  2324. specular: 0x050505,
  2325. shininess: 100
  2326. })
  2327. );
  2328. pv041a.position.set(3.935, 0.9, -20.741);
  2329. pv041a.rotateY( Math.PI / 12 );
  2330. pv041a.rotateX( Math.PI / 3);
  2331. pv041a.name = "6A_60_15e_041_01";
  2332. scene.add(pv041a);
  2333. pv042a = new THREE.Mesh(
  2334. new THREE.CubeGeometry( 4, 0.1,0.5),
  2335. new THREE.MeshPhongMaterial( {
  2336. color: 0xD3D3D3,
  2337. specular: 0x050505,
  2338. shininess: 100
  2339. })
  2340. );
  2341. pv042a.position.set(8.935, 0.9, -22.241);
  2342. pv042a.rotateY( Math.PI / 12 );
  2343. pv042a.rotateX( Math.PI / 3);
  2344. pv042a.name = "3A_60_15e_042_01";
  2345. scene.add(pv042a);
  2346. pv043a = new THREE.Mesh(
  2347. new THREE.CubeGeometry( 4, 0.1,0.5),
  2348. new THREE.MeshPhongMaterial( {
  2349. color: 0xD3D3D3,
  2350. specular: 0x050505,
  2351. shininess: 100
  2352. })
  2353. );
  2354. pv043a.position.set(7.935, 0.9, -17.741);
  2355. pv043a.rotateY( Math.PI / 12 );
  2356. pv043a.rotateX( Math.PI / 3);
  2357. pv043a.name = "1A_60_15e_043_01";
  2358. scene.add(pv043a);
  2359. pv044a = new THREE.Mesh(
  2360. new THREE.CubeGeometry( 4, 0.1,0.5),
  2361. new THREE.MeshPhongMaterial( {
  2362. color: 0xD3D3D3,
  2363. specular: 0x050505,
  2364. shininess: 100
  2365. })
  2366. );
  2367. pv044a.position.set(2.000, 0.6, 32.517);
  2368. pv044a.rotateY( Math.PI );
  2369. pv044a.rotateX( 11 * Math.PI / 12);
  2370. pv044a.name = "3B_15_00s_044_01";
  2371. scene.add(pv044a);
  2372. pv045a = new THREE.Mesh(
  2373. new THREE.CubeGeometry( 4, 0.1,0.5),
  2374. new THREE.MeshPhongMaterial( {
  2375. color: 0xD3D3D3,
  2376. specular: 0x050505,
  2377. shininess: 100
  2378. })
  2379. );
  2380. pv045a.position.set(5.000, 0.6, 34.017);
  2381. pv045a.rotateY( Math.PI );
  2382. pv045a.rotateX( 11 * Math.PI / 12);
  2383. pv045a.name = "4B_15_00s_045_01";
  2384. scene.add(pv045a);
  2385. pv046a = new THREE.Mesh(
  2386. new THREE.CubeGeometry( 4, 0.1,0.5),
  2387. new THREE.MeshPhongMaterial( {
  2388. color: 0xD3D3D3,
  2389. specular: 0x050505,
  2390. shininess: 100
  2391. })
  2392. );
  2393. pv046a.position.set(-1.000, 0.5, 34.500);
  2394. pv046a.rotateY( Math.PI );
  2395. pv046a.rotateX( 89 * Math.PI / 90);
  2396. pv046a.name = "6A_02_00s_046_01";
  2397. scene.add(pv046a);
  2398. pv047a = new THREE.Mesh(
  2399. new THREE.CubeGeometry( 4, 0.1,0.5),
  2400. new THREE.MeshPhongMaterial( {
  2401. color: 0xD3D3D3,
  2402. specular: 0x050505,
  2403. shininess: 100
  2404. })
  2405. );
  2406. pv047a.position.set(3.000, 0.5, 35.500);
  2407. pv047a.rotateY( Math.PI );
  2408. pv047a.rotateX( 89 * Math.PI / 90);
  2409. pv047a.name = "2A_02_00s_047_01";
  2410. scene.add(pv047a);
  2411. pv048a = new THREE.Mesh(
  2412. new THREE.CubeGeometry( 4, 0.1,0.5),
  2413. new THREE.MeshPhongMaterial( {
  2414. color: 0xD3D3D3,
  2415. specular: 0x050505,
  2416. shininess: 100
  2417. })
  2418. );
  2419. pv048a.position.set(6.000, 0.5, 36.500);
  2420. pv048a.rotateY( Math.PI );
  2421. pv048a.rotateX( 89 * Math.PI / 90);
  2422. pv048a.name = "1A_02_00s_048_01";
  2423. scene.add(pv048a);
  2424. pv049a = new THREE.Mesh(
  2425. new THREE.CubeGeometry( 4, 0.1,0.5),
  2426. new THREE.MeshPhongMaterial( {
  2427. color: 0xD3D3D3,
  2428. specular: 0x050505,
  2429. shininess: 100
  2430. })
  2431. );
  2432. pv049a.position.set(-11.000, 0.7, 13.567);
  2433. pv049a.rotateY( Math.PI );
  2434. pv049a.rotateX( 5 * Math.PI / 6);
  2435. pv049a.name = "3C_30_00s_049_01";
  2436. scene.add(pv049a);
  2437. pv050a = new THREE.Mesh(
  2438. new THREE.CubeGeometry( 4, 0.1,0.5),
  2439. new THREE.MeshPhongMaterial( {
  2440. color: 0xD3D3D3,
  2441. specular: 0x050505,
  2442. shininess: 100
  2443. })
  2444. );
  2445. pv050a.position.set(-10.500, 0.7, 10.567);
  2446. pv050a.rotateY( Math.PI );
  2447. pv050a.rotateX( 5 * Math.PI / 6);
  2448. pv050a.name = "1A_30_00s_050_01";
  2449. scene.add(pv050a);
  2450. pv051a = new THREE.Mesh(
  2451. new THREE.CubeGeometry( 4, 0.1,0.5),
  2452. new THREE.MeshPhongMaterial( {
  2453. color: 0xD3D3D3,
  2454. specular: 0x050505,
  2455. shininess: 100
  2456. })
  2457. );
  2458. pv051a.position.set(8.000, 0.7, 7.067);
  2459. pv051a.rotateY( Math.PI );
  2460. pv051a.rotateX( 5 * Math.PI / 6);
  2461. pv051a.name = "1B_30_00s_051_01";
  2462. scene.add(pv051a);
  2463. pv052a = new THREE.Mesh(
  2464. new THREE.CubeGeometry( 4, 0.1,0.5),
  2465. new THREE.MeshPhongMaterial( {
  2466. color: 0xD3D3D3,
  2467. specular: 0x050505,
  2468. shininess: 100
  2469. })
  2470. );
  2471. pv052a.position.set(-10.000, 0.7, 7.567);
  2472. pv052a.rotateY( Math.PI );
  2473. pv052a.rotateX( 5 * Math.PI / 6);
  2474. pv052a.name = "1D_30_00s_052_01";
  2475. scene.add(pv052a);
  2476. pv053a = new THREE.Mesh(
  2477. new THREE.CubeGeometry( 4, 0.1,0.5),
  2478. new THREE.MeshPhongMaterial( {
  2479. color: 0xD3D3D3,
  2480. specular: 0x050505,
  2481. shininess: 100
  2482. })
  2483. );
  2484. pv053a.position.set(3.000, 0.7, 24.567);
  2485. pv053a.rotateY( Math.PI );
  2486. pv053a.rotateX( 5 * Math.PI / 6);
  2487. pv053a.name = "1C_30_00s_053_01";
  2488. scene.add(pv053a);
  2489. pv054a = new THREE.Mesh(
  2490. new THREE.CubeGeometry( 4, 0.1,0.5),
  2491. new THREE.MeshPhongMaterial( {
  2492. color: 0xD3D3D3,
  2493. specular: 0x050505,
  2494. shininess: 100
  2495. })
  2496. );
  2497. pv054a.position.set(2.500, 0.7, 27.567);
  2498. pv054a.rotateY( Math.PI );
  2499. pv054a.rotateX( 5 * Math.PI / 6);
  2500. pv054a.name = "4D_30_00s_054_01";
  2501. scene.add(pv054a);
  2502. pv055a = new THREE.Mesh(
  2503. new THREE.CubeGeometry( 4, 0.1,0.5),
  2504. new THREE.MeshPhongMaterial( {
  2505. color: 0xD3D3D3,
  2506. specular: 0x050505,
  2507. shininess: 100
  2508. })
  2509. );
  2510. pv055a.position.set(15.000, 0.8, -7.354);
  2511. pv055a.rotateY( Math.PI );
  2512. pv055a.rotateX( 3 * Math.PI / 4);
  2513. pv055a.name = "3A_45_00s_055_01";
  2514. scene.add(pv055a);
  2515. pv056a = new THREE.Mesh(
  2516. new THREE.CubeGeometry( 4, 0.1,0.5),
  2517. new THREE.MeshPhongMaterial( {
  2518. color: 0xD3D3D3,
  2519. specular: 0x050505,
  2520. shininess: 100
  2521. })
  2522. );
  2523. pv056a.position.set(15.000, 0.8, -11.354);
  2524. pv056a.rotateY( Math.PI );
  2525. pv056a.rotateX( 3 * Math.PI / 4);
  2526. pv056a.name = "4A_45_00s_056_01";
  2527. scene.add(pv056a);
  2528. pv057a = new THREE.Mesh(
  2529. new THREE.CubeGeometry( 4, 0.1,0.5),
  2530. new THREE.MeshPhongMaterial( {
  2531. color: 0xD3D3D3,
  2532. specular: 0x050505,
  2533. shininess: 100
  2534. })
  2535. );
  2536. pv057a.position.set(9.000, 0.9, -27.750);
  2537. pv057a.rotateY( Math.PI );
  2538. pv057a.rotateX( 2 * Math.PI / 3);
  2539. pv057a.name = "6A_60_00s_057_01";
  2540. scene.add(pv057a);
  2541. pv058a = new THREE.Mesh(
  2542. new THREE.CubeGeometry( 4, 0.1,0.5),
  2543. new THREE.MeshPhongMaterial( {
  2544. color: 0xD3D3D3,
  2545. specular: 0x050505,
  2546. shininess: 100
  2547. })
  2548. );
  2549. pv058a.position.set(0.000, 0.9, -30.250);
  2550. pv058a.rotateY( Math.PI );
  2551. pv058a.rotateX( 2 * Math.PI / 3);
  2552. pv058a.name = "3A_60_00s_058_01";
  2553. scene.add(pv058a);
  2554. pv059a = new THREE.Mesh(
  2555. new THREE.CubeGeometry( 4, 0.1,0.5),
  2556. new THREE.MeshPhongMaterial( {
  2557. color: 0xD3D3D3,
  2558. specular: 0x050505,
  2559. shininess: 100
  2560. })
  2561. );
  2562. pv059a.position.set(8.125, 0.6, 25.033);
  2563. pv059a.rotateY( 11 * Math.PI / 12 );
  2564. pv059a.rotateX( 11 * Math.PI / 12);
  2565. pv059a.name = "3B_15_15w_059_01";
  2566. scene.add(pv059a);
  2567. pv060a = new THREE.Mesh(
  2568. new THREE.CubeGeometry( 4, 0.1,0.5),
  2569. new THREE.MeshPhongMaterial( {
  2570. color: 0xD3D3D3,
  2571. specular: 0x050505,
  2572. shininess: 100
  2573. })
  2574. );
  2575. pv060a.position.set(2.625, 0.6, 30.533);
  2576. pv060a.rotateY( 11 * Math.PI / 12 );
  2577. pv060a.rotateX( 11 * Math.PI / 12);
  2578. pv060a.name = "1B_15_15w_060_01";
  2579. scene.add(pv060a);
  2580. pv061a = new THREE.Mesh(
  2581. new THREE.CubeGeometry( 4, 0.1,0.5),
  2582. new THREE.MeshPhongMaterial( {
  2583. color: 0xD3D3D3,
  2584. specular: 0x050505,
  2585. shininess: 100
  2586. })
  2587. );
  2588. pv061a.position.set(9.625, 0.6, 35.033);
  2589. pv061a.rotateY( 11 * Math.PI / 12 );
  2590. pv061a.rotateX( 11 * Math.PI / 12);
  2591. pv061a.name = "4B_15_15w_061_01";
  2592. scene.add(pv061a);
  2593. pv062a = new THREE.Mesh(
  2594. new THREE.CubeGeometry( 4, 0.1,0.5),
  2595. new THREE.MeshPhongMaterial( {
  2596. color: 0xD3D3D3,
  2597. specular: 0x050505,
  2598. shininess: 100
  2599. })
  2600. );
  2601. pv062a.position.set(8.112, 0.7, 21.732);
  2602. pv062a.rotateY( 11 * Math.PI / 12 );
  2603. pv062a.rotateX( 5 * Math.PI / 6);
  2604. pv062a.name = "3A_30_15w_062_01";
  2605. scene.add(pv062a);
  2606. pv063a = new THREE.Mesh(
  2607. new THREE.CubeGeometry( 4, 0.1,0.5),
  2608. new THREE.MeshPhongMaterial( {
  2609. color: 0xD3D3D3,
  2610. specular: 0x050505,
  2611. shininess: 100
  2612. })
  2613. );
  2614. pv063a.position.set(12.612, 0.7, 22.832);
  2615. pv063a.rotateY( 11 * Math.PI / 12 );
  2616. pv063a.rotateX( 5 * Math.PI / 6);
  2617. pv063a.name = "1A_30_15w_063_01";
  2618. scene.add(pv063a);
  2619. pv064a = new THREE.Mesh(
  2620. new THREE.CubeGeometry( 4, 0.1,0.5),
  2621. new THREE.MeshPhongMaterial( {
  2622. color: 0xD3D3D3,
  2623. specular: 0x050505,
  2624. shininess: 100
  2625. })
  2626. );
  2627. pv064a.position.set(3.612, 0.7, 20.582);
  2628. pv064a.rotateY( 11 * Math.PI / 12 );
  2629. pv064a.rotateX( 5 * Math.PI / 6);
  2630. pv064a.name = "5A_30_15w_064_01";
  2631. scene.add(pv064a);
  2632. pv065a = new THREE.Mesh(
  2633. new THREE.CubeGeometry( 4, 0.1,0.5),
  2634. new THREE.MeshPhongMaterial( {
  2635. color: 0xD3D3D3,
  2636. specular: 0x050505,
  2637. shininess: 100
  2638. })
  2639. );
  2640. pv065a.position.set(16.092, 0.8, -19.342);
  2641. pv065a.rotateY( 11 * Math.PI / 12 );
  2642. pv065a.rotateX( 3 * Math.PI / 4);
  2643. pv065a.name = "3A_45_15w_065_01";
  2644. scene.add(pv065a);
  2645. pv066a = new THREE.Mesh(
  2646. new THREE.CubeGeometry( 4, 0.1,0.5),
  2647. new THREE.MeshPhongMaterial( {
  2648. color: 0xD3D3D3,
  2649. specular: 0x050505,
  2650. shininess: 100
  2651. })
  2652. );
  2653. pv066a.position.set(17.092, 0.8, -22.342);
  2654. pv066a.rotateY( 11 * Math.PI / 12 );
  2655. pv066a.rotateX( 3 * Math.PI / 4);
  2656. pv066a.name = "1A_45_15w_066_01";
  2657. scene.add(pv066a);
  2658. pv067a = new THREE.Mesh(
  2659. new THREE.CubeGeometry( 4, 0.1,0.5),
  2660. new THREE.MeshPhongMaterial( {
  2661. color: 0xD3D3D3,
  2662. specular: 0x050505,
  2663. shininess: 100
  2664. })
  2665. );
  2666. pv067a.position.set(15.092, 0.8, -15.342);
  2667. pv067a.rotateY( 11 * Math.PI / 12 );
  2668. pv067a.rotateX( 3 * Math.PI / 4);
  2669. pv067a.name = "4A_45_15w_067_01";
  2670. scene.add(pv067a);
  2671. pv068a = new THREE.Mesh(
  2672. new THREE.CubeGeometry( 4, 0.1,0.5),
  2673. new THREE.MeshPhongMaterial( {
  2674. color: 0xD3D3D3,
  2675. specular: 0x050505,
  2676. shininess: 100
  2677. })
  2678. );
  2679. pv068a.position.set(15.065, 0.9, -27.241);
  2680. pv068a.rotateY( 11 * Math.PI / 12 );
  2681. pv068a.rotateX( 2 * Math.PI / 3);
  2682. pv068a.name = "6A_60_15w_068_01";
  2683. scene.add(pv068a);
  2684. pv069a = new THREE.Mesh(
  2685. new THREE.CubeGeometry( 4, 0.1,0.5),
  2686. new THREE.MeshPhongMaterial( {
  2687. color: 0xD3D3D3,
  2688. specular: 0x050505,
  2689. shininess: 100
  2690. })
  2691. );
  2692. pv069a.position.set(20.065, 0.9, -25.991);
  2693. pv069a.rotateY( 11 * Math.PI / 12 );
  2694. pv069a.rotateX( 2 * Math.PI / 3);
  2695. pv069a.name = "3A_60_15w_069_01";
  2696. scene.add(pv069a);
  2697. pv070a = new THREE.Mesh(
  2698. new THREE.CubeGeometry( 4, 0.1,0.5),
  2699. new THREE.MeshPhongMaterial( {
  2700. color: 0xD3D3D3,
  2701. specular: 0x050505,
  2702. shininess: 100
  2703. })
  2704. );
  2705. pv070a.position.set(25.065, 0.9, -24.741);
  2706. pv070a.rotateY( 11 * Math.PI / 12 );
  2707. pv070a.rotateX( 2 * Math.PI / 3);
  2708. pv070a.name = "1A_60_15w_070_01";
  2709. scene.add(pv070a);
  2710. pv071a = new THREE.Mesh(
  2711. new THREE.CubeGeometry( 4, 0.1,0.5),
  2712. new THREE.MeshPhongMaterial( {
  2713. color: 0xD3D3D3,
  2714. specular: 0x050505,
  2715. shininess: 100
  2716. })
  2717. );
  2718. pv071a.position.set(17.241, 0.6, 24.582);
  2719. pv071a.rotateY( 11 * Math.PI / 6 );
  2720. pv071a.rotateX( Math.PI / 12);
  2721. pv071a.name = "3A_15_30w_071_01";
  2722. scene.add(pv071a);
  2723. pv072a = new THREE.Mesh(
  2724. new THREE.CubeGeometry( 4, 0.1,0.5),
  2725. new THREE.MeshPhongMaterial( {
  2726. color: 0xD3D3D3,
  2727. specular: 0x050505,
  2728. shininess: 100
  2729. })
  2730. );
  2731. pv072a.position.set(6.991, 0.6, 32.082);
  2732. pv072a.rotateY( 11 * Math.PI / 6 );
  2733. pv072a.rotateX( Math.PI / 12);
  2734. pv072a.name = "1A_15_30w_072_01";
  2735. scene.add(pv072a);
  2736. pv073a = new THREE.Mesh(
  2737. new THREE.CubeGeometry( 4, 0.1,0.5),
  2738. new THREE.MeshPhongMaterial( {
  2739. color: 0xD3D3D3,
  2740. specular: 0x050505,
  2741. shininess: 100
  2742. })
  2743. );
  2744. pv073a.position.set(10.741, 0.6, 37.832);
  2745. pv073a.rotateY( 11 * Math.PI / 6 );
  2746. pv073a.rotateX( Math.PI / 12);
  2747. pv073a.name = "1B_15_30w_073_01";
  2748. scene.add(pv073a);
  2749. pv074a = new THREE.Mesh(
  2750. new THREE.CubeGeometry( 4, 0.1,0.5),
  2751. new THREE.MeshPhongMaterial( {
  2752. color: 0xD3D3D3,
  2753. specular: 0x050505,
  2754. shininess: 100
  2755. })
  2756. );
  2757. pv074a.position.set(12.741, 0.6, 27.082);
  2758. pv074a.rotateY( 11 * Math.PI / 6 );
  2759. pv074a.rotateX( Math.PI / 12);
  2760. pv074a.name = "1D_15_30w_074_01";
  2761. scene.add(pv074a);
  2762. pv075a = new THREE.Mesh(
  2763. new THREE.CubeGeometry( 4, 0.1,0.5),
  2764. new THREE.MeshPhongMaterial( {
  2765. color: 0xD3D3D3,
  2766. specular: 0x050505,
  2767. shininess: 100
  2768. })
  2769. );
  2770. pv075a.position.set(7.741, 0.6, 29.082);
  2771. pv075a.rotateY( 11 * Math.PI / 6 );
  2772. pv075a.rotateX( Math.PI / 12);
  2773. pv075a.name = "1C_15_30w_075_01";
  2774. scene.add(pv075a);
  2775. pv076a = new THREE.Mesh(
  2776. new THREE.CubeGeometry( 4, 0.1,0.5),
  2777. new THREE.MeshPhongMaterial( {
  2778. color: 0xD3D3D3,
  2779. specular: 0x050505,
  2780. shininess: 100
  2781. })
  2782. );
  2783. pv076a.position.set(11.241, 0.6, 33.082);
  2784. pv076a.rotateY( 11 * Math.PI / 6 );
  2785. pv076a.rotateX( Math.PI / 12);
  2786. pv076a.name = "5D_15_30w_076_01";
  2787. scene.add(pv076a);
  2788. pv077a = new THREE.Mesh(
  2789. new THREE.CubeGeometry( 4, 0.1,0.5),
  2790. new THREE.MeshPhongMaterial( {
  2791. color: 0xD3D3D3,
  2792. specular: 0x050505,
  2793. shininess: 100
  2794. })
  2795. );
  2796. pv077a.position.set(13.217, 0.7, 11.625);
  2797. pv077a.rotateY( 11 * Math.PI / 6 );
  2798. pv077a.rotateX( Math.PI / 6);
  2799. pv077a.name = "6D_30_30w_077_01";
  2800. scene.add(pv077a);
  2801. pv078a = new THREE.Mesh(
  2802. new THREE.CubeGeometry( 4, 0.1,0.5),
  2803. new THREE.MeshPhongMaterial( {
  2804. color: 0xD3D3D3,
  2805. specular: 0x050505,
  2806. shininess: 100
  2807. })
  2808. );
  2809. pv078a.position.set(12.217, 0.7, 14.625);
  2810. pv078a.rotateY( 11 * Math.PI / 6 );
  2811. pv078a.rotateX( Math.PI / 6);
  2812. pv078a.name = "3D_30_30w_078_01";
  2813. scene.add(pv078a);
  2814. pv079a = new THREE.Mesh(
  2815. new THREE.CubeGeometry( 4, 0.1,0.5),
  2816. new THREE.MeshPhongMaterial( {
  2817. color: 0xD3D3D3,
  2818. specular: 0x050505,
  2819. shininess: 100
  2820. })
  2821. );
  2822. pv079a.position.set(14.217, 0.7, 8.625);
  2823. pv079a.rotateY( 11 * Math.PI / 6 );
  2824. pv079a.rotateX( Math.PI / 6);
  2825. pv079a.name = "1D_30_30w_079_01";
  2826. scene.add(pv079a);
  2827. pv080a = new THREE.Mesh(
  2828. new THREE.CubeGeometry( 4, 0.1,0.5),
  2829. new THREE.MeshPhongMaterial( {
  2830. color: 0xD3D3D3,
  2831. specular: 0x050505,
  2832. shininess: 100
  2833. })
  2834. );
  2835. pv080a.position.set(20.177, 0.8, -4.306);
  2836. pv080a.rotateY( 11 * Math.PI / 6 );
  2837. pv080a.rotateX( Math.PI / 4);
  2838. pv080a.name = "3A_45_30w_080_01";
  2839. scene.add(pv080a);
  2840. pv081a = new THREE.Mesh(
  2841. new THREE.CubeGeometry( 4, 0.1,0.5),
  2842. new THREE.MeshPhongMaterial( {
  2843. color: 0xD3D3D3,
  2844. specular: 0x050505,
  2845. shininess: 100
  2846. })
  2847. );
  2848. pv081a.position.set(21.177, 0.8, -7.306);
  2849. pv081a.rotateY( 11 * Math.PI / 6 );
  2850. pv081a.rotateX( Math.PI / 4);
  2851. pv081a.name = "1A_45_30w_081_01";
  2852. scene.add(pv081a);
  2853. pv082a = new THREE.Mesh(
  2854. new THREE.CubeGeometry( 4, 0.1,0.5),
  2855. new THREE.MeshPhongMaterial( {
  2856. color: 0xD3D3D3,
  2857. specular: 0x050505,
  2858. shininess: 100
  2859. })
  2860. );
  2861. pv082a.position.set(21.677, 0.8, -11.306);
  2862. pv082a.rotateY( 11 * Math.PI / 6 );
  2863. pv082a.rotateX( Math.PI / 4);
  2864. pv082a.name = "5A_45_30w_082_01";
  2865. scene.add(pv082a);
  2866. pv083a = new THREE.Mesh(
  2867. new THREE.CubeGeometry( 4, 0.1,0.5),
  2868. new THREE.MeshPhongMaterial( {
  2869. color: 0xD3D3D3,
  2870. specular: 0x050505,
  2871. shininess: 100
  2872. })
  2873. );
  2874. pv083a.position.set(24.125, 0.9, -21.217);
  2875. pv083a.rotateY( 11 * Math.PI / 6 );
  2876. pv083a.rotateX( Math.PI / 3);
  2877. pv083a.name = "6A_60_30w_083_01";
  2878. scene.add(pv083a);
  2879. pv084a = new THREE.Mesh(
  2880. new THREE.CubeGeometry( 4, 0.1,0.5),
  2881. new THREE.MeshPhongMaterial( {
  2882. color: 0xD3D3D3,
  2883. specular: 0x050505,
  2884. shininess: 100
  2885. })
  2886. );
  2887. pv084a.position.set(23.125, 0.9, -18.217);
  2888. pv084a.rotateY( 11 * Math.PI / 6 );
  2889. pv084a.rotateX( Math.PI / 3);
  2890. pv084a.name = "3A_60_30w_084_01";
  2891. scene.add(pv084a);
  2892. pv085a = new THREE.Mesh(
  2893. new THREE.CubeGeometry( 4, 0.1,0.5),
  2894. new THREE.MeshPhongMaterial( {
  2895. color: 0xD3D3D3,
  2896. specular: 0x050505,
  2897. shininess: 100
  2898. })
  2899. );
  2900. pv085a.position.set(23.125, 0.9, -14.217);
  2901. pv085a.rotateY( 11 * Math.PI / 6 );
  2902. pv085a.rotateX( Math.PI / 3);
  2903. pv085a.name = "1A_60_30w_085_01";
  2904. scene.add(pv085a);
  2905. pv086a = new THREE.Mesh(
  2906. new THREE.CubeGeometry( 4, 0.1,0.5),
  2907. new THREE.MeshPhongMaterial( {
  2908. color: 0xD3D3D3,
  2909. specular: 0x050505,
  2910. shininess: 100
  2911. })
  2912. );
  2913. pv086a.position.set(12.342, 0.6, 30.158);
  2914. pv086a.rotateY( 7 * Math.PI / 4 );
  2915. pv086a.rotateX( Math.PI / 12);
  2916. pv086a.name = "2A_15_45w_086_01";
  2917. scene.add(pv086a);
  2918. pv087a = new THREE.Mesh(
  2919. new THREE.CubeGeometry( 4, 0.1,0.5),
  2920. new THREE.MeshPhongMaterial( {
  2921. color: 0xD3D3D3,
  2922. specular: 0x050505,
  2923. shininess: 100
  2924. })
  2925. );
  2926. pv087a.position.set(16.342, 0.6, 30.158);
  2927. pv087a.rotateY( 7 * Math.PI / 4 );
  2928. pv087a.rotateX( Math.PI / 12);
  2929. pv087a.name = "1A_15_45w_087_01";
  2930. scene.add(pv087a);
  2931. pv088a = new THREE.Mesh(
  2932. new THREE.CubeGeometry( 4, 0.1,0.5),
  2933. new THREE.MeshPhongMaterial( {
  2934. color: 0xD3D3D3,
  2935. specular: 0x050505,
  2936. shininess: 100
  2937. })
  2938. );
  2939. pv088a.position.set(17.342, 0.6, 27.158);
  2940. pv088a.rotateY( 7 * Math.PI / 4 );
  2941. pv088a.rotateX( Math.PI / 12);
  2942. pv088a.name = "4A_15_45w_088_01";
  2943. scene.add(pv088a);
  2944. pv089a = new THREE.Mesh(
  2945. new THREE.CubeGeometry( 4, 0.1,0.5),
  2946. new THREE.MeshPhongMaterial( {
  2947. color: 0xD3D3D3,
  2948. specular: 0x050505,
  2949. shininess: 100
  2950. })
  2951. );
  2952. pv089a.position.set(20.306, 0.7, 10.694);
  2953. pv089a.rotateY( 7 * Math.PI / 4 );
  2954. pv089a.rotateX( Math.PI / 6);
  2955. pv089a.name = "6A_30_45w_089_01";
  2956. scene.add(pv089a);
  2957. pv090a = new THREE.Mesh(
  2958. new THREE.CubeGeometry( 4, 0.1,0.5),
  2959. new THREE.MeshPhongMaterial( {
  2960. color: 0xD3D3D3,
  2961. specular: 0x050505,
  2962. shininess: 100
  2963. })
  2964. );
  2965. pv090a.position.set(19.306, 0.7, 13.694);
  2966. pv090a.rotateY( 7 * Math.PI / 4 );
  2967. pv090a.rotateX( Math.PI / 6);
  2968. pv090a.name = "2A_30_45w_090_01";
  2969. scene.add(pv090a);
  2970. pv091a = new THREE.Mesh(
  2971. new THREE.CubeGeometry( 4, 0.1,0.5),
  2972. new THREE.MeshPhongMaterial( {
  2973. color: 0xD3D3D3,
  2974. specular: 0x050505,
  2975. shininess: 100
  2976. })
  2977. );
  2978. pv091a.position.set(29.250, 0.8, -14.250);
  2979. pv091a.rotateY( 7 * Math.PI / 4 );
  2980. pv091a.rotateX( Math.PI / 4);
  2981. pv091a.name = "2C_45_45w_091_01";
  2982. scene.add(pv091a);
  2983. pv092a = new THREE.Mesh(
  2984. new THREE.CubeGeometry( 4, 0.1,0.5),
  2985. new THREE.MeshPhongMaterial( {
  2986. color: 0xD3D3D3,
  2987. specular: 0x050505,
  2988. shininess: 100
  2989. })
  2990. );
  2991. pv092a.position.set(23.250, 0.8, 6.750);
  2992. pv092a.rotateY( 7 * Math.PI / 4 );
  2993. pv092a.rotateX( Math.PI / 4);
  2994. pv092a.name = "4C_45_45w_092_01";
  2995. scene.add(pv092a);
  2996. pv093a = new THREE.Mesh(
  2997. new THREE.CubeGeometry( 4, 0.1,0.5),
  2998. new THREE.MeshPhongMaterial( {
  2999. color: 0xD3D3D3,
  3000. specular: 0x050505,
  3001. shininess: 100
  3002. })
  3003. );
  3004. pv093a.position.set(30.177, 0.9, -18.177);
  3005. pv093a.rotateY( 7 * Math.PI / 4 );
  3006. pv093a.rotateX( Math.PI / 3);
  3007. pv093a.name = "6A_60_45w_093_01";
  3008. scene.add(pv093a);
  3009. pv094a = new THREE.Mesh(
  3010. new THREE.CubeGeometry( 4, 0.1,0.5),
  3011. new THREE.MeshPhongMaterial( {
  3012. color: 0xD3D3D3,
  3013. specular: 0x050505,
  3014. shininess: 100
  3015. })
  3016. );
  3017. pv094a.position.set(30.177, 0.9, -22.177);
  3018. pv094a.rotateY( 7 * Math.PI / 4 );
  3019. pv094a.rotateX( Math.PI / 3);
  3020. pv094a.name = "2A_60_45w_094_01";
  3021. scene.add(pv094a);
  3022. pv095a = new THREE.Mesh(
  3023. new THREE.CubeGeometry( 4, 0.1,0.5),
  3024. new THREE.MeshPhongMaterial( {
  3025. color: 0xD3D3D3,
  3026. specular: 0x050505,
  3027. shininess: 100
  3028. })
  3029. );
  3030. pv095a.position.set(15.418, 0.6, 33.759);
  3031. pv095a.rotateY( 5 * Math.PI / 3);
  3032. pv095a.rotateX( Math.PI / 12);
  3033. pv095a.name = "6A_15_60w_095_01";
  3034. scene.add(pv095a);
  3035. pv096a = new THREE.Mesh(
  3036. new THREE.CubeGeometry( 4, 0.1,0.5),
  3037. new THREE.MeshPhongMaterial( {
  3038. color: 0xD3D3D3,
  3039. specular: 0x050505,
  3040. shininess: 100
  3041. })
  3042. );
  3043. pv096a.position.set(14.418, 0.6, 36.759);
  3044. pv096a.rotateY( 5 * Math.PI / 3);
  3045. pv096a.rotateX( Math.PI / 12);
  3046. pv096a.name = "2A_15_60w_096_01";
  3047. scene.add(pv096a);
  3048. pv097a = new THREE.Mesh(
  3049. new THREE.CubeGeometry( 4, 0.1,0.5),
  3050. new THREE.MeshPhongMaterial( {
  3051. color: 0xD3D3D3,
  3052. specular: 0x050505,
  3053. shininess: 100
  3054. })
  3055. );
  3056. pv097a.position.set(16.375, 0.7, 19.783);
  3057. pv097a.rotateY( 5 * Math.PI / 3);
  3058. pv097a.rotateX( Math.PI / 6);
  3059. pv097a.name = "6A_30_60w_097_01";
  3060. scene.add(pv097a);
  3061. pv098a = new THREE.Mesh(
  3062. new THREE.CubeGeometry( 4, 0.1,0.5),
  3063. new THREE.MeshPhongMaterial( {
  3064. color: 0xD3D3D3,
  3065. specular: 0x050505,
  3066. shininess: 100
  3067. })
  3068. );
  3069. pv098a.position.set(17.375, 0.7, 16.783);
  3070. pv098a.rotateY( 5 * Math.PI / 3);
  3071. pv098a.rotateX( Math.PI / 6);
  3072. pv098a.name = "1A_30_60w_098_01";
  3073. scene.add(pv098a);
  3074. pv099a = new THREE.Mesh(
  3075. new THREE.CubeGeometry( 4, 0.1,0.5),
  3076. new THREE.MeshPhongMaterial( {
  3077. color: 0xD3D3D3,
  3078. specular: 0x050505,
  3079. shininess: 100
  3080. })
  3081. );
  3082. pv099a.position.set(25.306, 0.8, -1.177);
  3083. pv099a.rotateY( 5 * Math.PI / 3);
  3084. pv099a.rotateX( Math.PI / 4);
  3085. pv099a.name = "6A_45_60w_099_01";
  3086. scene.add(pv099a);
  3087. pv100a = new THREE.Mesh(
  3088. new THREE.CubeGeometry( 4, 0.1,0.5),
  3089. new THREE.MeshPhongMaterial( {
  3090. color: 0xD3D3D3,
  3091. specular: 0x050505,
  3092. shininess: 100
  3093. })
  3094. );
  3095. pv100a.position.set(22.306, 0.8, 1.823);
  3096. pv100a.rotateY( 5 * Math.PI / 3);
  3097. pv100a.rotateX( Math.PI / 4);
  3098. pv100a.name = "1A_45_60w_100_01";
  3099. scene.add(pv100a);
  3100. pv101a = new THREE.Mesh(
  3101. new THREE.CubeGeometry( 4, 0.1,0.5),
  3102. new THREE.MeshPhongMaterial( {
  3103. color: 0xD3D3D3,
  3104. specular: 0x050505,
  3105. shininess: 100
  3106. })
  3107. );
  3108. pv101a.position.set(28.217, 0.9, -10.125);
  3109. pv101a.rotateY( 5 * Math.PI / 3);
  3110. pv101a.rotateX( Math.PI / 3);
  3111. pv101a.name = "2C_60_60w_101_01";
  3112. scene.add(pv101a);
  3113. pv102a = new THREE.Mesh(
  3114. new THREE.CubeGeometry( 4, 0.1,0.5),
  3115. new THREE.MeshPhongMaterial( {
  3116. color: 0xD3D3D3,
  3117. specular: 0x050505,
  3118. shininess: 100
  3119. })
  3120. );
  3121. pv102a.position.set(26.216, 0.9, -6.125);
  3122. pv102a.rotateY( 5 * Math.PI / 3);
  3123. pv102a.rotateX( Math.PI / 3);
  3124. pv102a.name = "1C_60_60w_102_01";
  3125. scene.add(pv102a);
  3126. //scene.fog = new THREE.FogExp2( 0x000000, 0.0128 );
  3127. //renderer.setClearColor( scene.fog.color, 1 );
  3128. lut = new THREE.Lut( 'rainbow', 512 );
  3129. lut.setMax( 2000 );
  3130. lut.setMin( 0 );
  3131. legend = lut.setLegendOn();
  3132. legend.name = "legend";
  3133. createLabel("legend_title");
  3134. createLabel("legend_low");
  3135. createLabel("legend_mid");
  3136. createLabel("legend_high");
  3137. $("#textlegend_title").css("fontSize", "16px");
  3138. $("#textlegend_title").text("Power (kW/kWp)");
  3139. $("#textlegend_title").css("color", "black");
  3140. $("#textlegend_title").css("background-color", "transparent");
  3141. $("#textlegend_title").css("font-family", "Source Code Pro");
  3142. //font-family: 'Source Code Pro';
  3143. $("#textlegend_mid").css("fontSize", "14px");
  3144. $("#textlegend_mid").css("color", "black");
  3145. $("#textlegend_mid").css("background-color", "transparent");
  3146. $("#textlegend_mid").text("0.5");
  3147. $("#textlegend_mid").css("font-family", "Source Code Pro");
  3148. $("#textlegend_low").css("fontSize", "14px");
  3149. $("#textlegend_low").css("color", "black");
  3150. $("#textlegend_low").css("background-color", "transparent");
  3151. $("#textlegend_low").text("0.0");
  3152. $("#textlegend_low").css("font-family", "Source Code Pro");
  3153. $("#textlegend_high").css("fontSize", "14px");
  3154. $("#textlegend_high").css("color", "black");
  3155. $("#textlegend_high").css("background-color", "transparent");
  3156. $("#textlegend_high").text("1.0");
  3157. $("#textlegend_high").css("font-family", "Source Code Pro");
  3158. scene.add ( legend );
  3159. render();
  3160. }
  3161. function animate() {
  3162. requestAnimationFrame(animate);
  3163. if (enableControls){
  3164. mycontrol.enabled = true;
  3165. } else {
  3166. mycontrol.enabled = false;
  3167. }
  3168. if (enableRotate) {
  3169. mycontrol.rotate = true;
  3170. } else {
  3171. mycontrol.rotate = false;
  3172. }
  3173. mycontrol.update();
  3174. render();
  3175. }
  3176. var vector;
  3177. var legend;
  3178. var width, height;
  3179. var widthHalf, heightHalf;
  3180. var pos_title, pos_high, pos_low, pos_mid;
  3181. function render() {
  3182. //console.log(camera.position);
  3183. // if camera.position.y more than 90 then show module number
  3184. scene.traverse( function( node ) {
  3185. if (node.name != "") {
  3186. //console.log(node.name);
  3187. if (node.name == "legend") {
  3188. legend = scene.getObjectByName( "legend" );
  3189. width = window.innerWidth;
  3190. height = window.innerHeight;
  3191. widthHalf = width / 2.0;
  3192. heightHalf = height / 2.0;
  3193. pos_title = legend.position.clone();
  3194. pos_title.y = pos_title.y + 9;
  3195. pos_title.x = pos_title.x - 1;
  3196. pos_title.project(camera);
  3197. pos_title.x = ( pos_title.x * widthHalf ) + widthHalf;
  3198. pos_title.y = - ( pos_title.y * heightHalf ) + heightHalf;
  3199. $("#textlegend_title").show();
  3200. $("#textlegend_title").css("top", (pos_title.y) + 'px');
  3201. $("#textlegend_title").css("left", (pos_title.x) + 'px');
  3202. pos_mid = legend.position.clone();
  3203. pos_mid.y = pos_mid.y + 0;
  3204. pos_mid.x = pos_mid.x + 2;
  3205. pos_mid.project(camera);
  3206. pos_mid.x = ( pos_mid.x * widthHalf ) + widthHalf;
  3207. pos_mid.y = - ( pos_mid.y * heightHalf ) + heightHalf;
  3208. $("#textlegend_mid").show();
  3209. $("#textlegend_mid").css("top", (pos_mid.y) + 'px');
  3210. $("#textlegend_mid").css("left", (pos_mid.x) + 'px');
  3211. pos_low = legend.position.clone();
  3212. pos_low.y = pos_low.y - 5;
  3213. pos_low.x = pos_low.x + 2;
  3214. pos_low.project(camera);
  3215. pos_low.x = ( pos_low.x * widthHalf ) + widthHalf;
  3216. pos_low.y = - ( pos_low.y * heightHalf ) + heightHalf;
  3217. $("#textlegend_low").show();
  3218. $("#textlegend_low").css("top", (pos_low.y) + 'px');
  3219. $("#textlegend_low").css("left", (pos_low.x) + 'px');
  3220. pos_high = legend.position.clone();
  3221. pos_high.y = pos_high.y + 6;
  3222. pos_high.x = pos_high.x + 2;
  3223. pos_high.project(camera);
  3224. pos_high.x = ( pos_high.x * widthHalf ) + widthHalf;
  3225. pos_high.y = - ( pos_high.y * heightHalf ) + heightHalf;
  3226. $("#textlegend_high").show();
  3227. $("#textlegend_high").css("top", (pos_high.y) + 'px');
  3228. $("#textlegend_high").css("left", (pos_high.x) + 'px');
  3229. }
  3230. var _id = node.name;
  3231. _id = _id.split("_")[3];
  3232. //console.log(_id2[3]);
  3233. _id = "#text" + _id;
  3234. if (camera.position.y > 0 && labelFlag == true) {
  3235. //console.log(scene.children);
  3236. var obj1 = scene.getObjectByName( node.name );
  3237. var width = window.innerWidth, height = window.innerHeight;
  3238. var widthHalf = width / 2, heightHalf = height / 2;
  3239. var pos = obj1.position.clone();
  3240. pos.project(camera);
  3241. pos.x = ( pos.x * widthHalf ) + widthHalf;
  3242. pos.y = - ( pos.y * heightHalf ) + heightHalf;
  3243. $(_id).show();
  3244. $(_id).css("top", pos.y + 'px');
  3245. $(_id).css("left", (pos.x-10) + 'px');
  3246. //console.log(pos);
  3247. } else {
  3248. $(_id).hide();
  3249. }
  3250. }
  3251. });
  3252. var mode = $('input[type=radio][name=moduleMode]:checked').val();
  3253. if (mode == "0") {
  3254. $("#textlegend_title").hide();
  3255. $("#textlegend_high").hide();
  3256. $("#textlegend_mid").hide();
  3257. $("#textlegend_low").hide();
  3258. legend_object = scene.getObjectByName( "legend" );
  3259. if (legend_object) {
  3260. scene.remove(legend_object);
  3261. }
  3262. } else if (mode == "1") {
  3263. $("#textlegend_title").show();
  3264. $("#textlegend_high").show();
  3265. $("#textlegend_mid").show();
  3266. $("#textlegend_low").show();
  3267. legend_object = scene.getObjectByName( "legend", true );
  3268. if (!legend_object) {
  3269. lut = new THREE.Lut( 'rainbow', 512 );
  3270. lut.setMax( 2000 );
  3271. lut.setMin( 0 );
  3272. legend = lut.setLegendOn();
  3273. legend.name = "legend";
  3274. scene.add(legend);
  3275. }
  3276. }
  3277. // update the picking ray with the camera and mouse position
  3278. raycaster.setFromCamera( mouse, camera );
  3279. // calculate objects intersecting the picking ray
  3280. var intersects = raycaster.intersectObjects( scene.children );
  3281. //console.log("Check intersection");
  3282. //console.log(intersects);
  3283. for ( var i = 0; i < intersects.length; i++ ) {
  3284. if (intersects[ i ].object.name != "" && intersects[ i ].object.name != "legend") {
  3285. delta = (new Date().getTime()/1000.0) - data[ intersects[ i ].object.name ]["timestamp"];
  3286. var dateTime = new Date( data[ intersects[ i ].object.name ]["timestamp"]*1000.0 );
  3287. $("#obj-tooltip").text("Array: " + intersects[ i ].object.name);
  3288. $("#val-tooltip").text("Power: " + parseFloat(data[ intersects[ i ].object.name ]["value"]).toFixed(3) + " kW");
  3289. //$("#ts-tooltip").text("Last fetched (ADEI): " + dateTime.toUTCString());
  3290. $("#ts-tooltip").text("Last fetched (ADEI): " + dateTime.toString());
  3291. $("#delta-tooltip").text("Delta Time: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  3292. }
  3293. }
  3294. renderer.render(scene, camera);
  3295. vector = camera.getWorldDirection();
  3296. theta = Math.atan2(vector.x,vector.z);
  3297. theta = theta + 3.142; // add/minux pi to inverse
  3298. var degree = theta * (180/3.142);
  3299. //console.log(degree);
  3300. draw(degree);
  3301. }
  3302. $("#message").mousedown(function() {
  3303. enableControls = false;
  3304. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  3305. //render();
  3306. });
  3307. $("#orientation").mousedown(function() {
  3308. enableControls = false;
  3309. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  3310. //render();
  3311. });
  3312. $("#settings").mousedown(function() {
  3313. enableControls = false;
  3314. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  3315. //render();
  3316. });
  3317. $("#slider").mousedown(function() {
  3318. enableControls = false;
  3319. setMessage("GUI", "De-select main scene. Click on main scene to re-select.");
  3320. //render();
  3321. });
  3322. $("#container").mousedown(function() {
  3323. enableControls = true;
  3324. enableRotate = true;
  3325. animate();
  3326. setMessage("GUI", "Selected main scene.");
  3327. });
  3328. $("#container").mouseup(function() {
  3329. enableRotate = false;
  3330. //animate();
  3331. setMessage("GUI", "Selected main scene.");
  3332. });
  3333. </script>
  3334. <script>
  3335. jQuery(window).load(function () {
  3336. var typeFlag = false;
  3337. var typeValue = "A";
  3338. $('input[type=radio][name=moduleType]').change(function() {
  3339. typeValue = this.value;
  3340. for (var prop in data) {
  3341. value = data[prop];
  3342. if (prop != "time") {
  3343. current_type = prop.split("_")[0][1];
  3344. current_array = parseInt(prop.split("_")[3]) - 1;
  3345. if (current_type != typeValue) {
  3346. colour = "0xaaaaaa";
  3347. } else {
  3348. // Type D need to half them
  3349. if (current_type == "D") {
  3350. pNorm = value / ( parseFloat(powerPeak[current_array]));
  3351. } else {
  3352. pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3353. }
  3354. //pNorm = value / parseFloat(powerPeak[current_array]);
  3355. if (pNorm > 1.0) {
  3356. pNorm = 1.0;
  3357. }
  3358. if (pNorm < 0.0) {
  3359. pNorm = 0.0;
  3360. }
  3361. colour = mycm["jet"][parseInt(Math.floor( (pNorm / 1.0) * 71.0 ))];
  3362. //pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3363. //if (pNorm > 0.5) {
  3364. // pNorm = 0.5;
  3365. //}
  3366. //if (pNorm < 0.0) {
  3367. // pNorm = 0.0;
  3368. //}
  3369. colour = "0x" + colour.substring(1);
  3370. }
  3371. object = scene.getObjectByName( prop, true );
  3372. if (object) {
  3373. object.material.color.setHex( colour );
  3374. }
  3375. }
  3376. }
  3377. });
  3378. $('input[type=radio][name=moduleMode]').change(function() {
  3379. //var myVar = setInterval(myTimer, 10000);
  3380. //clearInterval(myVar);
  3381. modeValue = this.value;
  3382. //console.log(modeValue);
  3383. for (var prop in data) {
  3384. value = data[prop];
  3385. if (prop != "time") {
  3386. if (modeValue == "0") {
  3387. //console.log("setting mode 0")
  3388. if (value <= 0) {
  3389. colour = "0xff0000";
  3390. } else {
  3391. //colour = "0x242b72";
  3392. colour = "0x00ff00";
  3393. }
  3394. //console.log("setting mode 0", colour);
  3395. } else if (modeValue == "1") {
  3396. //console.log("inside mode 1");
  3397. current_type = prop.split("_")[0][1];
  3398. current_array = parseInt(prop.split("_")[3]) - 1;
  3399. if (typeof current_type != "undefined") {
  3400. // Type D need to half them
  3401. if (current_type == "D") {
  3402. pNorm = value / ( parseFloat(powerPeak[current_array]));
  3403. } else {
  3404. pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3405. }
  3406. //pNorm = value / parseFloat(powerPeak[current_array]);
  3407. if (pNorm > 1.0) {
  3408. pNorm = 1.0;
  3409. }
  3410. if (pNorm < 0.0) {
  3411. pNorm = 0.0;
  3412. }
  3413. colour = mycm["jet"][parseInt(Math.floor( (pNorm / 1.0) * 71.0 ))];
  3414. colour = "0x" + colour.substring(1);
  3415. if (typeFlag == true && current_type != typeValue) {
  3416. colour = "0xaaaaaa";
  3417. }
  3418. }
  3419. }
  3420. object = scene.getObjectByName( prop, true );
  3421. //object.material.color.setHex( colour );
  3422. if (object) {
  3423. //console.log("SETTING COLOUR");
  3424. object.material.color.setHex( colour );
  3425. }
  3426. //animate();
  3427. }
  3428. }
  3429. });
  3430. $("#myType").change(function() {
  3431. if(this.checked) {
  3432. typeFlag = true;
  3433. var radios = $('input:radio[name=moduleType]');
  3434. if(radios.is(':checked') === false) {
  3435. radios.filter('[value=A]').prop('checked', true);
  3436. }
  3437. typeValue = "A";
  3438. for (var prop in data) {
  3439. value = data[prop];
  3440. if (prop != "time") {
  3441. current_type = prop.split("_")[0][1];
  3442. current_array = parseInt(prop.split("_")[3]) - 1;
  3443. if (current_type != typeValue) {
  3444. colour = "0xaaaaaa";
  3445. } else {
  3446. // Type D need to half them
  3447. if (current_type == "D") {
  3448. pNorm = value / ( parseFloat(powerPeak[current_array]));
  3449. } else {
  3450. pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3451. }
  3452. //pNorm = value / parseFloat(powerPeak[current_array]);
  3453. if (pNorm > 1.0) {
  3454. pNorm = 1.0;
  3455. }
  3456. if (pNorm < 0.0) {
  3457. pNorm = 0.0;
  3458. }
  3459. colour = mycm["jet"][parseInt(Math.floor( (pNorm / 1.0) * 71.0 ))];
  3460. colour = "0x" + colour.substring(1);
  3461. }
  3462. object = scene.getObjectByName( prop, true );
  3463. if (object) {
  3464. object.material.color.setHex( colour );
  3465. }
  3466. }
  3467. }
  3468. //updateColour("A");
  3469. } else {
  3470. typeFlag = false;
  3471. var radios = $('input:radio[name=moduleType]');
  3472. if(radios.is(':checked') === true) {
  3473. radios.filter('[value=A]').prop('checked', false);
  3474. radios.filter('[value=B]').prop('checked', false);
  3475. radios.filter('[value=C]').prop('checked', false);
  3476. radios.filter('[value=D]').prop('checked', false);
  3477. }
  3478. for (var prop in data) {
  3479. value = data[prop];
  3480. if (prop != "time") {
  3481. current_type = prop.split("_")[0][1];
  3482. current_array = parseInt(prop.split("_")[3]) - 1;
  3483. if (current_type == "D") {
  3484. pNorm = value / ( parseFloat(powerPeak[current_array]));
  3485. } else {
  3486. pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3487. }
  3488. //pNorm = value / parseFloat(powerPeak[current_array]);
  3489. if (pNorm > 1.0) {
  3490. pNorm = 1.0;
  3491. }
  3492. if (pNorm < 0.0) {
  3493. pNorm = 0.0;
  3494. }
  3495. colour = mycm["jet"][parseInt(Math.floor( (pNorm / 1.0) * 71.0 ))];
  3496. colour = "0x" + colour.substring(1);
  3497. object = scene.getObjectByName( prop, true );
  3498. if (object) {
  3499. object.material.color.setHex( colour );
  3500. }
  3501. }
  3502. }
  3503. }
  3504. });
  3505. myTimer();
  3506. // set higher delay, but need to trigger change
  3507. var myVar = setInterval(myTimer, 1000);
  3508. //clearInterval(refreshIntervalId);
  3509. var powerPeak = [
  3510. 10.00,
  3511. 8.64,
  3512. 9.69,
  3513. 10.00,
  3514. 9.69,
  3515. 10.00,
  3516. 9.69,
  3517. 10.00,
  3518. 10.00,
  3519. 10.00,
  3520. 9.00,
  3521. 9.69,
  3522. 10.00,
  3523. 10.00,
  3524. 9.50,
  3525. 9.69,
  3526. 10.00,
  3527. 10.00,
  3528. 10.00,
  3529. 10.00,
  3530. 10.00,
  3531. 10.00,
  3532. 8.64,
  3533. 9.69,
  3534. 10.00,
  3535. 9.69,
  3536. 10.00,
  3537. 10.00,
  3538. 9.69,
  3539. 10.00,
  3540. 10.00,
  3541. 10.00,
  3542. 10.00,
  3543. 9.00,
  3544. 10.00,
  3545. 10.00,
  3546. 8.64,
  3547. 10.00,
  3548. 10.00,
  3549. 9.00,
  3550. 9.69,
  3551. 10.00,
  3552. 10.00,
  3553. 10.00,
  3554. 9.00,
  3555. 9.69,
  3556. 10.00,
  3557. 10.00,
  3558. 10.00,
  3559. 10.00,
  3560. 10.00,
  3561. 10.00,
  3562. 10.00,
  3563. 9.00,
  3564. 10.00,
  3565. 9.00,
  3566. 9.69,
  3567. 10.00,
  3568. 10.00,
  3569. 10.00,
  3570. 9.00,
  3571. 10.00,
  3572. 10.00,
  3573. 8.64,
  3574. 10.00,
  3575. 10.00,
  3576. 9.00,
  3577. 9.69,
  3578. 10.00,
  3579. 10.00,
  3580. 10.00,
  3581. 10.00,
  3582. 10.00,
  3583. 10.00,
  3584. 10.00,
  3585. 8.64,
  3586. 9.69,
  3587. 10.00,
  3588. 10.00,
  3589. 10.00,
  3590. 10.00,
  3591. 8.64,
  3592. 9.69,
  3593. 10.00,
  3594. 10.00,
  3595. 10.00,
  3596. 10.00,
  3597. 9.00,
  3598. 9.69,
  3599. 10.00,
  3600. 10.00,
  3601. 9.50,
  3602. 9.69,
  3603. 10.00,
  3604. 9.69,
  3605. 10.00,
  3606. 9.69,
  3607. 10.00,
  3608. 9.69,
  3609. 10.00,
  3610. 10.00,
  3611. 10.00
  3612. ];
  3613. var mycm = {
  3614. jet: ['#000080',
  3615. '#00008d',
  3616. '#00009f',
  3617. '#0000ad',
  3618. '#0000bf',
  3619. '#0000d1',
  3620. '#0000df',
  3621. '#0000f1',
  3622. '#0000ff',
  3623. '#0000ff',
  3624. '#0010ff',
  3625. '#001cff',
  3626. '#002cff',
  3627. '#0038ff',
  3628. '#0048ff',
  3629. '#0058ff',
  3630. '#0064ff',
  3631. '#0074ff',
  3632. '#0080ff',
  3633. '#0090ff',
  3634. '#00a0ff',
  3635. '#00acff',
  3636. '#00bcff',
  3637. '#00c8ff',
  3638. '#00d8ff',
  3639. '#02e8f4',
  3640. '#0cf4eb',
  3641. '#19ffde',
  3642. '#23ffd4',
  3643. '#30ffc7',
  3644. '#3cffba',
  3645. '#46ffb1',
  3646. '#53ffa4',
  3647. '#5dff9a',
  3648. '#6aff8d',
  3649. '#77ff80',
  3650. '#80ff77',
  3651. '#8dff6a',
  3652. '#9aff5d',
  3653. '#a4ff53',
  3654. '#b1ff46',
  3655. '#baff3c',
  3656. '#c7ff30',
  3657. '#d4ff23',
  3658. '#deff19',
  3659. '#ebff0c',
  3660. '#f4f802',
  3661. '#ffea00',
  3662. '#ffdb00',
  3663. '#ffd000',
  3664. '#ffc100',
  3665. '#ffb600',
  3666. '#ffa700',
  3667. '#ff9800',
  3668. '#ff8d00',
  3669. '#ff7e00',
  3670. '#ff7300',
  3671. '#ff6400',
  3672. '#ff5500',
  3673. '#ff4a00',
  3674. '#ff3b00',
  3675. '#ff3000',
  3676. '#ff2200',
  3677. '#ff1300',
  3678. '#f10800',
  3679. '#df0000',
  3680. '#d10000',
  3681. '#bf0000',
  3682. '#ad0000',
  3683. '#9f0000',
  3684. '#8d0000',
  3685. '#800000']
  3686. }
  3687. var min_pac = 0;
  3688. var max_pac = 10.0;
  3689. function myTimer() {
  3690. var dataToSend = {};
  3691. var object;
  3692. var colour;
  3693. var value;
  3694. $.ajax({
  3695. url: '/getdata/',
  3696. type: 'GET',
  3697. data: dataToSend,
  3698. success: function (response) {
  3699. //var objresponse = JSON.parse(response);
  3700. console.log(response);
  3701. data = response;
  3702. var obj = response;
  3703. for (var prop in obj) {
  3704. if (prop == "time") {
  3705. $("#slider-tooltip").text(obj[prop]["value"]);
  3706. } else {
  3707. value = obj[prop]["value"];
  3708. delta = (new Date().getTime() / 1000.0) - obj[prop]["timestamp"]
  3709. var mode = $('input[type=radio][name=moduleMode]:checked').val();
  3710. current_type = prop.split("_")[0][1];
  3711. current_array = parseInt(prop.split("_")[3]) - 1;
  3712. if (mode == "0") {
  3713. legend_object = scene.getObjectByName( "legend", true );
  3714. if (legend_object) {
  3715. scene.remove(legend_object);
  3716. }
  3717. //animate();
  3718. if (delta > 600) {
  3719. //colour = "0xff8c00";
  3720. colour = "0xffd700";
  3721. } else {
  3722. if (value <= 0) {
  3723. colour = "0xff0000";
  3724. } else {
  3725. //colour = "0x242b72";
  3726. colour = "0x00ff00";
  3727. }
  3728. }
  3729. } else if (mode == "1") {
  3730. legend_object = scene.getObjectByName( "legend", true );
  3731. if (!legend_object) {
  3732. lut = new THREE.Lut( 'rainbow', 512 );
  3733. lut.setMax( 2000 );
  3734. lut.setMin( 0 );
  3735. legend = lut.setLegendOn();
  3736. legend.name = "legend";
  3737. scene.add(legend);
  3738. }
  3739. // Type D need to half them
  3740. if (current_type == "D") {
  3741. pNorm = value / ( parseFloat(powerPeak[current_array]));
  3742. } else {
  3743. pNorm = value / ( 0.5 * parseFloat(powerPeak[current_array]));
  3744. }
  3745. //pNorm = value / parseFloat(powerPeak[current_array]);
  3746. if (pNorm > 1.0) {
  3747. pNorm = 1.0;
  3748. }
  3749. if (pNorm < 0.0) {
  3750. pNorm = 0.0;
  3751. }
  3752. colour = mycm["jet"][parseInt(Math.floor( (pNorm / 1.0) * 71.0 ))];
  3753. colour = "0x" + colour.substring(1);
  3754. if (typeFlag == true && current_type != typeValue) {
  3755. colour = "0xaaaaaa";
  3756. }
  3757. }
  3758. object = scene.getObjectByName( prop, true );
  3759. if (object) {
  3760. object.material.color.setHex( colour );
  3761. }
  3762. }
  3763. }
  3764. },
  3765. error: function () {
  3766. console.log("Error.")
  3767. }
  3768. });
  3769. }
  3770. });
  3771. </script>
  3772. </body>
  3773. </html>