index.html 122 KB

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