index.html 127 KB

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