BLENDER_v245REND LSceneGLOB h 0o{(SRxP{SR1-Animationo(lk0pK( DATAooDATAo@oo DATA@ono DATAnn@oDATAnhnnDATAhn nnDATA nmhnDATAmm nDATAmHmmDATAHmmmDATAmlHmDATAlplmDATApl(llDATA(lplDATAkk@ooDATAkPkknoDATAPkkkhnoDATAkjPk n@oDATAjxjk nhnDATAxj0jjmnDATA0jixjm nDATAii0jmmDATAiXii nnDATAXipiHmoDATApȌXimnDATAȌpmnDATArȌmHmDATArprlmDATApr(rrplhnDATA(rqprplmDATAqq(rpllDATAqPqq(lHmDATAPqqq(lmDATAqpPqlnDATApxpq(llDATAxp0ppHmhnDATA0pxp(lplDATAboHmmnO bP]p bDATAhbLink and MaterialsEditing>DATAhbbMeshEditingF>DATAbbhbAnim settingsObject>DATAbbbDrawObjectF>DATAbbbConstraintsObject>DATAbbbEffectsObjectDATAbbbHooksObjectF>bDATAbbbParticle InteractionObject>bDATAb( bbSoftbodyObject>bDATA( b@ bbOutputRender>DATA@ bX b( bRenderRenderF>DATAX bp b@ bAnimRender>DATAp bX bFormatRender>DATA bwP]333?V,@DhCDhCC(BDC?z?DATAhP]y b333?V,/9DATAb8=hno@o n !  DATA8=h@blplmmG==o?U8>P?DATA8>P?Transform PropertiesView3d>DATAP?8>3D Viewport propertiesView3d>"DATArU333?V<????????G==o? A*A?G==o??????*A B??=C ݢM@ݢM@ݢM@? DATAhUy333?V</9DATAh@F8=mm nn??PףH0JhAhADATAhATransform PropertiesIpo!>DATA(0vB333?V\zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATABz0333?V\CC|||??l|DATACB 333?V\zCCHBC|||?CFC= ADATAxC}PD 333?V\xx =rttDATAPD|(EC 333?V\?zDzDBCl||ll|zDzD=HB DATA(EcPD 333?V\BCBCl|llFzD #<HB DATAcrJ(E333?V\??? ???? A???PA A!O?j?}GCHB? A B? #<C DATAhJyc333?V\/9DATAFKh@(llnm 8IG HDATAG HLink and MaterialsEditing>DATA HGMeshEditingF>DATA8IJ333?VLzCB{ µCB ?BFB= ADATAJJ8I 333?VLzCCHBC$?CFC= ADATAJwJ333?VL#DhC`DpJgChCC(BDC?z?DATAhyJ333?VL/9DATAKFHmhnpl(l} ?=o?.OyLMDATALMTransform PropertiesView3d>DATAML3D Viewport propertiesView3d>"DATAOzR333?YDATA@~X(}LampLampF>DATAXp@~SpotLamp>DATApXTexture and InputLamp>DATApMap ToLamp>pDATAPreviewMaterial>6DATAЄMaterialMaterialF>6DATAЄPreviewWorld>DATAЄWorldWorldF>DATAMist Stars PhysicsWorld>DATA0Texture and InputWorld>DATA0HMap ToWorld>DATAH`0OutputRender>DATA`xHRenderRenderF>DATAx`AnimRender>DATAxFormatRender>DATALink and MaterialsEditing>DATAؐMeshEditingF>DATAؐMesh ToolsEditing>DATAؐMesh Tools 1Editing^>DATA CameraEditingF>DATA 8ShadersMaterial>6DATA8P TextureMaterial>6DATAPh8Anim settingsObject>DATAhPDrawObjectF>DATAhConstraintsObject>DATAScriptlinksScript>DATAțEffectsObjectDATAțMap InputMaterial>8DATAțMap ToMaterial>8DATAAnimAnim>DATA(SoundSound>DATA(@ListenerSoundF>DATA@X(SequencerSound>DATAXp@ArmatureEditingF>DATApXRampsMaterialF>6DATApMirror TranspMaterial>6DATAMist / Stars / PhysicsWorld>DATAЧAmb OccWorld>DATAЧShadow and SpotLamp>DATAЧModifiersEditing>DATAShapesEditing>DATA0MultiresEditing>DATA0HLinks and PipelineMaterial>6DATAH`0Render LayersRender>HDATA`xHBakeRender>xDATAx`SSSMaterial>6DATAwb333?(|(DHhC(D0~hCC(BDC?z? mDATA$b~G333?(|DATAGrb333?(|??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATAzG333?(| M M M??DATAhy333?(|+Import a Wavefront OBJC:\muray\Meshes\..\der Foundation\..\der\..\PaintyBot_01.objDATAPP(|8noXom@@DATAPPPmmln?D@ JL]W]]W HPhDATAPhTransform PropertiesView3d,>DATAhPView PropertiesView3dT>"DATAr333?P >0V!2?ASY?=;ѠS>W?>{I? >@SY?ҠS>0V=W?!2?:>[M A ?1@?$3?^'2!2m?ca>?;?wg>AK?3ƑFA{IA>F?O|A>&pk1=>3W/rB0F,BQA!@?D@ JL >0V!2?ASY?=;ѠS>W?>{I?Ş8?+y-{IA{IA B??'F1;=C7?X<t@t@t@@?GX? DATA(v333?PzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAzؼ333?P 1 12 1??2DATAؼ 333?P?zDzDBD22FzD #<HB DATAwؼ333?PDdC8CnD fCC(BDC?z?DATAhy333?PLSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATAPPPnlmmw=c >o?[W[[W  \H((PhDATAPhTransform PropertiesView3d,>DATAhPView PropertiesView3dT>"DATAx}( 333?Pp W?-/,@DATA$(~333?PDATArX(333?P????????w=c >o?{IA@y?w=c >o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(Xv333?PzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAzX333?P 1 12 1??2DATA 333?P?zDzDBD22FzD #<HB DATAw333?PDdC8CnD fCC(BDC?z?DATAhy333?PEOpen Text FileICTURESC:\uray\..\es\..\umpbug Folder/ender.app/Contents/Resources/processing_export.py *2DATAPPPm`mml? @ JL]Y]Ys]t XPhDATAPhTransform PropertiesView3d,>DATAhPView PropertiesView3dT>"DATAr333?PT?{(F?6R?> H"i?>g̗?D?T?6R?W{ >"i?(F?$>3M@p23f???~ >ƽ.?ͩξξ+g?R_7@D@?1@?`4< . >>44˃U_@0:`tA@ @2@? @ JLT?{(F?6R?> H"i?>g̗?D?@?͒24@? B??,F1;=CLѿAr>7?X<>>>@?GX? DATA(v333?PzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAz333?P 1 12 1??2DATA 333?P?zDzDBD22FzD #<HB DATAw333?PDdC8CnD fCC(BDC?z?DATAhy333?PLSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATAPPl8n`mmw=і>o?[Y[Ys[t\X.PhDATAPhTransform PropertiesView3d,>DATAhPView PropertiesView3dT>"DATA{333?PCC.?0?\Xd?DATAr333?P????????w=і>o?{IA @y?w=і>o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(v0333?PzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA0z333?P 1 12 1??2XDATA,XBOp=ADATA,XCS@ff(DATA0 333?P?zDzDBD22FzD #<HB DATAw333?PDdC8CnD fCC(BDC?z?DATAhy333?PSave AseNT PICTURESC:\SGWeb\labs\recursion\g Folder/ender.app/Contents/Resources/paintyBot4.blendd.blenddASRx"{SR3-Materialodel Singb 8( DATAbDATAPb DATAPc DATAchPDATAhxc<DATAxh<DATA`xDATA` DATA P``,<DATAP` ,DATA`P`DATA`@,DATA@ `DATA @DATAPDATA(cbDATA(hhbDATAhh(xcDATAhhxhDATA hDATA P`DATAP `DATAPx`DATA(Ph DATA(x DATAX(`P`DATAXX P` DATAX HXhDATAH`X DATA`hH`P`DATAh`` DATAh`DATAx@DATAx@`DATA@x DATA@ P`DATA@@ DATA8 bhxc?@Pף;;!8DATA8POutputRender>DATAPh8RenderRenderF>DATAhPAnimRender>DATAhFormatRender>DATA`333?V\~CA~CA!?AFA= ADATA`0 333?V\zCCHBC ?CFC= ADATA0w0`333?V\DhC?DhCC(BDC?z?mDATA0r`0333?V\??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATA`z0333?V\@̌AR|B1@lA A@CC #<@DATAhy`333?V\/9DATA  8P` !  DATA `   P``xG@? JL-=-=W-X~@ (DATA 8OutputRender>DATA8P RenderRender>DATAPh8AnimRender0>DATAhPFormatRenderH>DATAhPreviewMaterial>DATAMaterialMaterial>DATAShadersMaterial0>DATATextureMaterialD>DATAMap InputMaterial\>DATAMap ToMaterial`>DATA(RampsMaterial>DATA(Mirror TranspMaterialH>DATA@w@333?VChCCvgCC(BDC?z?DATA@rp@333?VJ>H!?)xu?i6>Pbܗ=(?^L?a?滎z?J>#xu?ܗ=Hi6>(? ?Pb^L?\FAA?4[?[!?@jG>gb>Pb>4Im>k&?]M^L<0@AzA=>Kc<2֍7&> ?:x¸A1vB,jB~@G@? JLJ>H!?)xu?i6>Pbܗ=(?^L?a?滎z?@?$$OA B?=Ch?j(4?t'>d DATA(pv@333?VzC AzC A #< #<`jFzD OBDATAhyp333?V;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATA`  h` U.=w=o?+=+=W+X,X` DATA` r333?W???h?j(4?t'>????hj(4t'?U.=w=o??OA B??=Ch?j(4?t'>dEh@Eh@Eh@? DATAw` 333?WDdC>9C,DeCC(BDC?z?DATA(v333?WzC AzC A #< #<`jFzD OBDATAhy333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA` @ P``e?B$?AHM+++USDATAr333?W |ݕ/?U~'?3F:?>T8165e?2>Z& 4?ߕ/?7F:?81W~>85e?'?T2>ne@>M@?4z?'''䷄?K??T?v|@?l211A 4Atp>?@@FC>G ?4xB֟&BĭeA(@e?B$?AHMݕ/?U~'?3F:?>T8165e?2>Z& 4?H?N,Z#OA B??=Ch?j(4?t'>dA@A@A@? DATAw333?W |DdC>9C,DeCC(BDC?z?DATA(v333?W |zC AzC A #< #<`jFzD OBDATAhy333?W | SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA @&=+=o?US(!DATAr333?W ?3?3:-vk(4??3?3;@k(40v@?&=PU1n;+=ꉖø;ZO{:?JXA54U0AC;@j(40v@?&=+=o??3?3:-vk(4?5?5IXA B??=C:j(4?.vdٚ@ٚ@ٚ@? DATAw333?W DdC>9C,DeCC(BDC?z?DATA(v(!333?W zC AzC A #< #<`jFzD OBDATAh(!y333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRx"xNSR4-Sequence@$$(*p*G( DATA( DATA(   DATA (  DATA DATADATADATADATA0DATA0DATAh#0DATAh##TDATA##h#TDATA#@$#DATA@$#DATA$$ ( DATA$%$DATA%`%$DATA`%%%DATA%%`%DATA%8&%( DATA8&&% DATA&&8&DATA&'&0DATA'X'&DATAX'''0DATA''X'0h#DATA'0('h#DATA0(x('#DATAx((0(#DATA()x(h##DATA)P)(#DATAP)))0#DATA))P)@$DATA)(*)@$DATA(*)#@$DATAp*h2/0p+.DATAp+,OutputRender>DATA,-p+RenderRenderF>DATA-.,AnimRender>DATA.-FormatRender>DATA/w0333?WDhCvDhCC(BDC?z?DATAh0y/333?W/9DATAh2h3p*(   !  DATAh39h2#@$8=i>o? h4`8DATAh4333?W&~CB~CB ?BFB= ADATAx05h4333?W&zCAzCA  A@FB= A DATA05r`8333?W&????????8=i>o?fffAD&@??fffA B? #<C DATAh`8y05333?W&AVE TARGA/t1.blend9DATA9@h3h##8=H>o?UUU :?DATA:x;333?W*zCAzCA1||1 A@FB= A DATA;r?:333?W*????????8=H>o?fffA*@??fffA B? #<C DATAh?y;333?W*AVE TARGA/t1.blend9DATA@G90#h#8=>o?SSSTA0FDATA(AvC333?W.B̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATACr0FA333?W.????????8=>o?fffA@??fffA B? #<C DATAh0FyC333?W.OAD FILE/9DATAG@#0@$8=i>o? HLDATAHxI333?W1zCAzCA A@FB= A DATAIrLH333?W1????????8=i>o?fffAD&@??fffA B? #<C DATAhLyI333?W1AVE TARGA/t1.blend9SRxxN"SR5-Scripting OQQU(V@m( DATA OhODATAhOO O DATAOOhO DATAO@PODATA@PPODATAPP@PDATAPQPDATAQ`QPDATA`QQQDATAQ`QDATAQ8RhOODATA8RRQhOPDATARR8ROPDATARSRPPDATASXSR@PQDATAXSSSP`QDATASSXSP`QDATAS0TSQ`QDATA0TxTS@PPDATAxTT0T O@PDATATUxT OQDATAUPUTOQDATAPUUUQQDATAUUPU`QQDATAUUOPDATA(V(WPhOOP !  DATA(W _(V@PP`QQz==o?XZ](X@YDATA(X@YTransform PropertiesView3d>DATA@Y(X3D Viewport propertiesView3d>"DATAXZr]333?Y.|????????z==o?&A*A?z==o??????*A B??=C ?@?@?@? DATAh]yXZ333?Y.|/9DATA _@m(WQ`QPO??Pף L@ak(`(`DATA(`Transform PropertiesIpo!>DATAx@a}a 333?Y/|xx> =DATAa{c@a333?Y/|CCx??|?DATA(cvhda333?Y/|zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATAhdzec333?Y/|CC|||??l|eeDATA,eBOp=ADATAefhd 333?Y/|zCCHBC|||?CFC= ADATAf|ge 333?Y/|?zDzDBCl||ll|zDzD=HB DATAgxhf 333?Y/|BCBCl|llFzD #<HB DATAxhrkg333?Y/|??? ???? A???PA A!O?j?}GCHB? A B? #<C DATAhkyxh333?Y/|/9DATA@m _ O@PQQO}~@nx|DATA@nXoLink and MaterialsEditing>DATAXopp@nMeshEditingF>DATAppqXoAnim settingsObject>DATAqrppDrawObjectF>DATArsqConstraintsObject>DATAstrEffectsObjectDATAtusHooksObjectF>qDATAuwtParticle InteractionObject>rDATAwxuSoftbodyObject>rDATAx0ywOutputRender>DATA0yHzxRenderRenderF>DATAHz`{0yAnimRender>DATA`{x|HzFormatRender>DATAx|`{ScriptlinksScript>DATA}w~333?Y0|ChC#DhCC(BDC?z?DATAh~y}333?Y0|/9SC(pSCScenetageainx0&@X(A@?@?GX@?GX@?GX=Hdd??< 2ddZ! ??  ????//backbuf/tmp\//ftype@&#@^@&^#D șDATAxcj.[IDATAjcX xDATAX c jDATA c X HDATA cȳ  DATAȳ c0  DATA0 c ȳ DATA cȤ0 (*DATAȤc8  DATA8cШȤ DATAШc8  <#DATAc!Ш DATA!c! DATA!c!DATAc!DATAcDATAcx HDATAx c hCDATA cPx (@DATAPc (DATAcP@ DATAc DATAch0 DATAhc!HDATAc8hDATA8c؈"ЯDATA؈c(8$xDATA(cx؈%HDATAxcȉ(&DATAȉcx'DATAchȉ(8DATAhc)DATAch*hDATAcX+DATAXc,DATAcX-DATAc..DATA(Hb,d'=A@DATALmL?B ?o: ?? #<=DATA@ h1 RenderLayerIMtIMRender ResultACA8CACameraamera.001L>DB=B B@?LA$LALamp ????=h>A4B>??? B4B?@@???WO(aWOWorld???===??A@pA A?L=TXhpxxTXprocessing_export.pyP( șșHtDATAC:\processing_export.pyDATAPghtDATAP FREEDATA( FREEDATA(pp ry DATAp( FREEDATAp  DATAH` FREEDATAH ps:DATAؕH e DATAؕ P 0)DATA hؕx FREEDATAh  0)DATAhFREEDATA@DATA@0)[DATAЗ@ 3FREEDATAЗP%(1)DATA`ЗderDATA`FREEDATA`HFREEDATA8FREEDATA8FREEDATAș8FREEDATAșFREEDATAXș0FREEDATAXxFREEDATAXFREEDATA0PFREEDATA0x؊ FREEDATAx0FREEDATAx(FREEDATAPx(extDATAPxDATAP%FREEDATA(0FREEDATA(pFREEDATAp(XFREEDATApFREEDATAHe dDATAHFREEDATA؞HFREEDATA؞ 0REEDATA h؞EFREEDATAh =derDATAhh=(1)DATA@FREEDATA@(=(0)DATAР@9FREEDATAР:0)DATA`РDATA`xFREEDATA`0)DATA8FREEDATA8Xps:DATAȢ8 DATAȢFREEDATAXȢ0FREEDATAXxFREEDATAXFREEDATA0FREEDATA0xP()EDATAx0FREEDATAxDATAP(;DATAPp#REEDATAPFREEDATA(!()DATA(ppFREEDATAp(!FREEDATApDATAHh!DATAHFREEDATAاH!EEDATAا hFREEDATA hا!REEDATAh FREEDATAh`!lenDATA@FREEDATA@ )DATAЩ@( FREEDATAЩ ;DATA`ЩP FREEDATA` $)EEDATA` FREEDATA8` FREEDATA8H!FREEDATAȫ8pFREEDATAȫ*EEDATAXȫ!DATAX!DATAXnot DATA0("1FREEDATA0xx(texDATAx0 FREEDATAxHzersDATAP" FREEDATAP8t DATAPFREEDATA("~ DATA(p8#FREEDATAp(#_by_DATAp#ix(fDATAHDATAH$.sizDATAذH`$DATAذ $DATA hذ$z DATAh 8%bal DATAh% lefDATA@P ,DATA@%FREEDATAв@& DATAв`& DATA`в&,end(DATA`''imagDATA`h'end(DATA8'(nderDATA8(0(numDATAȴ8x(* EEDATAȴ(0* DATAXȴ@)(DATAX)2FREEDATAX*)is sDATA0h*-DATA0x*(+ stDATAx0(+/DATAx+) DATAP+-3*l.DATAP + sDATAPH,tr(3DATA(,%romODATA(p,[a liDATAp(-7rrayDATAp-Hmt(1DATAHh.C'|' DATAH.<DATAعH0/4DATAع /Eear DATA hع0er('DATAh rginDATAhhplesDATA@DATA@X0FDATAл@0FDATAлH1*DATA`л1DATA`1DATA`P= TeDATA8,DATA8H2 DATAȽ8DATAȽ2) DATAXȽ2( BacDATAX@3amRaDATAX0fnamDATA03 'OPEDATA0x3(draDATAx084DATAx4DATAP4'DATAP(5^DATAP5bDATA(P6aDATA(p6^DATAp(x70DATAp7oDATAHDATAHDATAH8DATA 8'DATA h 9'DATAh p90(DATAh9)DATA@:/P)DATA@h:DATA@8;DATA;(DATA`;+DATA`(+DATA`8<%DATA8<-DATA8<`.DATA8.DATADATAX=DATAX=7DATAX0DATA0P>rDATA0xDATAx0>0raDATAx?;rbDATAPHDATAPx?DATAPDATA(?DATA(p@,8DATAp(x@$DATApDATAH@.DATAH0ADATAHADATA A$DATA h B*@?DATAh hDATAhBFREEDATA@B.DATA@0C7FREEDATA@DATADATA`C;DATA`DFREEDATA`FREEDATA8HDATA8hDATA8PDDATADATAXHDATAXDDATAXDATA0D DATA0x8EDATAx0 x(p,DATAx not DATAPE!matrDATAPE"DATAPXDATA(8FDATA(pDATAp(F0DATAph DATAHF&DATAH@GDATAHGDATA G"DATA h(H&DATAh DATAhHDATA@HDATA@DATA@DATAIDATA``IDATA`IDATA`0DATA8IDATA8@J1DATA8JDATAJDATAX@KDATAXp DATAXDATA0KnDATA0x0LDATAx0DATAxLDATAPLVDATAPPMEDATAPMDATA( DATA(pDATAp(@DATAp DATAHNDATAHNDATAHXDATA 0ODATA hO1DATAh ODATAh8PDATA@P$DATA@DATA@ DATA DATA`PoDATA`xQDATA`DATA8QDATA8RWDATA8RFDATASDATAXHDATAXDATAXDATA0SoDATA0xTDATAx0DATAxTDATAP UWDATAPUFDATAP VDATA(DATA(pDATAp(8DATApHDATAH DATAHV2DATAHDATA DATA hDATAh `W8DATAhWDATA@X/DATA@0DATA@xX*DATAȶDATA`XDATA`DATA`(YDATA8pY"DATA8XDATA8YDATAýDATAXPDATAXDATAXP DATA0ZDATA0x`ZADATAx0ZeDATAxp[PDATAPxtDATAPhDATAP[DATA(H\DATA(p\DATAp(\DATAp8]DATAH]DATAH]1DATAH0^DATA(x^DATA(p^DATAp(_DATApP_DATAH_DATAH_DATAH8`DATA `DATA h`DATAh aDATAhXaDATA@DATA@aDATA@0DATA DATA`a6DATA`XbKDATA`b&DATA80c#DATA8cDATA8cDATA dDATAXhdDATAXdDATAXDATA0DATA0xPDATAx0e!DATAxXeDATAPDATAPeDATAPeDATA(8fDATA(pf(DATAp(fDATAp(g,DATAHDATAHgDATAHDATA g@DATA hPhMDATAh hQDATAhDATA@8DATA@XiDATA@jDATADATA`DATA`jDATA`(ktDATA8ЕDATA8ГDATA8kDATAHDATAXDATAXlDATAXDATA0mDATA0xПDATAx0HnDATAxDATAPDATAPnDATAPnDATA(/DATA(pxDATAp(oDATAp DATAHoDATAHDATAH@pDATA p$DATA h DATAh pDATAh DATA@HDATA@(qDATA@xq8DATADATA`qDATA`pDATA`0rDATA8xrDATA8(DATA8rDATADATAXرDATAXsDATAXP DATA0  DATA0 x DATAx  0 `sDATA  x  DATA P  @DATAP   DATA  P sDATA (  `JDATA(  sDATAimport BlenderEDATA import os_SDATAimport structEDATAp from Blender import *:DATA from Blender import LampREEDATA$ from Blender.Scene import Render):DATA` from Blender.Draw import *oDATA from Blender.BGL import *nDATA from Blender import RegistryREEDATAP from Blender import TextDATAx DATA from math import *DATA DATA #globalsQDATA_DATA4 #get the root directory that the current file is inDATA(P#we'll write the muray files there. EEDATA path = Blender.Get('filename')1DATAtokens = path.split('\\')rDATAHfileName = tokens.pop();DATAfile = fileName.split('.')DATAfileName = file[0]DATA DATA path =''DATA0for i in tokens:DATAx path = path + i + '\\' DATADATAPP"DATA؊def export():EEDATA #open a file to export toDATA, f = open(path + fileName + '.mra','wb')GE:DATA,x s = open(path + fileName + '.mrb','wb')DATAx riDATA( f.write('muRay scene description\n')EDATA0 f.write(' ')EDATA def writeln(out):DATAX f.write(out + '\n')EEDATA DATA def fmt(input):= 4DATA return '%5.5f' %inputDATA DATA0 def point_by_matrix(p, m):DATAH return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],EDATA@ p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1] + m[3][1],EEDATA@h p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2] + m[3][2]]EEDATA  def vector_by_matrix(p, m):REEDATA@( return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0],EEDATA< p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1], DATA< p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2]] DATA DATA x def contain(min, max, point):EDATA for v in point:(4DATA if v[0] < min[0]:)EDATAX min[0] = v[0]:DATA if v[1] < min[1]:REEDATA min[1] = v[1]+ DATA0 if v[2] < min[2]:REEDATAx min[2] = v[2]rrDATA if v[0] > max[0]:REEDATA max[0] = v[0]DATAP if v[1] > max[1]:REEDATA max[1] = v[1]DATA if v[2] > max[2]:DATA( max[2] = v[2] ";DATA$p def containSphere(min,max,sphere):DATA  radius = sphere.getSize()[0]EDATA$ if min[0] > sphere.LocX-radius:')DATA p min[0] = sphere.LocX-radiusEDATA$ if min[1] > sphere.LocY-radius:(DATA  min[1] = sphere.LocY-radiusDATA$h if min[2] > sphere.LocZ-radius:arDATA  min[2] = sphere.LocZ-radiusEDATA$ if max[0] < sphere.LocX+radius:ecDATA h max[0] = sphere.LocX+radius DATA$ if max[1] < sphere.LocY+radius:o.DATA  max[1] = sphere.LocY+radiusrDATA$` if max[2] < sphere.LocZ+radius:o.DATA  max[2] = sphere.LocZ+radiusEDATA  DATA(  DATA  #Grab the sceneDATAP  scn = Scene.GetCurrent()DATA(  context = scn.getRenderingContext()DATA  obj = Blender.Object.Get()DATA`  DATAH! #export general scene dataDATApDATA DATA! #background colorTDATA! w=Blender.World.Get()yDATADATA4(" scene = Blender.Scene.GetCurrent().getChildren()EDATAxGDATA writeln('')REEDATAH DATA$" #create the baked textures listDATA8t baked_maps=[]DATA ,mDATA" #create a materials list00DATA8# material_array =[]DATA# materials = Material.get()DATA# for m in materials:SelDATA iDATA$ refFile = "NULL";DATA`$ textureFile = "NULL";DATA$ alphaFile = "NULL";DATA$ normalFile = "NULL";nDATA8% emitFile = "NULL";DATA% specFile = "NULL";DATAP 0DATA % for mtex in m.getTextures():EDATA& if mtex: DATA `& #check if there is an imageDATA0& if mtex.tex.type == Texture.Types.IMAGE:fa.DATA(' print mtex.tex.image.getFilename()DATAh' #map to colorrDATA,' if mtex.mapto == Texture.MapTo.COL:()DATA4( textureFile = mtex.tex.image.getFilename()EEDATA,x( if mtex.mapto == Texture.MapTo.ALPHA:DATA4( alphaFile = mtex.tex.image.getFilename() mt(DATA,@) if mtex.mapto == Texture.MapTo.NOR:,maDATA4) normalFile = mtex.tex.image.getFilename() eDATA,* if mtex.mapto == Texture.MapTo.EMIT:DATA0h* emitFile = mtex.tex.image.getFilename()atDATA,* if mtex.mapto == Texture.MapTo.REF:eftDATA0(+ refFile = mtex.tex.image.getFilename() DATA,+ if mtex.mapto == Texture.MapTo.SPEC:DATA0+ specFile = mtex.tex.image.getFilename() DATA ,DATA H, print m.getDiffuseShader()REEDATA(, material_array.append(m.getName()) etDATA\, writeln('shad=' + str(m.rgbCol) + '|' +str(m.getRayMirr()) + '|' + str(m.getHardness()) +DATA8- '|' + str(m.getAlpha()) +'|'+ str(m.getIOR()) +'|'+DATAL- str(m.getSpec())+'|'+ str(m.getEmit())+'|' + str(m.getRef()) + '|' + ''DATADh. str(m.getDiffuseShader()) +'|' + str(m.getSpecShader()) + '|' +DATA . str(m.getSpecCol()) +'|' +EDATA80/ str(textureFile) + '|' + str(alphaFile) + '|' + REEDATAH/ str(normalFile) + '|' + str(emitFile)+'|' + str(refFile) + '|' + SeDATA0 str(specFile), DATA)*lDATAh ) DATAREEDATAHX0 #while looping through the scene, we will need to collect the maximummDATAH0 #extents of the scene. These will be written to the head of the fileDATA,H1 #after all mesh objects have been measureEDATA1 min = [1e300,1e300,1e300];DATA 1 max = [-1e200,-1e300,-1e300];DATAP numObjects = 0DATAturDATAH2 for obj in scene:.DATA6, DATA 2 if obj.getType() == 'Camera':DATA,2 cam_mat = obj.getMatrix('worldspace')HeiDATA@3 print 'Exporting camera'DATA0 iDATA$3 height = context.imageSizeY() evDATA 3 width = context.imageSizeX()DATA 84 lens = obj.getData().lens DATA4 fov = lens; DATA(4 writeln('cam=' + str(camType.val) + DATA`(5 '['+str(cam_mat[0][0]) + ',' + str(cam_mat[0][1]) + ',' + str(cam_mat[0][2]) + ']' + '|' +EDATAd5 '['+str(cam_mat[1][0]) + ',' + str(cam_mat[1][1]) + ',' + str(cam_mat[1][2]) + ']' + '|' + "DATAdP6 '['+str(-cam_mat[2][0]) + ',' + str(-cam_mat[2][1]) + ',' + str(-cam_mat[2][2]) + ']' + '|' +EEDATA`6 '['+str(cam_mat[3][0]) + ',' + str(cam_mat[3][1]) + ',' + str(cam_mat[3][2]) + ']' + '|' +DATA4x7 str(width) + ',' + str(height) + ']' + '|' +REEDATAp7 str(fov) + ',' + str(fov) + ']' + str(obj.getData().getClipStart()) + '|' + str(camRadiusSlider.val) + '|' DATA )DATA DATA 8 elif obj.getType() == 'Lamp':DATA8 print 'Exporting Lamp' DATA 9 l=Lamp.Get(obj.getName())REEDATAp9 m = obj.getMatrix()DATA9 if l.getType() == 0: tryDATA0: #lamp=location,color,size,energy for a lampDATAh: writeln('lamp=[' + str(obj.getLocation()) + ']|['+ str(3*l.getEnergy()*l.col[0]) +','+ str(3*l.getEnergy()*l.col[1]) + ','+str(3*l.getEnergy()*l.col[2]) )DATA8; elif l.getType() == 1:DATA,; #sun=location,color,energy,direction+DATA ; print 'Exporting the sun'EEDATA( DATA(8< vec = vector_by_matrix([0,0,1],m)DATA< print str(vec)DATA< writeln('sun=['+ str(vec) + ']|[' + str(3*l.getEnergy()*l.col[0]) +','+ str(3*l.getEnergy()*l.col[1]) + ','+str(3*l.getEnergy()*l.col[2]) )DATA DATAREEDATA = elif obj.getType() =='Surf':EDATA8= material_index = material_array.index(obj.getName())DATA02DATA P> containSphere(min,max,obj)DATADATA4> writeln('sphere=[' + str(obj.getLocation()) +REEDATA<? ']|['+ str(obj.size[0]) + ']|['+ str(material_index))DATAH DATA x? elif obj.getType() == 'Mesh':DATA DATA? #get standard mesh dataEDATA0@ m = NMesh.GetRawFromObject(obj.getName())DATA(x@ mat = obj.getMatrix('worldspace')DATA DATA0@ #for every mesh, we dump a list of verticesDATA0A numverts = len(m.verts)DATAA numTris = 0 EEDATA(A print 'verts ' + str(numverts) DATA, B writeln('numverts=' + str(numverts)) EDATAh DATA B for i in range(numverts): DATA0B x,y,z = point_by_matrix(m.verts[i].co,mat)DATA80C writeln('v=' + fmt(x) + '|' + fmt(y) +'|' + fmt(z))DATA DATA DATA<C #iterate through faces - then split faces into trianglesDATAD faces = m.facesDATA DATA H #lastt()DATAh DATAPD lastUVTexture = 0DATA lastidx = 0;DATAH DATAD for fa in faces:DATA DATA$D #each face may have an imageMDATA 8E if str(fa.image) == 'None':DATA idx = -1EEDATA  else:ndDATA$E #is this image the last one?xDATA$E if lastUVTexture == fa.image:DATAX (DATA8F idx = lastidxDATA DATA4F #different texture, have we seen it before?.DATA h try:DATA(F idx = baked_maps.index(fa.image)DATA@G #create new entry DATAG except ValueError:DATA$G baked_maps.append(fa.image) DATA((H idx = baked_maps.index(fa.image)DATA DATA H lastUVTexture = fa.imageDATAH lastidx = idx;DATA DATA DATAI if len(fa.v) == 3: DATA`I numTris += 1DATAI numObjects+=1DATA0 DATA I #check for uv coordinatesDATA4@J #there has got to be a better way to do thisDATAJ if len(fa.uv) == 0:DATAJ zers=[0,0];DATA @K fa.uv = [zers,zers,zers];DATA p DATA DATApK trans = [point_by_matrix(fa.v[0].co,mat),point_by_matrix(fa.v[1].co,mat),point_by_matrix(fa.v[2].co,mat)]DATA0L contain(min,max,trans)DATA DATAL writeln('t=' + DATAXL str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + DATAHPM str(material_array.index(m.materials[fa.mat].getName())) + '|' +DATAM fmt(fa.uv[0][0]) + '|' + fmt(1-fa.uv[0][1]) + '|' + fmt(fa.uv[1][0]) + '|' + fmt(1-fa.uv[1][1]) + '|' + fmt(fa.uv[2][0]) + '|' + fmt(1-fa.uv[2][1]) + '|' + )DATA str(idx)EEDATA )DATA@ DATA  else:DATAN numTris += 2DATAN numObjects+=2DATAX DATA 0O #check for uv coordinatesDATA4O #there has got to be a better way to do thisDATAO if len(fa.uv) == 0:DATA8P zers=[0,0];DATA(P fa.uv = [zers,zers,zers,zers];DATA DATA  DATA  try:DATApP trans = [point_by_matrix(fa.v[0].co,mat),point_by_matrix(fa.v[1].co,mat),point_by_matrix(fa.v[2].co,mat)]DATA xQ contain(min,max,trans)DATADATAQ writeln('t=' + DATAXR str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + DATAHR str(material_array.index(m.materials[fa.mat].getName())) + '|' +DATAS fmt(fa.uv[0][0]) + '|' + fmt(1-fa.uv[0][1]) + '|' + fmt(fa.uv[1][0]) + '|' + fmt(1-fa.uv[1][1]) + '|' + fmt(fa.uv[2][0]) + '|' + fmt(1-fa.uv[2][1]) + '|' + DATAH str(idx)EDATA )DATA DATApS trans = [point_by_matrix(fa.v[2].co,mat),point_by_matrix(fa.v[3].co,mat),point_by_matrix(fa.v[0].co,mat)]DATA T contain(min,max,trans)DATA DATAT writeln('t=' + DATAX U str(fa.v[2].index) + '|' + str(fa.v[3].index) + '|' + str(fa.v[0].index) + '|' + DATAHU str(material_array.index(m.materials[fa.mat].getName())) + '|' +DATA V fmt(fa.uv[2][0]) + '|' + fmt(1-fa.uv[2][1]) + '|' + fmt(fa.uv[3][0]) + '|' + fmt(1-fa.uv[3][1]) + '|' + fmt(fa.uv[0][0]) + '|' + fmt(1-fa.uv[0][1]) + '|' + DATA str(idx)EDATA )DATA8 DATAH DATA except:REEDATA4V print 'caught quad exception on ' + str(fa) DATADATA DATA DATA<`W #if the background is set pass that in, else pass colorDATAW if Background.val:DATA0X writeln('bgimage=' + str(BackgroundText.val))DATA0 else:DATA,xX writeln('bgcolor=' + str(w[0].getHor()))DATAȶ DATA X #write out the baked texturesDATADATA(Y for tex in baked_maps:DATA$pY s.write('b=' + str(tex) + '\n') DATAXDATAY #done with the scene DATA ý f.close@DATA P s.closeDATA DATAPdef render():EEDATA Z spawnPath = path + fileNameDATAD`Z os.spawnl(os.P_NOWAIT,executable,'foo ' + path + ' ' + fileName)DATAhZ #os.spawnl(os.P_NOWAIT,"/home/sheemwaza/base/optimized/src/base","monkey","/home/sheemwaza/out.mra")DATATp[ #retcode=Popen(["/home/sheemwaza/base/src/base","/home/sheemwaza/out.mra"]).pidDATAxt print 'no op'EDATAhDATA[mSampleSlider = Create(0)DATAH\camRadiusSlider = Create(1)DATA\imageSamples = Create(1)DATA\shadowSamples = Create(4)DATA8]muonSlider = Create(0)DATA]Muon = Create(0)DATA4]BackgroundText = Create('using background color')DATA0^Background = Create(0)DATAx^numSample = Create(4)DATA^hemiToggle = Create(0)DATA_camType = Create(1)DATAP_iCacheToggle = Create(0)DATA_samplerWindow = Create(1)DATA_GIWindow = Create(0)DATA8`partOutput = Create(0)DATA`bounce = Create(0) DATA`filterWidth = Create(0)DATAajitter = Create(0)DATAXasbackground = Create(1)DATADATAamaterialsDrop = Create(0)DATA0 DATA def draw():DATA8a global mSampleSlider, muonSlider, Muon,BackgroundTextEDATALXb global Background, numSample, hemiToggle, bounce, ExitButton, iCacheToggleDATA(b global Button2, camType, exportButtonDATA$0c global imageSamples, shadowSamplesDATAc global camRadiusSliderDATA c global samplerWindow, GIWindowDATA d global partOutputDATAhd global filterWidth, jitterDATAd global sbackground DATA DATADATAPDATA$e glClearColor(1.0, 1.0, 1.0, 0.0)DATA Xe glClear(GL_COLOR_BUFFER_BIT)DATADATAe leftMargin = 10;DATAe bottomMargin = 15;DATA8f columnWidth = 170;DATA,f buttonWidth = columnWidth - leftMargin;DATAf columnHeight = 35;DATA0(g buttonHeight = columnHeight - bottomMargin;DATADATA g #always display these buttonsDATADATADg Button('Exit', 3, leftMargin, 5, buttonWidth, buttonHeight, '')DATAPPh Button('Export', 1, leftMargin+columnWidth,5, buttonWidth, buttonHeight, '')DATATh Button('Render', 2, leftMargin+ 2*columnWidth, 5, buttonWidth, buttonHeight, '')DATA DATA8 camType = Menu('Camera Model%t|Perspective %x1|Spherical %x2|Architecture %x3|DOF %x4', 5, leftMargin, 5*columnHeight, buttonWidth, buttonHeight, camType.val, 'Select which type of camera to use.')2DATAXi imageSamples = Slider('Image', 11, leftMargin , 6*columnHeight, buttonWidth, buttonHeight, imageSamples.val, 1, 20, imageSamples.val,'')]DATAj shadowSamples = Slider('Shadow', 12, leftMargin + columnWidth, 6*columnHeight, buttonWidth, buttonHeight, shadowSamples.val, 1, 20, 1,'') DATADATA DATAj #these are the GI settingsDATAx(k #Background = Toggle('Set Background', 7,leftMargin, 4*columnHeight, buttonWidth, buttonHeight, Background.val, '') +DATAЕ DATAГ DATAk sbackground = Menu('Background%t|Uniform %x1|CIE Clear Sky %x2|CIE Overcast %x3|Sky Model %x4', 102, leftMargin, 3*columnHeight, buttonWidth, buttonHeight,sbackground.val, 'Set Background')DATAH DATADATAl numSample = Slider('Samples', 6, leftMargin + columnWidth, 2*columnHeight, buttonWidth, buttonHeight,numSample.val, 1, 64, 4, 'The number of hemisphere samples.')DATADATAm bounce = Slider('Bounce', 0, leftMargin + 2 * columnWidth, 2*columnHeight, buttonWidth, buttonHeight, bounce.val, 1, 5, 0,'') DATAП DATAHn if Background.val == 1:DATA BackgroundText = String('', 6, leftMargin + columnWidth, 4*columnHeight, buttonWidth, buttonHeight, BackgroundText.val, 512, '')DATA DATAn if camType.val == 4:DATAn camRadiusSlider = Slider('Radius', 0, leftMargin + columnWidth, 5*columnHeight, buttonWidth, buttonHeight, camRadiusSlider.val, 1, 20, 1,'')DATA/DATAx DATAodef setBackground(fname):DATA print fnameREEDATAo BackgroundText.val=fnameDATADATA@pdef event(evt, val):DATA(p if (evt== QKEY and not val): Exit()DATA DATApdef bevent(evt):DATA DATAHDATA (q if evt == 7: #setBackgroundDATA<xq Blender.Window.FileSelector(setBackground,'OPEN FILE')DATADATAq elif evt == 10:DATAp DATA0r print 'Materials'DATAxr Blender.Redraw()DATA( DATAr elif evt == 3: #ExitButtonDATA  Exit()beDATAرDATAs elif evt == 2: #Button2DATA P export()DATA  render())DATADATA `s elif evt == 1: #exportButtonDATA  export(),DATA@ DATA else:DATAs Blender.Redraw()DATA`J DATA sRegister(draw, event, bevent)TXhxxpTXTextyyyyXyDATAyEERFDATAOB [0 OBCameraamera.001 8ne@>N@???*?91<"P???ޕ/?5F:?81V~>75e?'?T3>ne@>N@??????7573Ib ?4O2LZ?2]ڜT??OBd??)d??>)d?????OB 0 [OBCube.001{ .?{»,a2>a2>Γ=??a2>a2>Γ=.?{»,?????Dz@+@rn@vEA;@d@R5BwrFwB?DOBd?? #=?>=??@???PDATA OB [I0 OBCube.0020 D?"4}e=??@???`)DATA0 OB I[@ OBCube.003(F` ?{Z35|>@|>@A???|>@|>@A??{Z35?????+?U?^T6~>0@?n$U?QKAq[A?DOBd?? #=?>=??@???XHiDATA` OB @ [HIOBcube3_copy5_RoboM.001 p @?[/Ϻˀ%=%=%=??%=%=%=@?[/Ϻˀ?????nAAt'@ʰA0NAK(q/ACӔ ; C?DOBd?? #=?>=??@???hDATAp OB H[@ OBcube3_copy5_RoboM.002pX n?cty=??@???8HODATAX OB [HOBcube3_copy5_RoboMetal08\?????????????ޕ/?8F:?81W~>85e?'?T2