BLENDER_v234REND x1SRd,MV}SRscreenДDATAVYW$VRenderRender@>DATAWYXVAnimRender>DATAXYdYWFormatRender>DATAdYY4ZXLink and MaterialsEditing>DATA4ZY[dYMeshEditing@>DATA[Y[4ZPreviewLamp>DATA[Y\[LampLamp@>DATA\Yt][Shadow and SpotLamp>DATAt]YD^\Texture and InputLamp>DATAD^Y_t]Map ToLamp>t]DATA_Y_D^PreviewWorld>DATA_Y`_WorldWorld@>DATA`Ya_YafRayRender@>VDATAaYTb`YafRay GIRender@>VDATATbY$caMesh ToolsEditing>DATA$cYcTbMesh Tools 1Editing>DATAcYd$cAnim settingsObject>DATAdYecDrawObject@>DATAeYdfdConstraintsObject>DATAdfY4geEffectsObjecteDATA4gYhdfPreviewMaterial>DATAhYh4gMaterialMaterial@>DATAhYihCameraEditing@>DATAiYtjhShadersMaterial>DATAtjYDkiMirror TranspMaterial>iDATADkY|tjTextureMaterial>DATA|Y4DkTexture faceEditing>4DATA4Y|UV CalculationEditing>DATAY4RampsMaterial@>hDATAYParticle InteractionObject>eDATAYثMist / Stars / PhysicsWorld>DATAثYtuAmb OccWorld>DATAtuY ثTexture and InputWorld>DATA Y<tuMap ToWorld>tuDATA<Y ScriptlinksScript>DATAlH333?>o?--- TrDATALn333?mCC@@:@T٫?5DATAhnNto 333?m4 @DATA toOon333?mDATAoCqto333?m??ND?4.> >?D$?N%% ??% 4.+?̺o>x>o!)s>o???ND?4.> >??g@ B?=C>4.>o7o7 DATAqHro333?mDdCD1MCC(BDC??DATATrJq333?mOpen Imageile/home/ingo/projects/lincity/hare/download/treebottom.png.py QDATA|tZlymN|NO|OZ<V<o?+E++E ,6duwDATAduCw333?|t?3?3Y<&>8+3꠪??3?3Y<&꠪9+3??Z<K%0n;V<ꉖ`;hB.:?B5< BCY<&꠪8+3??Z<V<o??3?3Y<&>8+3꠪?5?5< B B?=CY<&>꠪>9+3~~ DATA wOwdu333?|tDATATwJw333?|t Save Filegs3D/home/ingo/projects/lincity/e/files/wings/home2.blendQHUDATAlyZ|tOON25?5?S6>;?55?55??>5?t0{DP{DD?,x(,Cr(63C 95jrBD;D)='=;m̰N}{}ge:뉐mN@ԃ@KY@q;^rtCu(D؂ir^5?5?>25?5?S6>;?>zZJP@# B?=Ct>z?$ DATA|HTz333?lyDdCD1MCC(BDC??SRd}V,MSRscreen.001$~䀟$dT^`DATA$~Wd~DATAd~W~$~`DATA~W~d~`DATA~W$~DATA$Wd~DDATAdW$DDATAWdDATAW$DATA$WdDATAdW$DATAW䀟dDATA䀟WDDATA$Xdd~~DATAdX$$~~DATAX䁟dd~$DATA䁟X$~dDATA$Xd䁟$dDATAdX$$~DATAX䂟d~DATA䂟X$DATA$Xd䂟$DATAdX$$$DATAX䃟dddDATA䃟X$dDATA$Xd䃟$dDATAdX$$DATAX䄟ddDATA䄟X$$䀟DATA$Xd䄟d䀟DATAdX$䀟DATAZ̉$~~?FDz@Pףk\DATAkYOutputRender>DATAYkRenderRender@>DATAY\AnimRender>DATA\YFormatRender>DATAH333?DdC6A(D(dCC(BDC??DATAC333???? ???? A??FDz@PA Aj?I7>}GCHB? A B?=CXXDATẢZ$d~~dE`E_``DATAZ̉$dg=Ρ>o?  LDATAIl333?zCAzCA A@FB= A DATAlKL333?AA Y YCA A@CC #<@DATA,jOB`ADATALCl333????55@??A0??5>5?g=Ρ>o$[;??cYAYJ@5>5??cYA B? #<C55@DATAZT䀟ddg=S=o?CC@5tDATAtID333?zCAzCA@@ A@FB= A DATADHDt333?DdCJRCۖzDGhICC(BDC??DATADGTD333?zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATATL4D333??DATA4KT333?AA>l>lBA A@CC #<@DATA,jOBp=ADATAC4333????55@??A0??5>5?g=S=o$s>?cYA~2bA5>5??cYA B?=C55@DATATZ$$䀟g=+=o?CC@<LDATA<GL333?TzC̽̌?zC@@@ #< #<`jFzD TOBzC̽̌?DATALHL<333?TDdC@CdDGhICC(BDC??DATALCL333?T???55@??A0??5>5?g=+=o$gV>?cYAL³90A5>5??cYA B?=C55@SCASC1 b$>>MATdd??< =fff?=fff?Z@@?????o://backbuf//ftypeDDATA;$ ~DATA$;RDATA;ls$ b$DATAls;4 |DATA4;$lsDATA$;ܜ4t/DATAܜ;$ԆDATA;죟ܜ*DATA죟;| DATA|;Ĥ죟 \DATAĤ; | lDATA ;Ĥ (DATA(T:,xd'=A@OB8OBCamera @0@4 @???ѵ?`<@?ޟ?)?`Ƽ#Ž }?'?">?V>@0@4 @?????s?(]s)d?????OB8ԆOBCamera.001 tAa&AxaA???I?T@??55?T25??>5?Aa&AxaA??????^l62'?2#(22?88D?DOBd?? #=?>=?@???OBԆ8OBCubeT@,_@?QE?QE?QE?-ӿ??C)ϚDϚD?C)QE?@,_@??????V}N(3?Yj?%3Y?2j?~qDVD?DOBd?? #=?>=?@???X>DATATOB8t/ԆOBCube.001LƟDeP?n_@?QE?QE?QE?-ӿ??C)ϚDϚD?C)QE?eP?n_@?????? Vw}g-3?Zj?N3Z?j?פ=?@???X>DATADOBt/8OBCube.002NJMA_@?QE?QE?QE?-ӿ??C)ϚDϚD?C)QE?JMA_@??????. V}{6+8]3?*Yj?ӑ3W?,j?"\DTD?DOBd?? #=?>=?@???X>DATANOB8|t/OBCube.003 lB^@_@?QE?QE?QE?-ӿ??C)ϚDϚD?C)QE?B^@_@??????Vs}_8^3?Zvj?Z3Y?vj?ĔؔD=?@???X>DATAlOB|8$OBLamp.003 `>@>????????`>@>?????5B5?65?>>5?{DF{D)eD?DOBd?? #=?>=?@???OB$8R|OBLamp.004 ԊM@ֿV+A#%?#%?#%???#%?#%?#%?M@ֿV+A?????dbb?vb6uuc?u>u>b?|:DE=?@???OBR8l$OBLamp.005 $?MCAFA#%?#%?#%???#%?#%?#%??MCAFA?????bc?D!7vvb?v>v>b?N;Dp:DID?DOBd?? #=?>=?@???OBl8\ROBMeshޟ|"= <?????%%???%%i!3?%i!3"= <??????5255???5?-{DDOO{?DOBd?? #=?>=?@???DATA|OB\8lOBPlaneŏbF^<0?0?0???0?0?0?bF^<?????NN?N[[N?[?[?N?ⅅgE?DOBd?? #=?>=?@???DATAŏOB8\OBLamp ,U@N?MA???- >{??|?>8߆>81?߆>|?U@N?MA?????2/5?@|A?Wz>?>F?t@D{DbD?DOBd?? #=?>=?@???MELƟ+4ΟMECube.001Ĉ쌢dl]`)T,<????DATA쌢TDATA4l]0)l>s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>===)6>ZF==pOF=kHF>==$!ߴr M!ߴ#D,!ߴrY1>)߳N <|BN -7N N  ?봴j>~o#<%j>#,T83j>#~o#? ?2>?P6? 2>??6? 2>P?6? ?2>PP6? ??XX? ?Xb ?b ??X<?5?q~d35?<5?@!?x궴5?q~]@>S:a˾<|@¬:ak8\@¬:a9@>S:a|e\>h@hDSe]h@hhSG>qh@DhS%G>U>h@DDSDATA`-T                      (!(!!''"'""&&#&##%%$%$$($ ! # " DATApd,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "DATAP *,٫:?>:?T??Z???٫?>?T?>Z???٫>>>T?8>Z???٫r?>r?T?V?Z???٫:?T?:?>V?Z???٫V?Z?:?>V?=??٫8>Z?=T?=>??٫8>Z?=>8>=??٫>Z?>T?>>??٫>Z?>>>=??٫?Z??T??>??٫?Z??>?=??٫?=:?>?Z???٫>=?>>Z???٫8>=>>8>Z???٫V?=r?>V?Z???q"?i>ȾP<5NqP<F5NV<.FV<?=?.??<?;?=??`<?Z?;?`X?ܾ<"?i?ZX?ܾ>Ⱦ<>ȾX?ܾA?>>><X?ܾ?`??A?><?`??*???<???+??*?<VC?+?<Vƾ?C?<P>ƾ?<P>Ⱦ>>><>>>>?=?<ƾ?>=?t?<C?ƾ?t??<+?C???<?*??+?????<???*???r??<A?>??r????<>>A?>??>?<>???P>?=?<r????P>???<??#@?P>???<t?=?P>??<ME+֟MECube.004+E )T,<????DATATDATA40)l>s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>===)6>ZF==pOF=kHF>==$!ߴr M!ߴ#D,!ߴrY1>)߳N <|BN -7N N  ?봴j>~o#<%j>#,T83j>#~o#? ?2>?P6? 2>??6? 2>P?6? ?2>PP6? ??XX? ?Xb ?b ??X<?5?q~d35?<5?@!?x궴5?q~]@>S:a˾<|@¬:ak8\@¬:a9@>S:a|e\>h@hDSe]h@hhSG>qh@DhS%G>U>h@DDSDATA -T                      (!(!!''"'""&&#&##%%$%$$($ ! # " DATAp+,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "DATAP E*,٫:?>:?T??Z???٫?>?T?>Z???٫>>>T?8>Z???٫r?>r?T?V?Z???٫:?T?:?>V?Z???٫V?Z?:?>V?=??٫8>Z?=T?=>??٫8>Z?=>8>=??٫>Z?>T?>>??٫>Z?>>>=??٫?Z??T??>??٫?Z??>?=??٫?=:?>?Z???٫>=?>>Z???٫8>=>>8>Z???٫V?=r?>V?Z???q"?i>ȾP<5NqP<F5NV<.FV<?=?.??<?;?=??`<?Z?;?`X?ܾ<"?i?ZX?ܾ>Ⱦ<>ȾX?ܾA?>>><X?ܾ?`??A?><?`??*???<???+??*?<VC?+?<Vƾ?C?<P>ƾ?<P>Ⱦ>>><>>>>?=?<ƾ?>=?t?<C?ƾ?t??<+?C???<?*??+?????<???*???r??<A?>??r????<>>A?>??>?<>???P>?=?<r????P>???<??#@?P>???<t?=?P>??<ME+ MECube.005ԓLm0e4i)T,<????DATAԓTDATA4e0)l>s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>===)6>ZF==pOF=kHF>==$!ߴr M!ߴ#D,!ߴrY1>)߳N <|BN -7N N  ?봴j>~o#<%j>#,T83j>#~o#? ?2>?P6? 2>??6? 2>P?6? ?2>PP6? ??XX? ?Xb ?b ??X<?5?q~d35?<5?@!?x궴5?q~]@>S:a˾<|@¬:ak8\@¬:a9@>S:a|e\>h@hDSe]h@hhSG>qh@DhS%G>U>h@DDSDATA4i-T                      ((!!'!''""&"&&###%%$%$($ $ ! # "DATApLm,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "DATAP 0*,٫:?>:?T??Z???٫?>?T?>Z???٫>>>T?8>Z???٫r?>r?T?V?Z???٫:?T?:?>V?Z???٫V?Z?:?>V?=??٫8>Z?=T?=>??٫8>Z?=>8>=??٫>Z?>T?>>??٫>Z?>>>=??٫?Z??T??>??٫?Z??>?=??٫?=:?>?Z???٫>=?>>Z???٫8>=>>8>Z???٫V?=r?>V?Z???q"?i>ȾP<5NqP<F5NV<.FV<?=?.??<?;?=??`<?Z?;?`X?ܾ<"?i?ZX?ܾ>Ⱦ<>ȾX?ܾA?>>><X?ܾ?`??A?><?`??*???<???+??*?<VC?+?<Vƾ?C?<P>ƾ?<P>Ⱦ>>><>>>>?=?<ƾ?>=?t?<C?ƾ?t??<+?C???<?*??+?????<???*???r??<A?>??r????<>>A?>??>?<>???P>?=?<r????P>???<??#@?P>???<t?=?P>??<ME +ޟMECube.006 5$|ht)T,<????DATATDATA4|h0)l>s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>===)6>ZF==pOF=kHF>==$!ߴr M!ߴ#D,!ߴrY1>)߳N <|BN -7N N  ?봴j>~o#<%j>#,T83j>#~o#? ?2>?P6? 2>??6? 2>P?6? ?2>PP6? ??XX? ?Xb ?b ??X<?5?q~d35?<5?@!?x궴5?q~]@>S:a˾<|@¬:ak8\@¬:a9@>S:a|e\>h@hDSe]h@hhSG>qh@DhS%G>U>h@DDSDATAt-T                      (!(!!''"'""&&#&##%%$%$$($ ! # " DATAp,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "DATAP $*,٫:?>:?T??Z???٫?>?T?>Z???٫>>>T?8>Z???٫r?>r?T?V?Z???٫:?T?:?>V?Z???٫V?Z?:?>V?=??٫8>Z?=T?=>??٫8>Z?=>8>=??٫>Z?>T?>>??٫>Z?>>>=??٫?Z??T??>??٫?Z??>?=??٫?=:?>?Z???٫>=?>>Z???٫8>=>>8>Z???٫V?=r?>V?Z???q"?i>ȾP<5NqP<F5NV<.FV<?=?.??<?;?=??`<?Z?;?`X?ܾ<"?i?ZX?ܾ>Ⱦ<>ȾX?ܾA?>>><X?ܾ?`??A?><?`??*???<???+??*?<VC?+?<Vƾ?C?<P>ƾ?<P>Ⱦ>>><>>>>?=?<ƾ?>=?t?<C?ƾ?t??<+?C???<?*??+?????<???*???r??<A?>??r????<>>A?>??>?<>???P>?=?<r????P>???<??#@?P>???<t?=?P>??<MEޟ+ MEhomed$D$ lf,"?Ve?3?c?DATA$TDATA 0?)I??Z???ZZ??I)?t??Z?I???Z?~q?Z~?~q?~q>sg٘&?~q*?sgh?>Z|?*?Z|?YT?ZZ?YT?YT*?s&&?YT>s&i?~q>I?YT>II?YT*?III?~q*?II0n?0Z0?Z?0?ZZ?0?Z??0??0?0P\<$?PeD?KeD?K\<$?P>\<$P>eDK?eDK?\<$?k>P?k>K?2tP?K?2tP?PP2tP?Pk>Kk>K2tP?P>2tP??P>k>?K?k>?K?2tP???Y58N?f99\?I0!9\?I0!N?k>K??k>P>?2tP?P>?2tP?K?E>Y58?E>I0!?rH?I0!?rH?(N?rH?QJ?rH?Y58?Pk>?P2tP??K2tP??Kk>?PeDP\<$K\<$KeDP>k>P>2tP?K?2tP?K?k>\\<$P-\eDP.(\eDK.\\<$K\2tP?P>.\k>P>\k>K?-\2tP?K?.(\eDP>.\\<$P>\\<$K?-\eDK?.(\k>P-\2tP?P.(\2tP?K.\k>K)?)??ҟ)??1u?)??A/E`?)?d?)?-Ka)?1!)?E(P?#=ʮz?P?#=Pv?P?#Pv~#P?#ʮ#VeP?#=9QgVe@#=ޮB\#Ve@#{*\VeP?#eo0ůVe?P?#=_ÞVe?P?#ř&Ve?@#$ZTVe?@#=FVe T_?c?+,Џ T_?c?!0" T_?c?!? T_?c?!Ve? T_?c?4RVe?O;?c?7P'(L[?O;?c?CDcDS0"O;?c?O;?c?cDSVeO;?c?ɯ'(L[Ve? T_?c4Ϯp? T_?cu0" T_?cu T_?cuVe T_?c$4ϮpVeO;?c'O;?c[0"O;?c[?O;?c[Ve?O;?czP'm?om?h7"m?o>†?ٓp>†?ٓp?&?k>?Xs?Gn>4?Xs?"d?Xs?Gn4.?&?kLG ?i*^I?ԬHНI͢6>?Ԭ/I͢6>G ?i*}Iݘ@G ?i*1&3@i*I3@ԬII6>3@ԬIII6>3@i*II=3@&is&6\3@&&s&6\3@ʾ&si=3@ʾisi= m@&II6\ m@&III6\ m@ʾII= m@ʾIDATA -l         &'&''(()&)()*+* " "++,",- -*-,%#%#././/001.10123!2!""334"45!2545$%%$766778899689:; ;<< ==:<= >?>??@@A>A@ABCBCCDDED EEFFGGBFGHIHIIJJKHKJKLML"M MN NOLONOPQ"P!QQR!RSPSRS#$TUVUVWWTXYYZZ[X[\]]^^_\_`aabbc`cde$deyexyxefeffggtgtmgmghhhiiiiijj!kkdjkokosskpepxplleolpstununmuuinirvqrqwvwyzfzz{g{g|t|{|jkkskdelorrvv sxxsqqsrsstvtww}t}|}q}}}}~}~xyz{|uvFBEB;:cb$a%`_^]#\%[ZY%X$WV%U#T  nihmg ;;DATAD,  @ @ @ @  @ @      '&(')&)(+* ",+"- *-,UT#%@VU%@W#T@WV@/.@0/@1.@10@32!"43"5!254YX$%@ZY%@[$X@[Z@76879698;:@;@; @<; @=:@=< @?>@@?@A>@A@@CBDCED FE GBGFIHJIKHKJML" NM O"LONQP"!RQ!S"PSR]\%#@#^]@_%\@_^@a`%$@ba$@c%`@cb@&'()*+,-TUVW@./01@2345XYZ[@6789>?@A@HIJKLMNOPQRS\]^_@`abc@ed$@eyx fegf gmt!hg@ih@i ji!k$d@kj!kos!pex ple solp tmnu ui uni vrqw zyef({zfg,|gt"|{g$ij(jk,ks"k$  kd@de@el@ok@lo@mg@gh@hi@nm@in@r v rv    @ @       @@ @       #@@@@@BEFBFGspx@sxCsqAsqrAsrAsEtwvDtw}Ct}|E}wq }q }@}@}~@@xxyyzz{{||}@@@@@tuvwKuvC;<=:@CDEB@@DATA.$*lP>p>>><l>??>>><l>>?>?>>><|=W?=>V?>V?W?<l>>@>P>>>< ???? ???? ???? ???? ????l>??>?& H<>>>l_> b?>?>>>5g|?l?>b?N<||?& H<>?>?l>5g|?N<||??>b?_> b?l>M?)>>V?c#<>=>>l#>c?>M?=>>=>up}?l~>>%c?#)>>V?l~>>%c?#>c?=>up}?#>>h>?P=? ?<l=>>>? ?< ?<l=h><P=?P=>h><l=h>=>< ?<P=<lj?,??)??>?><lg?k?j?,??>??<l?h?>??>?)?<l?h?g?k???>?<l3,?>P$f?>p}?>=>>l3,?5=3,?>=>>=>#<l5$f?5=Rp}? #P$f?>l5$f?5=3,?5==>#0f?5D>'}?VH>>>l%,? K=P,?>>>> #<l5f?br=p}?$:<'}?VH>0f?5D>l5f?br=%,? K=> #p?>?>?><l?>?>?>?><l?>?>?>?><l ?>?>?>?<lr?>?`?>p?><lr?> ?>??`<l>&?p=#?@>?><l>e?>&??>>?<lP=a?pz?@>p=#?<lP=a?>e?>?pz?<l,E>~>v>\>>>& H<>l:B>=,E>~>& H<> #U=:B>= #j4<l$>_=>U=~>j4<>CE<l>օ=> #<>>v>\>l>օ=$>_=>CE<> #<le?2?=,??>>'}?VH>le?b?e?2?'}?VH>}?||?lD4,?b?>5g|?>>=,??lD4,?b?e?b?}?||?>5g|?l>>&>>>=>>c#<>l>>6=>>&>c#<> #< #<l>>6==>#<=>>>>l>>6=>>6= #< #<=>#<l]$f?,?4,?<?=>>p}?>ls$f?c?]$f?,?p}?>p}?Rp}?l4,?c?=>up}?=>>4,?<?l4,?c?s$f?c?p}?Rp}?=>up}?l?p>?>? ??P=<l?P=?P=h?p>?p><lh?>? ?? ??><l?P=? ?h?>h?p><l>u?>:?? ???<l=u?>u???<?<l=:?< ?? ?>:?<l=:?=u?<?< ?<|????<|????<|????<|????<|????|????|????|????<|????<|????|????<|????|????<l????????< ????l????l???? ????l>??pz?>?<l??>?>???< ????l????l<?<?????<l???? ???? ???? ???? ???? ???? ???? ???? ???>?>< ???? ???? ???? ???? ???? ???? ???? ???? ??>p??? {??>?>r???l??>?<???<l ????????<l ?? ??????<l>?>?<?>?<l>? ????>?<l>k?>H?>$??<l>k?>k??>?<l?k?>k?>???<l?C?? ?>$?>H?<l?C??k???? ?<lt:R?0T=t:R? hq? ?0T=?? >4?>p???<  ?6????? ?r?<  ?6?>4????<  ?r?{??>r???  ?r???{???? >r??>p??? >r?>????lt:R? hq?> hq? ?0T=??l????l????l????l> hq?>0T= ?0T=??l/>X!?H?X!?˛ ?[K%?!>[K%?l/>?/>X!?!>[K%?!>9?lH??˛ ?9?˛ ?[K%?H?X!?lH??/>?!>9?˛ ?9?|H?X!?/>X!?/>?H??|>>/?>/?T?>T?<|>>/?>/?T?>T?<|>>/?>/?T?>T?<|>>/?>/?T?>T?<????????????????????????????????l@>@>>>??l@>>>>>??l@>>>?>??l@>?>?>?????????? ???? ???? ???? ???? ???? ???????? ???? ???? ??>>?? ?>?????????????????? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ????????|{??p}? #<? #<?? ???? ????|????|?~??~?<|}?#<}??<?8< #<|? #< #< #<<?{??ME+l ޟMEPlane.001Ïn@n@?DATATDATAP0n@n@n@nnnnn@DATA,DATA<*????MAXT!MAdefault?????????????L?>?? ?????@?=?=???MAXT!MATree?????????????L?m=?? ?????@?=?=???IM( lIMroofsmall.png/home/ingo/projects/lincity/roofsmall.pngo,5TZTNR^IM(l| IMwall.png/home/ingo/projects/lincity/wall.png$Tl4Űɰݰ\IM(|lIMwindow.png/home/ingo/projects/lincity/window.pngd%*t.2ĥ4LIM(٫|IMtree.png/home/ingo/projects/lincity/tree.pngD$udUZIM(٫IMtreebottom.png/home/ingo/projects/lincity/treebottom.png]^bwխDڭޭCAdtCACamera2=B B?CAdtCACamera.001=B B?LAԊ$LALamp.001????@A4B>??? B4B?@@???LA$ԊLALamp.002????@A4B>??? B4B?@@???LA,$LALamp?????A4B>??? B4B?@@???LA,LALamp.006!?????A4B>??? B4B?@@???TXd4TXobj_io_modif228.pyxL_DATA$/share/download/obj_io_modif228.pyoDATATJDATATd&DATAT5`pDATA5tDATATTFREEDATATDATATFREEDATA2qDATAT\DATATDATATJDATA4EDATATIDATATG DATAT(DATADATATDATATLHDATATIudioDATA<DATATl4D ViDATATJer PDATATDGudioDATA LScheDATA T ,@DATAT   Kser DATA  T KDATA ! WFREEDATA!T!  N`pDATAT!!!DATA!!T!(U@DATA!"!O`pDATA"T"!dMDATAT"""H`pDATA""T"TIDATA"#"WT@DATA#T#"LJ'3tDATAT###DATA##T# DATA#$#<IDATA$T$#NDATAT$$$,P`pDATA$$T$O(U@DATA$%$$ MDATA%T%$ NhpDATAT%%%!NhpDATA%%T%!<DATA%&%=䖡DATA>T>=,DATAT>>>tDATA>>T>DATA>?>엡!DATA?T?><DATAT???|!`DATA??T?̘DATA?@?DATA@T@?DDATAT@@@t0qDATA@@T@ xDATA@A@ DATAATA@,DATATAAAdDATAAATADATAABAܚDATABTBADATATBBB\DATABBTB DATABCB̛DATACTCB!DATATCCCLDATACCTC!DATACDCԜ DATADTDC DATATDDD<!DATADDTDFREEDATADED̝!DATAETEDDATATEEE\DATAEETEECDATAEFE䞡RqDATAFTFE$DATATFFFdDATAFFTFDATAFGF䟡DATAGTGFFDATATGGG\,DATAGGTGDATAGHG$DATAHTHGLDATATHHH DATAHHTHԡDATAHIHDATAITIH\,DATATIIIDATAIITI#DATAIJIL.DATAJTJIDATATJJJ䣡&DATAJJTJ4DATAJKJtDATAKTKJ Tex DATATKKK!DATAKKTKTDATAKLK/\DATALTLKܥ$xDATATLLL,DATALLTLl#DATALMLDATAMTMLDATATMMM<xDATAMMTMr2/sDATAMNMħDATANTNMDATATNNNL`DDATANNTNFREEDATANON!DATAOTON DATATOOOD!DATAOOTODATAOPOԩDATAPTPODATATPPPTDATAPPTP"DATAPQPԪ#DATAQTQP$DATATQQQTDATAQQTQDATAQRQԫDATARTRQDATATRRR\DATARRTRDATARSR̬0DATASTSR,DATATSSSt0DATASSTSԭPGDATASTS/DATATTTStDATATTTTvDATATTTTD5DATATUT6ODATAUTUTDATATUUUL'DATAUUTUfDATAUVU,JDATAVTVU1DATATVVVDATAVVTVLDATAVWVQDATAWTWVJDATATWWW1DATAWWTW쳡DATAWXWDATAXTXW\DATATXXX>DATAXXTX 7DATAXYXl<`DDATAYTYXԵDATATYYYDATAYYTYTDATAYZYPDATAZTZY<DATATZZZDATAZZTZķDATAZ[ZDATA[T[ZLU=qDATAT[[[̸;RadiDATA[[T[4DATA[\[tDATA\T\[DATAT\\\)DATA\\T\T;DATA\]\DATA]T]\ DATAT]]]4DATA]]T]|DDATA]^]컡5DATA^T^]L DATAT^^^!DATA^^T^Լl#BCDATA^_^!LoDATA_T_^d$50%DATAT___DATA__T_佡!DATA_`_4 geCDATA`T`_l!DATAT```!DATA``T` DATA`a`L!DATAaTa` pCDATATaaaԿLoDATAaaTa!DATAabaT&DATAbTba(DATATbbbx+zCDATAbbTb<FREEDATAbcb|DATAcTcb DATATccc#DATAccTc4¡ DATAcdcl¡2DATAdTdc¡ DATATdddá DATAddTd<á DATAdedáDATAeTedá.DATATeee,ġDATAeeTelġDATAefeġDATAfTfeġDATATfff,šDATAffTflšDATAfgfšDATAgTgfš!DATATggg,ơ&DATAggTg|ơ(DATAghgơDATAhThgǡDATAThhhTǡDATAhhThǡ DATAhihǡ#DATAiTih ȡ`DATATiiiLȡDATAiiTiȡDATAijiȡDATAjTji ɡDATATjjj<ɡ2FREEDATAjjTjɡDATAjkjɡ DATAkTkjʡ DATATkkkTʡ.BDATAkkTkʡxDATAklkʡnceDATAlTlk$ˡDATATllldˡDATAllTlˡDATAlmlˡ!DATAmTml$̡(DATATmmm|̡(DATAmmTm̡DATAmnm͡BDATAnTnmT͡pDATATnnn͡DATAnnTn͡ DATAnonΡDATAoTonDΡ/DATAToooΡDATAooToΡDATAopoϡDATApTpoTϡ!DATATpppϡDATAppTpϡDATApqp,С DATAqTqpdСDATATqqqСDATAqqTqСDATAqrq$ѡDATArTrqTѡ%@9DATATrrrѡ$DATArrTrѡDATArsr4ҡDATAsTsrtҡDATATsssҡDATAssTsҡDATAsts4ӡDATAtTtstӡDATATtttӡDATAttTtӡ%pDATAtut4ԡDATAuTuttԡDATATuuuԡDATAuuTuԡADATAuvu4ա%pDATAvTvutաDATATvvvաDATAvvTvաDATAvwv$֡DATAwTwvd֡PHDATATwww֡AspXDATAwwTw֡ DATAwxwסDATAxTxwdסDATATxxxסDATAxxTxס%pDATAxyxءDATAyTyx\ء%DATATyyyء"DATAyyTyء'DATAyzyL١@DATAzTzy١DATATzzz١DATAzzTz$ڡDATAz{zlڡ'DATA{T{zڡDATAT{{{ڡ(DATA{{T{Dۡ!DATA{|{ۡDATA|T|{ۡDATAT|||$ܡ!QualDATA||T|tܡDATA|}|ܡ(DATA}T}|ܡ!DATAT}}}LݡDATA}}T}ݡDATA}~}ݡDATA~T~}$ޡ(DATAT~~~|ޡDATA~~T~ޡ'DATA~~ޡDATAT~Dߡ%DATATߡ%DATATߡ%DATA4%pDATAT|DATAT*DATAԀT0DATAԀ|/DATATԀE'DATATD&DATAԁTDATAԁ1DATATԁ4'%pDATATBPALDATAԂT%DATAԂD DATATԂ|.DATAT*T%DATAԃT,EDATAԃ'DATATԃDATAT.DATAԄTt*DATAԄEDATATԄ<'DATAT3DATAԅTDATAԅ'DATATԅl!DATATDATAԆT, HDATAԆ\DATATԆ'DATATDATAԇT$DATAԇlDATATԇDATATDATAԈTD1DATAԈ1DATATԈDATATD)PANODATAԉT(DATAԉ6DATATԉT4DATATDATAԊTDATAԊ<1DATATԊDATAT(DATAԋT44DATAԋDATATԋDATAT KDATAԌT jDATAԌDATATԌDATATL!DATAԍT$DATAԍ$PDATATԍ<DATATl,DATAԎT%DATAԎ16GDATATԎt3DATATDATAԏT*DATAԏlCDATATԏ6FREEDATAT DATAԐTLDATAԐ*DATATԐ&DATAT<`DATAԑT(DATAԑ6DATATԑ<%DATAT4 DATAԒT*DATAԒDZDATATԒ6DATAT,. DATAԓT*DATAԓ.DATATԓ4.DATAT.DATAԔT4lDATAԔD,DATATԔ*DATAT.DATAԕTL.FREEDATAԕ.DATATԕ5DATAT\,DATAԖT*6GDATAԖ .DATATԖd.DATAT.DATAԗTXqDATAԗDCd2tDATATԗDATAT/DATAԘT<DATAԘl*DDATATԘ5P2tDATAT$+DATAԙT|+DATAԙ+DATATԙ, DATATt9DATAԚT9DATAԚD9DATATԚ DATAT"DATAԛTLDATAԛADATATԛ CDATATT"DATAԜTDATAԜ4DATATԜL DATAT"DATAԝT0DATAԝ4$DATATԝDATAT*DATAԞT DATAԞTDATATԞ,DATATDATAԟT$ DATAԟl HDATATԟ DATAT$ 1DATAԠT #DATAԠ DATATԠ DATATD DATAԡT DATAԡ #DATATԡ DATATL  DATAԢT|  DATAԢ DATATԢ DATAT< DATAԣT DATAԣ  DATATԣDATAT4DATAԤTtDATAԤ*?DATATԤtDATATDDATAԥTDATAԥDATATԥ CDATATT%DATAԦTDATAԦDATATԦ$DATATTDATAԧT DATAԧDATATԧDATATDDATAԨT7DATAԨsDATATԨDATATT DATAԩTDATAԩ!DATATԩ<DATATDATAԪTDATAԪ%DATATԪDDATATDATAԫTDATAԫDATATԫ<)DATATDATAԬT)DATAԬ4DATATԬ|DATATDATAԭTDATAԭ4"6GDATATԭDATATDATAԮTDATAԮ4DATATԮtlDATAT ,DATAԯTd,DATAԯDATATԯ0qDATAT$ pDATA԰Tl$DATA԰cDATAT԰L%DATAT&DATAԱT$DATAԱ<$DATATԱ$DATATDATAԲTDATAԲLDATATԲDATAT/DATAԳT,DATAԳ\DATATԳDATAT%DATAԴT< $DATAԴ DATATԴ DATAT DATAԵTD!DATAԵt!"DATATԵ!DATAT!,DATAԶTL"pDATAԶ"!DATATԶ"DATAT#)DATAԷTt#9(HDATAԷ#&DATATԷ,$"DATAT|$(DATAԸT$%=qDATAԸ$%18oDATATԸ%3DATAT%3DATAԹTD&DATAԹt&HDATATԹ&#DATAT '+DATAԺTd'*DATAԺ'-DATATԺ(*DATATl(-DATAԻT(*DATAԻ)DATATԻL)&DATAT) @DATAԼT)DATAԼ*DATATԼD*7DATAT*;DATAԽT +5@DATAԽl+DATATԽ+DATAT+3DATAԾT,,DATAԾ\,*@DATATԾ,2DATAT-*DATAԿTl-DATAԿ- DATATԿ- KeyDATAT .DATATT.DATA.DATAT.$DATAT/sDATAT\/DATA /DATA T /DATAT   0DATA  T L0FREEDATA à 0DATAàTà 0$DATATààà$1DATAààTà\1DATAàĠà1DATAĠTĠà1*DATATĠĠĠ$2'DATAĠĠTĠt2*DATAĠŠĠ2RiCDATAŠTŠĠ2 DATATŠŠŠ43 DATAŠŠTŠl3DATAŠƠŠ3DATAƠTƠŠ3DATATƠƠƠ44FDATAƠƠTƠd4.DATAƠǠƠ4$DATAǠTǠƠ4DATATǠǠǠ<5DATAǠǠTǠ|5DATAǠȠǠ5@DATAȠTȠǠ5DATATȠȠȠ,6DATAȠȠTȠl6#DATAȠɠȠ6DATAɠTɠȠ6xDATATɠɠɠ,7DATAɠɠTɠl7DATAɠʠɠ7!DATAʠTʠɠ7 DATATʠʠʠ<8!DATAʠʠTʠ8DATAʠˠʠ8DATAˠTˠʠ 9DATATˠˠˠL9DATAˠˠTˠ9DATAˠ̠ˠ9DATA̠T̠ˠ :DATAT̠̠̠<:DATA̠̠T̠|: DATA̠̠͠:DATA͠T̠͠:pDATAT͠͠͠<;UDATA͠͠T͠;DATA͠Π͠; DATAΠTΠ͠<<DATATΠΠΠ|<.DATAΠΠTΠ<DATAΠϠΠ=DATAϠTϠΠD=DATATϠϠϠ=DATAϠϠTϠ=.DATAϠРϠ$>6DATAРTРϠ>DATATРРР> TqDATAРРTР?2FREEDATAРѠРd?DATAѠTѠР?%DATATѠѠѠ?DATAѠѠTѠ,@1bqDATAѠҠѠ@\sDATAҠTҠѠ@DATATҠҠҠA"DATAҠҠTҠTADATAҠӠҠA(DATAӠTӠҠA`DATATӠӠӠ$BHDATAӠӠTӠB2DATAӠԠӠBDATAԠTԠӠ,C96GDATATԠԠԠCADATAԠԠTԠDGDATAԠՠԠtDDATAՠTՠԠDDATATՠՠՠDDATATdY>DATATY>DATA4Z-DATATZDATATZDATATZ'pDATA,[DATATl[DATAT[DATAT[<DATAD\8FREEDATAT\=DATAT]DATAT\]DATA]DATAT] DATAT ^DATATL^DATA^DATAT^*XBDATAT_*xDATATl_DATA_DATAT_DATAT$`CDATATl`+DATA`DATAT aDATATDa0DATATaDATAaxDATATbnDATAT\bDATATbDATAbCDATAT,cDATATlc#EdgeDATATc&DATA d/DATATdd)DATATd@SDATAT,e.DATAeDATATe DATATf$'pDATATdf DATAf"DATATg+DATAT\gDATATg0DATAhDATATLhDATAT|h$DATAThDATAi&DATAT\iDATATiDATATi-DATA4jDATATdjDATATjDATATj1DATATkDATATk DATATk`sDATATkDATATtlDATATlDATATlDATADmIDATATmDATATmDATAT4n*DATAn2DATATn!DATATDATATD>&DATA>'DATA,>!DATA,l4?-DATAl,?DATAl?4DATA,4@)DATA,l@DATAl,@DATAl@)DATA,TA/DATA,lADATAl,A*DATAlLB2DATA,BDATA,lB&DATAl,,C*DATAlC5DATA,CDATA,lDDATAl,\DDATAlD DATA,D0DATA,lTE*DATAl,E)DATAlFDATA,LFKDATA,lFDATAl, G@DATAl|G DATA,GDATA,lGDATAl,DHDATAltHDATA,HMDATA,l4IDATAl,dIIDATAlIDATA, J)DATA,ldJ$DATAl,J)DATAl K DATA,DK DATA,l|K DATAl,K DATAlKDATA,,LDATA,l\LDATAl,LDATAlLDATA,MDATA,l\MDATAl,MDATAlMDATA,NDATA,l\NDATAl,NDATAlNDATA, ODATA,lLODATAl,ODATAlODATA, PDATA,lLPDATAl,PDATAlPDATA,PDATA,l 0:zDDATAϡ gAlert = 3DATA ,С else:DATAdС gAlert = 4DATAС FILE.flush()DATAС FILE.close()DATA$ѡDATATѡ#=========================DATA(ѡdef ObjImport(file, Name, filename):DATA ѡ#========================= DATA4ҡ vcount = 0CDATAtҡ vncount = 0DATAҡ vtcount = 0DATAҡ fcount = 0DATA4ӡ gcount = 0DATAtӡ setcount = 0DATAӡ groupflag = 0DATAӡ objectflag = 0DATA4ԡ mtlflag = 0DATAtԡ baseindex = 0DATAԡ basevtcount = 0DATAԡ basevncount = 0DATA4ա matindex = 0DATAtաDATAա pointList = []DATAա uvList = []DATA$֡ normalList = []@DATAd֡ faceList = []EEDATA֡ materialList = []1DATA֡ uv = [] DATA ס lines = file.readlines()DATAdס linenumber = 1DATAסDATAס for line in lines:DATA ء words = line.split()DATA(\ء if words and words[0] == "#":DATA$ء pass # ignore commentsDATA(ء elif words and words[0] == "v":DATA L١ vcount = vcount + 1DATA ١ x = float(words[1])DATA ١ y = float(words[2])DATA $ڡ z = float(words[3])DATA(lڡ pointList.append([x, y, z])DATAڡDATA,ڡ elif words and words[0] == "vt":DATA$Dۡ vtcount = vtcount + 1DATA ۡ u = float(words[1])DATA ۡ v = float(words[2])DATA$$ܡ uvList.append([u, v])DATAtܡDATA,ܡ elif words and words[0] == "vn":DATA$ܡ vncount = vncount + 1BDATA Lݡ i = float(words[1])DATA ݡ j = float(words[2])DATA ݡ k = float(words[3])DATA,$ޡ normalList.append([i, j, k])DATA|ޡBDATA(ޡ elif words and words[0] == "f":DATA ޡ fcount = fcount + 1DATA(Dߡ vi = [] # vertex indicesDATA(ߡ ti = [] # texture indicesDATA(ߡ ni = [] # normal indicesDATA 4 words = words[1:]pDATA | lcount = len(words)DATA, for index in (xrange(lcount)):DATA4 if words[index].find( "/") == -1:DATA0| vindex = int(words[index])DATAH if vindex < 0: vindex = baseindex + vindex + 1 DATA(D vi.append(vindex)DATA else:DATA4 vtn = words[index].split( "/")DATA(4 vindex = int(vtn[0])DATAD if vindex < 0: vindex = baseindex + vindex + 1 DATA( vi.append(vindex) DATAD DATA0| if len(vtn) > 1 and vtn[1]:DATA, tindex = int(vtn[1])DATAH, if tindex < 0: tindex = basevtcount +tindex + 1DATA( ti.append(tindex)DATADATA0 if len(vtn) > 2 and vtn[2]:DATA,t nindex = int(vtn[2])DATAH if nindex < 0: nindex = basevncount +nindex + 1DATA(< ni.append(nindex)DATA4 faceList.append([vi, ti, ni, matindex])DATADATA( elif words and words[0] == "o":DATA$l ObjectName = words[1]DATA objectflag = 1DATA0 #print "Name is %s" % ObjectNameREEDATA\DATA( elif words and words[0] == "g":DATA groupflag = 1DATA $ index = len(words)DATA l if objectflag == 0:DATA  objectflag = 1DATA  if index > 1:DATA4D ObjectName = words[1].join("_")DATA4 GroupName = words[1].join("_") HDATA else:DATA,D ObjectName = "Default" DATA, GroupName = "Default" DATA8 #print "Object name is %s" % ObjectNameBDATA8T #print "Group name is %s" % GroupName8GDATA else:DATA  if index > 1:DATA4< GroupName = join(words[1],"_") DATA else:DATA, GroupName = "Default" ODATA84 #print "Group name is %s" % GroupNameDATA DATA  if mtlflag == 0:DATAL  matindex = AddMeshMaterial(GroupName,materialList, matindex)DATA$ gcount = gcount + 1 DATADATA if fcount > 0: DATA$L baseindex = vcountDATA( basevncount = vncountDATA( basevtcount = vtcountDATA<DATA0l elif words and words[0] == "mtllib":DATA( # try to export materialsDATA4 directory, dummy = os.split(filename)tDATA4t filename = os.join(directory, words[1])DATA try:DATA, file = open(filename, "r")DATAl except:DATA8 print "no material file %s" % filenameDATA  else:DATAL mtlflag = 1DATA, file = open(filename, "r")DATA( line = file.readline()DATA< while line:DATA, words = line.split()DATA8 if words and words[0] == "newmtl":DATA(< name = words[1]DATA8 line = file.readline() # Ns ?tDATA, words = line.split()DATA\D while (words[0] != "Ka" and words[0] != "Kd" and words[0] != "Ks"): DATA8 line = file.readline() # KaDATA0, words = line.split()DATA, if words[0] == "Ka":DATA0 Ka = [float(words[1]),DATA04 float(words[2]),DATA0 float(words[3])]DATA8 line = file.readline() # KdDATA0D words = line.split()DATA, if words[0] == "Kd":DATA0 Kd = [float(words[1]),DATA0L float(words[2]),DATA0 float(words[3])]DATA8 line = file.readline() # Ks DATA0\ words = line.split()DATA, if words[0] == "Ks":DATA0  Ks = [float(words[1]),DATA0d float(words[2]),DATA0 float(words[3])]DATADATADD matindex = AddGlobalMaterial(name, matindex) DATADATA0 matlist = Material.Get() DATA<DATA,l if len(matlist) > 0:DATA8 material = matlist[matindex]DATA,$ material.R = Kd[0]DATA,| material.G = Kd[1]DATA, material.B = Kd[2]DATA , try:DATA<t material.specCol[0] = Ks[0]DATA< material.specCol[1] = Ks[1]DATA<D material.specCol[2] = Ks[2]CDATA$ except:DATA$ passDATA L try:DATAD alpha = 1 - ((Ka[0]+Ka[1]+Ka[2])/3)DATA$ except:6GDATA$T passDATA  try:DATA8 material.alpha = alphaDATA$L except:DATA$ passEDATA else:DATA(4 mtlflag = 0DATADATA, line = file.readline()DDATA  file.close()REEDATATDATA0 elif words and words[0] == "usemtl":DATA  #if mtlflag == 1:DATA $  name = words[1]ADATALl  matindex = AddMeshMaterial(name, materialList, matindex) DATA  # elif words: DATA4$  # print "%s: %s" % (linenumber, words)DATA$  linenumber = linenumber + 1DATA  file.close()!GDATA DATAD  # import in BlenderDATA  DATA$  print "import into Blender ..."DATA   mesh = NMesh.GetRaw ()DATAL DATA |  i = 0DATA  while i < vcount:DATA  x, y, z = pointList[i] DATA <  vert=NMesh.Vert(x, y, z)DATA  mesh.verts.append(vert)DATA  i=i+1DATADATA4 if vtcount > 0:DATA t #mesh.hasFaceUV() = 1DATA, print ("Object has uv coordinates")DATA DATA D if len(materialList) > 0:DATA  for m in materialList:DATA try:DATA  M=Material.Get(m)DATA(T mesh.materials.append(M) DATA except:DATA passDATA$DATAT total = len(faceList)DATA  i = 0DATADATA for f in faceList:DATAD if i%1000 == 0:DATA8 print ("Progress = "+ str(i)+"/"+ str(total))DATArDATA i = i + 1DATA$T vi, ti, ni, matindex = fDATA face=NMesh.Face()DATA$ if len(materialList) > 0:DATA < face.mat = matindexDATADATA limit = len(vi)DATA( setcount = setcount + len(vi)DATAD c = 0 DATA REEDATA while c < limit:DATA m = vi[c]-1DATA,< if vtcount > 0 and len(ti) > c:DATA n = ti[c]-1DATA, if vncount > 0 and len(ni) > c:rDATA4 p = ni[c]-1DATA|DATA if vtcount > 0:DATA try:qDATA$4 u, v = uvList[n]DATA except:DATA pass DATADATA4 """ DATApt # multiply uv coordinates by 2 and add 1. Apparently blender uses uv range of 1 to 3 (not 0 to 1). rDATA0  mesh.verts[m].uvco[0] = (u*2)+1DATA0d mesh.verts[m].uvco[1] = (v*2)+1DATA """DATADATA$ if vncount > 0:DATA(l if p > len(normalList):DATAd print("normal len = " +str(len(normalList))+ " vector len = " +str(len(pointList)))DATA(L print("p = " +str(p))DATA( x, y, z = normalList[p] EDATA( mesh.verts[m].no[0] = xDATA(< mesh.verts[m].no[1] = yDATA( mesh.verts[m].no[2] = zDATA c = c+1 DATA EDATAL if len(vi) < 5:DATA for index in vi:DATA0 face.v.append (mesh.verts[index-1])DATA, DATA\ if vtcount > 0: DATA  for index in ti:DATA( u, v = uvList[index-1]DATA(<  face.uv.append((u,v))DATA @DATA  if vcount>0:DATA  face.smooth=1DATAD!DATA$t! mesh.faces.append(face) DATA!DATA0! print "all other (general) polygons ..."DATAL" for f in faceList:DATA$" vi, ti, ni, matindex = f DATA" if len(vi) > 4:DATA,# # export the polygon as edgesqDATA<t# print ("Odd face, vertices = "+ str(len(vi)))@DATA(# for i in range(len(vi)-2):DATA$,$ face = NMesh.Face()DATA,|$ if len(materialList) > 0:DATA($ face.mat = matindexDATA4$% face.v.append(mesh.verts[vi[0]-1])DATA4% face.v.append(mesh.verts[vi[i+1]-1])DATA4% face.v.append(mesh.verts[vi[i+2]-1])DATAD&=qDATA t& if vtcount > 0: DATA$& if len(ti) > i+2:DATA, ' u, v = uvList[ti[0]-1]DATA,d' face.uv.append((u,v))DATA0' u, v = uvList[ti[i+1]-1]DATA,( face.uv.append((u,v))DATA0l( u, v = uvList[ti[i+2]-1]DATA,( face.uv.append((u,v))DATA)DATA(L) mesh.faces.append(face)DATA) DATA ) NMesh.PutRaw(mesh, Name,1)DATA*DATA8D* print ("Total number of vertices is "+ str(vcount))DATA<* print ("Total number of faces is "+ str(len(faceList)))DATA8 + print ("Total number of sets is "+ str(setcount))DATAl+DATA+DATA4+ print("Finished importing " +str(Name)+ ".obj")DATA,,DATA,\,#=========================================mDATA4,def AddMeshMaterial(name, materialList, matindex):DATA,-#=========================================DATAl- DATA- index = 0REEDATA- found = 0 DATA . limit = len(materialList)DATAT.DATA. while index < limit:DATA(. if materialList[index] == name:DATA/ matindex = index DATA\/ found = 1DATA/ index = limitDATA/ index = index + 1DATA0 DATAL0 if found == 0: DATA 0 materialList.append(name)DATA(0 matindex = len(materialList)-1DATA $1 DATA\1 return matindexDATA1DATA,1#=========================================DATA($2def AddGlobalMaterial (name, matindex):DATA,t2#=========================================DATA2 DATA2 index = 0DATA43 found = 0DATAl3 matindex = 0DATA3 MatList = Material.Get()DATA3 limit = len(MatList)DATA44RqDATAd4 while index < limit:DATA(4 if MatList[index].name == name:DATA4 matindex = index DATA<5 found = 1DATA|5 index = limitDATA5 index = index + 1DATA5DATA,6 if found == 0:DATA$l6 material = Material.New(name)DATA6 matindex = indexDATA6 sDATA,7 return matindexDATAl7DATA$7#================================DATA$7def ObjExport(FILE, Name, type):JDATA$<8#================================DATA8 global returncodeDATA8 global vertexcountDATA 9 global uvcountDATAL9 global TransformDATA9 global multiflagDATA9 global exporttypeDATA :DATA<: vertexcount = 0DATA|: uvcount = 0DATA: returncode = 0DATA : print("Writing %s..." % Name)DATAX<; FILE.write("# Wavefront OBJ (1.0) exported by lynx's OBJ import/export script\n\n")DATA;DATA$; Objects = Object.GetSelected()pADATA<< if Objects == []:DATA0|< print("You have not selected an object!")DATA< returncode = 4DATA= else:DATAD= for object in Objects:DATA= MtlList = []DATA0= if len(Objects) > 1 or exporttype > 1:DATA8$> Transform = CreateMatrix(object, Transform)DATA> multiflag = 1DATA > DATA4? mesh = NMesh.GetRawFromObject(object.name)DATAd? ObjName = mesh.nameDATA(? has_uvco = mesh.hasVertexUV()DATA?DATA4,@ FILE.write("# Meshname:\t%s\n" % ObjName)DATA@DATA@ faces = mesh.facesDATA$A materials = mesh.materialsDATA TA Vertices = mesh.vertsDATA,A GlobalMaterials = Material.Get()DATAADATAL$B if len(materials) > 1 and len(GlobalMaterials) > 0 and type < 4:DATA4B CreateMtlFile(Name, materials, MtlList)DATABqDATA<,C # Total Vertices and faces; comment if not useful`DATADC FILE.write("# Total number of Faces:\t%s\n" % len(faces))DATAHD FILE.write("# Total number of Vertices:\t%s\n" % len(Vertices))DATAtDDATAD FILE.write("\n")DATADDATA4E # print first image map for uvcoords to useDATA@|E # to be updated when we get access to other texturesDATATE if mesh.hasFaceUV(): FILE.write("# UV Texture:\t%s\n\n" % mesh.hasFaceUV())DATAdF`DATALF if len(materials) > 1 and len(GlobalMaterials) > 0 and type < 3:DATAP G UseLayers(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATALG elif len(materials) > 1 and len(GlobalMaterials) > 0 and type == 3:DATALG UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATAtH else:DATA@H Standard(faces, Vertices, has_uvco, FILE, ObjName)DATAI DATA4DI#================================================EEDATA4Idef CreateMtlFile (name, MeshMaterials, MtlList):DATA4J#================================================DATAdJ global gFilename DATAJDATA J # try to export materialsGDATA4K directory, mtlname = os.split(gFilename.val)DATA |K mtlname = name + ".mtl"DATA0K filename = os.join(directory, mtlname)DATA$L file = open(filename, "w")6GDATAlLDATA<L file.write("# Materials for %s.\n" % (name + ".obj"))DATA,M file.write("# Created by Blender.\n")DATAl\M file.write("# These files must be in the same directory for the materials to be read correctly.\n\n")DATAMDATA $N MatList = Material.Get()DATA lN print str(MeshMaterials)DATANDATAN MtlNList=[]CDATA$O for m in MatList:DATA$lO MtlNList.append(m.name)DATAODATAO counter = 1DATA,P found = 0 DATAlPDATA(P for material in MeshMaterials:DATA P for mtl in MtlList:DATA 4Q if material == mtl:DATA|Q found = 1DATAQDATA$Q MtlList.append(material) DATADRDATAtR if found == 0:DATA8R file.write("newmtl %s \n" % material.name)DATAS index = 0WDATA$TS print material, MatListDATA(S while index < len(MatList):DATA8S if material.name == MatList[index].name:DATA(TT mtl = MatList[index]ADATA(T index = len(MatList)DATAT found = 1DATA$ 0:DATA(c limit = len(uvList)-200DATA0 d while index > limit and found == 0:DATA,dd uv_value = uvList[index-1]pDATADd if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA0,e uvPtrs.append(index+uvcount)DATAe found = 1DATA$e index = index - 1DATAf if found == 0:DATA$df uvList.append(uv)DATA$f index = len(uvList)DATA,g uvPtrs.append(index+uvcount)DATA\g u, v = uvDATA4g FILE.write("vt %s %s\n" % (u, v))DATAh uv_flag = 1DATALhDATA(|h if has_uvco and uv_flag == 0:DATAh for v in Vertices:DATA i u, v, z = v.uvco DATA\i u = (u-1)/2DATAi v = (v-1)/2DATA0i FILE.write("vt %s %s\n" % (u, v))DATA4jDATAdj for v in Vertices: DATAj x, y, z = v.noDATA4j FILE.write("vn %s %s %s\n" % (x, y, z))DATATkDATAk p = 0DATAk uvindex = 0@DATAk total = len(faces)ADATADlREEDATAtl for face in faces:]DATAl p = p+1DATAl if (p%1000) == 0:DATALDm print ("Progress = "+ str(p)+ " of "+ str(total) +" faces")DATAmDATAm FILE.write("f ")DATA,4n for index in range(len(face.v)):DATA4n v = face.v[index].index + vertexcountDATA$n if len(face.uv) > 0:DATAH 0:DATA0! limit = len(uvList)-200DATA8" while index > limit and found == 0:DATA4t" uv_value = uvList[index-1]DATAL" if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA8L# uvPtrs.append(index+uvcount)DATA$# found = 1DATA,# index = index - 1DATA$T$ if found == 0:DATA,$ uvList.append(uv)DATA,$ index = len(uvList)DATA4T% uvPtrs.append(index+uvcount)DATA$% u, v = uvDATA<& FILE.write("vt %s %s\n" % (u, v))DATA$l& uv_flag = 1DATA&DATA(& if has_uvco and uv_flag == 0:DATA<' for v in Vertices:DATA ' u, v, z = v.uvcoDATA' u = (u-1)/2DATA ( v = (v-1)/2DATA0L( FILE.write("vt %s %s\n" % (u, v))DATA(DATA( for v in Vertices: DATA) x, y, z = v.noDATA4d) FILE.write("vn %s %s %s\n" % (x, y, z))DATA)DATA) total = len(faces)DATA<* p = 0DATAt* uvindex = 0DATA0* for m in range(len(MtlList)): DATA< + FILE.write("usemtl %s\n" % (MtlList[m].name)) DATA t+ for face in faces:DATA + if face.mat == m:DATA, p = p+1DATA$D, if (p%1000) == 0:DATAP, print ("Progress = "+ str(p)+ " of "+ str(total) +" faces")DATA -DATA$<- FILE.write("f ")DATA4- for index in range(len(face.v)):DATA<- v = face.v[index].index + vertexcount DATA(T. if len(face.uv) > 0:DATAL. FILE.write("%s/%s/%s " % (v+1, uvPtrs[uvindex], v+1))DATA,/ uvindex = uvindex+1DATA$t/ elif has_uvco:DATA@/ FILE.write("%s/%s/%s " % (v+1, v+1, v+1))DATA,0 else:DATA<t0 FILE.write("%s//%s " % (v+1, v+1))DATA$0 FILE.write("\n")DATA,1DATA4\1 vertexcount = vertexcount + len(Vertices) DATAT1 print("Export of " +str(ObjName)+ ".obj using material layers finished.\n")DATA<2DATADl2#==================================================================DATAH2def UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name): DATADL3#==================================================================DATA3 global vertexcountDATA4 global multiflagDATAD4DATA8t4 FILE.write("mtllib %s\n\n" % (Name + ".mtl")) DATA,4 FILE.write("o %s\n\n" % (ObjName))DATA,5 DATA\5 index = 0DATA5 VertexList = []DATA 5 for vertex in Vertices:DATA $6 VertexList.append(-1)DATAl6 index = index + 1DATA@6 print("number of vertices is " +str(len(VertexList)))DATA7DATAL7 Totalindex = 0DATA7 ix = 0DATA7 NewVertexList = []DATA 8 NewVertexCo = []DATA(L8 for m in range(len(MtlList)):DATA48 # Group name is the name of the mesh DATA8 if MtlList[m]:DATADD9 FILE.write("g %s\n" % (MtlList[m].name+str(m+1))) DATA9 else:DATA89 FILE.write("g %s\n" % ("Null"+str(m+1)))DATA$T: FILE.write("s off\n\n") DATA : DATA<: FILE.write("usemtl %s\n\n" % (MtlList[m].name)) DATAD; DATA t; for face in faces:DATA ; if face.mat == m:DATA(< for vertex in face.v:DATA(T< v = vertex.index DATA,< if VertexList[v] < 0:DATA4< VertexList[v] = TotalindexDATA0\= NewVertexList.append(v)DATA4= Totalindex = Totalindex + 1DATA> DATA(D> for v_old in NewVertexList:DATA(> vert = Vertices[v_old].coDATA$> if multiflag == 1:DATA04? vert = Alter(vert, Transform)DATA ? x, y, z = vertDATA8? FILE.write("v %s %s %s\n" % (x, y, z))DATA,4@ NewVertexCo.append([x,y,z])DATA@DATA@ if has_uvco:DATA,@ for v_old in NewVertexList:DATA0TA u, v, z = Vertices[v_old].uvcoDATA A u = (u-1)/2DATA,A v = (v-1)/2 DATA4LB FILE.write("vt %s %s\n" % (u, v))DATABDATA(B for v_old in NewVertexList:DATA,,C x, y, z = Vertices[v_old].noDATA8C FILE.write("vn %s %s %s\n" % (x, y, z))DATAC DATA D for face in faces:DATA \D if face.mat == m:DATA$D FILE.write("f ")DATA4D for index in range(len(face.v)):DATA,TE v = face.v[index].indexDATA,E v_new = VertexList[v] DATA F if has_uvco:DATALLF FILE.write("%s/%s/%s " % (v_new+1, v_new+1, v_new+1))DATAF else:DATAD G FILE.write("%s//%s " % (v_new+1, v_new+1))DATA$|G FILE.write("\n")DATAGDATAG FILE.write("\n")DATADHDATA tH NewVertexList = []DATAPH print("Group " +str(m+1)+ " of " +str(len(MtlList))+ " finished.")DATA4I DATALdI print("Export of " +str(ObjName)+ ".obj using groups finished.\n")DATAIDATA, J#========================================DATA(dJdef CreateMatrix(object, Transform):DATA,J#========================================DATA K Mx = []DATA DK My = []DATA |K Mz = []DATA K T1 = []DATAK Transform = []DATA,LDATA\L angle = object.RotXDATAL Mx.append([1, 0, 0])DATAL y = math.cos(angle)DATAM z = -math.sin(angle)DATA\M Mx.append([0, y, z])DATAM y = math.sin(angle)DATAM z = math.cos(angle)DATAN Mx.append([0, y, z])DATA\NDATAN angle = object.RotYDATAN x = math.cos(angle)DATA O z = math.sin(angle)DATALO My.append([x, 0, z])DATAO My.append([0, 1, 0])DATAO x = -math.sin(angle)DATA P z = math.cos(angle)DATALP My.append([x, 0, z])DATAPDATAP angle = object.RotZDATAP x = math.cos(angle)DATA ?!@A5 " BCDEFGHI(J#$K%L%MNOPQRSTUVWX!YZ[\&]^_`'a(bcdefghijklmnopqrstu) vwxyz {|}~ *klm+*,'a##DENOt(52q(#)+,--jklmnDE&(J.(/Ojklm   ]^+ + &(/uJ01!Y2223 !"#$%&'()*+,2-./43 0 1(/23i4h56785 9:;<=>?@A6B:C>A777DAEFGHIJKLMN6O5P8&3 Q 1'R'S(9TU/2 VW4h5iX3YZ[\GH27]^_`abcde0f:::6O5Pghijklm  n&; opqrst<#3 u 1(U/2 v w x=y>z?{@|A}<~WB ki4h53\CD>DE?D\=D@klmAF EF6(UGGG BhH'I'U ''(9T3JK L  u  1 /24h53J     q  IMHHN7j     (&JO PPP&!"'aQ # $%&'()*+,-.R / 01u2S345TUQ6R789:;<=>?@ABCDEFGH5@IJKLMNOPQRSTUVWXYZ[\]^_` abcdefghijklmnopqrstuvwxyz{|}~UtuV'NV# PWX O UTkSJY #(bbc@Z+[[\'YZFg][[[\^[[\_[[\u]  ()`[[\] tua [[\]ub[[\cd e [[\]  f[[\]#ubcg [[\]h[[\ 5i [[\ju5kQ[[\      !"#$%&'()*+,-.l/l0123456789:;<m=m>?@u%A  BnCDEFGHIJKLMNOPQRStuoTLMUVWXYZ[\]^_`abcdefgtppp nhoiojokolomonooopoqorosotouqqvBr#wxyz{|}~ qs   Vtttt uuuttQvvvuv\\\ttttsh   w Rx%LxxxNy yy2xz  vwz {}~  {&{{{ 2yx(V$Kz{{{ | }   ~ 2*     Z  '!"#$% 2&%'()* +,-./0123('456 A789 :  ;<= > ? @Atu /BCDEFG HI JKu L  M NOtP'QRS;TUVtu W'!XYZ [\V;]u W^_`ab'! Jc defg\hi j|klmjno b'!<p qrV' H'! st45uvwx  tyz'!{%L|0}~  tyzW N'RtuS [; '!X | !Y! (o5[[\]|jbcu98 ''(4h5'! W  EEEE  4h    4h \K (  \J [[\]J\uLLL( (;\b'\'\h'\'\'{Jc'''tu   \(JcdENDB