BLENDER_v233REND 1@SRdqTqSRscreenqDqq qD qqDATA qW q, qRenderRender@>DATA qW q qAnimRender>DATA qWr qFormatRender>DATArWv qLink and MaterialsEditing>DATAvW̌yrMeshEditing@>DATǍyWDx~vPreviewLamp>DATADx~Wy~̌yLampLamp@>DATAy~WtDx~Shadow and SpotLamp>DATAtWijy~Texture and InputLamp>DATAijW$,xtMap ToLamp>tDATA$,xW\ijPreviewWorld>DATA\W$,xWorldWorld@>DATAWl\YafRayRender@> qDATAlWDYafRay GIRender@> qDATADWԋxlMesh ToolsEditing>DATAԋxWlsDMesh Tools 1Editing>DATAlsW\dzԋxAnim settingsObject>DATA\dzWd~lsDrawObject@>DATAd~W#p\dzConstraintsObject>DATA#pWT$pd~EffectsObjectd~DATAT$pW#pPreviewMaterial>DATAW;T$pMaterialMaterial@>DATA;WTvCameraEditing@>DATATvW;ShadersMaterial>DATAW*xTvMirror TranspMaterial>TvDATA*xWTextureMaterial>DATAlqFds333?D qDdCI-DIeCC(BDC??>o?---  T Ls]~~DATAhLsLlK^ 333?Tqr @DATA lK^M<qLs333?TqDATA<qA|qlK^333?Tq??ND?4.> >?D$?N%% ??% 4.+?̺o>x>o!)s>o???ND?4.> >??g@Mz B?=C>4.>o7o7 DATA|qF]<q333?TqDdCD1MCC(BDC??DATAT]H|q333?TqyBgOpen Text File/share/download/obj_io_modif228.py !DATA|qXqTqqqqq==o?+E++E ,6Ndq5??p5?5?A+?5?5?53?5?>5?PZD Y*D?SBSBC??ec;C 95UD".& DDɸ;ɸ;$r/0QLL:.;zz@kN{`@%Y`@q;KB瀄C؂ir^5?>5??p5?5?A+?zZ?b-@Mz B?=Cda>z> DATAqFq333?qDdCD1MCC(BDC??SRdqTqSRscreen.001\qq\q#q#q7q}GCHB? AMz B?=CXXDATA(qX(q#q\qqqqdDATA(qX.q(qq\qqqg=Ρ>o?qqd)q,qDATA)qG*q333?zCAzCA A@FB= A DATA*qI,q)q333?AA Y YCA A@CC #<@|+q,,qDATA,|+qf+qOBCqDATA,+qf,,q|+qME|A$GqDATA,,,qf+qOB`AAqDATA,qA*q333????55@??A0??5>5?g=Ρ>o$[;??cYAYJ@5>5??cYAMz B? #<C55@DATA.qX7q(qqqqqg=S=o?w}w}5d/qL5qDATA/qG|0q333?zCAzCA A@FB= A DATA|0qF|1q/q333?DdCJRCۖzDGhICC(BDC??DATA|1qE2q|0q333?zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATA2qJl3q|1q333??DATAl3qIL5q2q333?AA>l>lBA A@CC #<@D4q4qDATA,D4qf4qOBq= @CqDATA,4qf4qD4qME|A$GqDATA,4qf4qOBp=AAqDATAL5qAl3q333????55@??A0??5>5?g=S=o$s>?cYA~2bA5>5??cYAMz B?=C55@DATA7qX.q\q\qqqg=+=o?w}w}dt8q:qDATAt8qE9q333?zC̽̌?zC@@@ #< #<`jFzD OBzC̽̌?DATA9qF:qt8q333?DdC@CdDGhICC(BDC??DATA:qA9q333????55@??A0??5>5?g=+=o$gV>?cYAL³90A5>5??cYAMz B?=C55@SC@:MA4xdd??< =fff?=fff?Z@@?????o://backbuf//ftypeDDATAt@q9< 4GwDATA<9~_t@q /qDATA~_9\x< 2:xDATA\x9~_*MzDATA9|y\x{rDATA|y94q#jDATA4q9tny|ydtDATAtny9y4qND}DATAy9ytny "|DATAy9@qy $yDATA@q9y AqDATA(4x8,xd'=A@OBAq6MzOBCamera KqX@L@R%@???ѵ?`<@?]?`Ƽ:\ }?Z?:>V>X@L@R%@?????-o> Jt?P*?/>?XV 3^'?B>r3DٶC?DOBd??)d??>)d?????OBMz6tAqOBCamera.001 4y: A*DHA???I?G;'I???5?5?G;?5?>5?: A*DHA??????3 j3?XI331?>g8n6D?Dd?? #=?>=?@???OBt6MzOBCube.001{l @l@_@?QE?QE?QE???QE?QE?QE?l @l@_@??????@j?j?-7#&#&?Ej?#&?"&j?qDLD?Dd?? #=?>=?@???OB6rtOBCube.002\3y?$_@?QE?QE?QE???QE?QE?QE??$_@??????pj?|j?a7{&|&?j?i&?i&j? D> D?Dd?? #=?>=?@???OBr6qOBCube.003܋yid_@?QE?QE?QE???QE?QE?QE?id_@??????j?j?k&&?j?&?&\j?^sDĩD?Dd?? #=?>=?@???OBq6GwrOBLamp.001 ̱/AzA?5B???X>13(@??ݿ?v?Pd[Nſhf?ۦ>>=>ğo>~>aĘeCC?Dd?? #=?>=?@???OBGw6yqOBLamp.002 )xq2B???X>{\̝@??D>3 1o?>>hf?` H?q2B????? 1>9E- G ]F> >O>ql>p1DDʼC?Dd?? #=?>=?@???OBy6D}GwOBMeshy|y"= <?????%%???%%i!3?%i!3"= <??????5?5??ZD DYD?Dd?? #=?>=?@???DATA|yOBD}6|yOBCubeԲ^>h#@_@?QE?QE?QE???QE?QE?QE?^>h#@_@??????j?Fj?y7]&]&?j?&?&1j?cDč`D?Dd?? #=?>=?@???OB|6:xD}OBPlanebF^<0?0?0???0?0?0?bF^<?????N?N?N3[[?N?[?[N?.DPļDE?Dd?? #=?>=?@???OB:x6|OBLamp y0ߧAG7?/B???X>:1???եc>? ڗ(J>hf?d?ν?0ߧAG7?/B?????>Rw7@>c>7>C>cò#mÉ;D?Dd?? #=?>=?@???ME{+\3yMECube.0015$),<????DATA4$/)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@DDSDATAp,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "ME\3y+܋y{MECube.002Fqoo),<????DATA4o/)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@DDSDATApo,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "ME܋y+|x\3yMECube.003s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>=EE)6>ZF=EpOF=kHF>=E$!ߴTw M!ߴD,!ߴTwY1>)߳N <|BN -7N N ?uԡ>t<>AwY|3>A{<ޙ?>tN;۾@>Q>ά2ST;۾=Q>άά*>MQ>2Sά<>:>Q>2S2S>>^V?YY>^V?Y\"ݾ^V?\\"ݾ>^V?\Y|<??/^bu3?р^<?р^??/^<z%@H7t>Nd @DZZԾd @DZZ5;pU>f@ǵ9J>I<;pUf@ǵǵ>In>(pUf@9Jǵ>In>pU>f@9J9J>IDATApE},, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "MEy+$GqMEhomeyLy0f,"?Ve?3?c?DATALy_DATAL0/?I??Z???ZZ??II???Z?I???Z?~q?ZZ?~q?*?&si?>&s&?~q>II?~q*?Ij?>IIIj?~q>IIj?~q*?Ij?*?II?YT?ZZ?YT?YT*?s&&?YT>s&i?~q>I?YT>II?YT*?III?~q*?II0?0Z0?Z?0?ZZ?0?Z??0??0?0P\<$?iٗ&sPeD?iisKeD?&isK\<$?&&sP>\<$&&:P>eD&i:K?eDii:K?\<$iٗ&:\<$P:&ieDP:iieDK:iٗ&\<$K:&&?k>Ps&i?k>Ks&&?2tP?Ksiٗ&?2tP?PsiiP2tP?ii:Pk>iٗ&:Kk>&&:K2tP?&i:2tP?P>:iٗ&k>P>:&&k>K?:&i2tP?K?:iiP>2tP??&isP>k>?&&sK?k>?iٗ&sK?2tP??iis?Y58Nsiٗ&?Y589\j1?QJ9\Qb?(N9\Z?I0!9\s&i?I0!Ns&&?k>K?s&i?k>P>s&&?2tP?P>siٗ&?2tP?K?siiE>Y58?&isE>I0!?&&srH?I0!?iٗ&srH?(N?ZrH?QJ?~QrH?Y58?1ξjPk>?iٗ&sP2tP??iisK2tP??&isKk>?&&sPeDii:P\<$iٗ&:K\<$&&:KeD&i:P>k>&&:P>2tP?&i:K?2tP?ii:K?k>iٗ&:eDP>:iٗ&\<$P>:&&\<$K?:&ieDK?:iik>P:&i2tP?P:ii2tP?K:iٗ&k>K:&&P\<$h?IIPeDh?IKeDh?IIK\<$h?IIIP>\<$hIIP>eDhIK?eDhK?\<$hIh\<$PIheDPheDKIh\<$KIIh?k>PIIh?k>KIIIh?2tP?KIIh?2tP?PIP2tP?hPk>hIKk>hIIK2tP?hIh2tP?P>Ihk>P>IIhk>K?Ih2tP?K?P>2tP?h?IIP>k>h?IIIK?k>h?IIK?2tP?h?Ih?Y58N@Hh?Y589\Ih?QJ9\ \h?(N9\Zh?I0!9\IIh?I0!NIIIh?k>K?IIh?k>P>IIIh?2tP?P>IIh?2tP?K?IE>Y58h?@HME>I0!h?IIIrH?I0!h?IIrH?(Nh?ZrH?QJh?XrH?Y58h?IPk>h?IIP2tP?h?IK2tP?h?IIKk>h?IIIPeDhP\<$hIK\<$hIIKeDhIP>k>hIIP>2tP?hIK?2tP?hK?k>hIheDP>Ih\<$P>IIh\<$K?IheDK?hk>PIh2tP?Ph2tP?KIhk>KII)?)??ҟ)??1u?)???/E`?)??)?-Ea)?1!)?E(P?#=ʮz?P?#=6Qz?P?#6Q#P?#ʮ#VeP?#=9QgVe@#=ޮB\#Ve@#{*\VeP?#eo0ůVe?P?#=_ÞVe?P?#ř&Ve?@#$ZTVe?@#=gFVe 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?oB&&m?h7"Zm?o>B&g†?ٓp>,L†?ٓp,,mm?oIImm?h7"mm?o>I2m†?ٓp>; J m†?ٓp; JI?&?k>7oj?Xs?Gn>s$ق?Xs?0/ZZ?Xs?Gns&?&?k7oҖ,i?&?k>Iɵ|i?Xs?Gn>^I}1i?Xs?0/ZZi?Xs?Gn^IJ1i?&?kIɵIG ?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@ʾIDATA0,  @ @  @@       @ @   +*!#,+#-!* -,/.$&0/&1$. 1032')@43)@5'2@ 54@76 @87@9 6@98@;:%&<;&=%:=<?>()@@?)@A(>@A@@CB"#DC#E"BEDGF @HG @IH @JI @KF@KJ @ML @NM @OL@ON@QP#!RQ!SR TS U#PUTWV#"XW"Y#VYX[Z&$\[$]&Z]\_^&%`_%a&^a`cb)'@'dc@e)b@ed@gf)(@hg(@i)f@ih@jklmkj*+@ lk+, m-*j ml,-@nopqon./@ po/0 q1.n qp01@rstu@sr23 ts34 u52r ut45vwxy@wv67 xw78y96vyx89 z{|}{z:;@ |{;< }=:z }|<=@~@~>? ?@ A>~ @ABC@ CD EB DE@FG GHHIIJ KF JK @LM MNOLNO PQ@ QR RS@ST@UP TUFVW@ WX YV XY@Z[@ [\ ]Z \]@^_@ _` a^ `a@@bc cd eb de@fg gh if hi(@ "" !@@ %(@%!      (,"$(,"$  @@@@@    /@@@@@ &     @ @       @@$@  $ & "! ! '@@@@ @@CAA@CAAAEAAE @@@@@@@@@@@@@@CCME+ԲyMEPlane.001,~y)yL~n@n@?DATAPL~/n@n@n@nnnnn@DATA)y,MEԲ+MECubexD{(),<9???!?DATA4(/)l>s=DZZ8j> sDZ8S˽sD8J˽s=DZ846>DF>=EE)6>ZF=EpOF=kHF>=E$!ߴTw M!ߴD,!ߴTwY1>)߳N <|BN -7N N ?uԡ>t<>AwY|3>A{<ޙ?>tN;۾@>Q>ά2ST;۾=Q>άά*>MQ>2Sά<>:>Q>2S2S>>^V?YY>^V?Y\"ݾ^V?\\"ݾ>^V?\Y|<??/^bu3?р^<?р^??/^<z%@H7t>Nd @DZZԾd @DZZ5;pU>f@ǵ9J>I<;pUf@ǵǵ>In>(pUf@9Jǵ>In>pU>f@9J9J>IDATApD{,, @  @    @ @     @  @ @   @               @@  @@(!@!'@ '" "& &#@ #%@ %$ $( ($ !%# $&" #'! "MA@_!HqMAdefault?????????????L????2 ?????@?=?=?TEJqTETex>@???????@@????? @??CA\Kq4yCACamera2=B B?CA\4yKqCACamera.001=B B?LAy̱xLALamp.003 ?????JD4B>??? B4B?@@???LA̱)xyLALamp.004????e>JD4B>??? B4B?@@???LA)x̱LALamp.005????e>JD4B>??? B4B?@@???TXdrTXobj_io_modif228.pykxr\wrrtUBDATA$k/share/download/obj_io_modif228.pyoDATAr̞hdhJDATA̞h<6tr5t&DATA<6tp̞h4p5`pDATAp *p<6t h5tDATA *p*ppL*pFREEDATA*pTv *pDATALpppp7DATAppLp,p<`DDATAppppDATApppTpDATAppppDATAppp\pPDATAp4FopEo<DATA4FoFoptFoDATAFo4Go4FoFoDATA4GoGoFotGoDATAGo|Ho4GoGoU=qDATA|Ho$IoGoHo;RadiDATA$IoIo|HodIoDATAIo$Jo$IoIoDATA$JoJoIodJoDATAJoDKo$JoJo)DATADKoKoJoKo;DATAKolLoDKo,LoDATAlLoLoKop DATALo4MolLoLoDATA4MoMoLotMoDDATAMoNo4Mo$No5DATANoNoMoNo DATANoOoNoDATAss\sDs>DATAsTsss>DATATssss-DATAs\sTs,sDATA\ssssDATAsLs\ss'pDATALssssDATAsLsLs sDATALssssDATAsdsLss<DATAds sss8FREEDATA ssdsLs=DATAsDATAs\sdssDATA\sRwsRwDATARwlSw\s$SwDATAlSw$TwRwSwIDATA$TwTwlSwdTwDATATwUw$TwTwDATAUwUwTw\Uw*DATAUwTVwUwUw2DATATVwVwUwVw!DATAVwWwTVw$WwEDATAWw$XwVwWw#DATA$XwXwWwdXwDATAXwTYw$XwXw9DATATYwYwXwYw'DATAYwZwTYw$Zw2DATAZw [wYwZwDATA [w|[wZwL[wDATA|[w\w [w[w0DATA\w\w|[w\\w&DATA\w]w\w\wDATA]w]w\w\]w<DATA]w4^w]w^wDATA4^w^w]wt^wFDATA^w_w4^w$_wHDATA_wL`w^w_wGDATAL`w`w_w`wDATA`wTawL`wawDATATawaw`wawDATAawDbwTawbwDATADbwbwawbwDATAbwDcwDbwcwDATADcwcwbwcwDATAcwTdwDcwcw4DATATdwdwcwdw*DATAdw\ewTdw,ewDATA\ewewdwewDATAewdfw\ew$fwDATAdfwfwewfwDATAfwgwdfw,gw-DATAgw hwfwgwDATA hwhwgwLhw0DATAhwiw hwhwDATAiwiwhw\iwDATAiw,jwiwiw$DATA,jwjwiwljwDATAjw 0:zDDATAto gAlert = 3DATA duo else:DATAuo gAlert = 4DATA\vo FILE.flush()DATAvo FILE.close()DATA\woDATA$kp#=========================DATA(kpdef ObjImport(file, Name, filename):DATA 1 and vtn[1]:DATA,p tindex = int(vtn[1])DATAH|p if tindex < 0: tindex = basevtcount +tindex + 1DATA(,p ti.append(tindex)DATApDATA0,p if len(vtn) > 2 and vtn[2]:DATA,Ēp nindex = int(vtn[2])DATAH\p if nindex < 0: nindex = basevncount +nindex + 1DATA( p ni.append(nindex)DATA4p faceList.append([vi, ti, ni, matindex])DATA 1:DATA4p ObjectName = words[1].join("_")DATA44p GroupName = words[1].join("_") HDATAԜp else:DATA,Tp ObjectName = "Default" DATA,p GroupName = "Default" DATA8p #print "Object name is %s" % ObjectNameBDATA8$p #print "Group name is %s" % GroupName8GDATAğp else:DATA Dp if index > 1:DATA4̠p GroupName = join(words[1],"_") DATAlp else:DATA,p GroupName = "Default" ODATA8p #print "Group name is %s" % GroupNameDATA$p DATA p if mtlflag == 0:DATALp matindex = AddMeshMaterial(GroupName,materialList, matindex)DATA$,t gcount = gcount + 1 DATAtDATA,t if fcount > 0: DATA$t baseindex = vcountDATA(Dt basevncount = vncountDATA(t basevtcount = vtcountDATAdtDATA0t elif words and words[0] == "mtllib":DATA(lt # try to export materialsDATA4t directory, dummy = os.split(filename)tDATA4t filename = os.join(directory, words[1])DATA 0:DATA8t material = matlist[matindex]DATA,t material.R = Kd[0]DATA,$t material.G = Kd[1]DATA,t material.B = Kd[2]DATA Tt try:DATA<t material.specCol[0] = Ks[0]DATA<t material.specCol[1] = Ks[1]DATA<,t material.specCol[2] = Ks[2]CDATA$t except:DATA$dt passDATA t try:DATAD|t alpha = 1 - ((Ka[0]+Ka[1]+Ka[2])/3)DATA$,t except:6GDATA$t passDATA Lt try:DATA8t material.alpha = alphaDATA$tt except:DATA$t passEDATAt else:DATA(t mtlflag = 0DATAtDATA,t line = file.readline()DDATA t file.close()REEDATA 0:DATA t #mesh.hasFaceUV() = 1DATA,t print ("Object has uv coordinates")DATA 0:DATA 4t for m in materialList:DATAt try:DATA 4t M=Material.Get(m)DATA(t mesh.materials.append(M) DATALt except:DATAt passDATALuDATAu total = len(faceList)DATA Du i = 0DATAuDATA,u for f in faceList:DATAu if i%1000 == 0:DATA8,u print ("Progress = "+ str(i)+"/"+ str(total))DATArrDATAr i = i + 1DATA$|r vi, ti, ni, matindex = fDATA r face=NMesh.Face()DATA$r if len(materialList) > 0:DATA $r face.mat = matindexDATArDATAr limit = len(vi)DATA(r setcount = setcount + len(vi)DATA,r c = 0 DATAr REEDATAr while c < limit:DATAr m = vi[c]-1DATA,$r if vtcount > 0 and len(ti) > c:DATAr n = ti[c]-1DATA,Dr if vncount > 0 and len(ni) > c:rDATAr p = ni[c]-1DATAdrDATAr if vtcount > 0:DATA\r try:qDATA$r u, v = uvList[n]DATAlr except:DATAr pass DATAlrDATAr """ DATAp\r # multiply uv coordinates by 2 and add 1. Apparently blender uses uv range of 1 to 3 (not 0 to 1). rDATA04r mesh.verts[m].uvco[0] = (u*2)+1DATA0r mesh.verts[m].uvco[1] = (v*2)+1DATAdr """DATArDATALr if vncount > 0:DATA(r if p > len(normalList):DATAddr print("normal len = " +str(len(normalList))+ " vector len = " +str(len(pointList)))DATA(4r print("p = " +str(p))DATA(r x, y, z = normalList[p] EDATA(Tr mesh.verts[m].no[0] = xDATA(r mesh.verts[m].no[1] = yDATA(tr mesh.verts[m].no[2] = zDATAr c = c+1 DATAr EDATAr if len(vi) < 5:DATAtr for index in vi:DATA0r face.v.append (mesh.verts[index-1])DATAr DATAr if vtcount > 0: DATA r for index in ti:DATA(r u, v = uvList[index-1]DATA(r face.uv.append((u,v))DATA4r@DATAr if vcount>0:DATA$r face.smooth=1DATArDATA$r mesh.faces.append(face) DATArDATA0r print "all other (general) polygons ..."DATAr for f in faceList:DATA$4r vi, ti, ni, matindex = f DATAr if len(vi) > 4:DATA,Dr # export the polygon as edgesqDATA<r print ("Odd face, vertices = "+ str(len(vi)))@DATA(r for i in range(len(vi)-2):DATA$r face = NMesh.Face()DATA,r if len(materialList) > 0:DATA( 0: DATA$r if len(ti) > i+2:DATA,4r u, v = uvList[ti[0]-1]DATA,r face.uv.append((u,v))DATA0dr u, v = uvList[ti[i+1]-1]DATA,r face.uv.append((u,v))DATA0s u, v = uvList[ti[i+2]-1]DATA,,s face.uv.append((u,v))DATAsDATA(4s mesh.faces.append(face)DATAs DATA 4s NMesh.PutRaw(mesh, Name,1)DATAsDATA8,s print ("Total number of vertices is "+ str(vcount))DATA<s print ("Total number of faces is "+ str(len(faceList)))DATA8ts print ("Total number of sets is "+ str(setcount))DATAsDATAsDATA4s print("Finished importing " +str(Name)+ ".obj")DATAsDATA,s#=========================================mDATA4sdef AddMeshMaterial(name, materialList, matindex):DATA,< s#=========================================DATA s DATAD s index = 0REEDATA s found = 0 DATA 4 s limit = len(materialList)DATA sDATA, s while index < limit:DATA( s if materialList[index] == name:DATA< s matindex = index DATA s found = 1DATADs index = limitDATAs index = index + 1DATADs DATAs if found == 0: DATA 4s materialList.append(name)DATA(s matindex = len(materialList)-1DATA Ls DATAs return matindexDATADsDATA,s#=========================================DATA(Lsdef AddGlobalMaterial (name, matindex):DATA,s#=========================================DATAts DATAs index = 0DATA\s found = 0DATAs matindex = 0DATATs MatList = Material.Get()DATAs limit = len(MatList)DATA\sRqDATAs while index < limit:DATA(Ls if MatList[index].name == name:DATAs matindex = index DATAds found = 1DATAs index = limitDATAds index = index + 1DATAsDATATs if found == 0:DATA$s material = Material.New(name)DATAds matindex = indexDATAs sDATATs return matindexDATAsDATA$Ds#================================DATA$sdef ObjExport(FILE, Name, type):JDATA$ds#================================DATAs global returncodeDATAt s global vertexcountDATA s global uvcountDATAt!s global TransformDATA!s global multiflagDATAt"s global exporttypeDATA"sDATAd#s vertexcount = 0DATA#s uvcount = 0DATA\$s returncode = 0DATA $s print("Writing %s..." % Name)DATAXd%s FILE.write("# Wavefront OBJ (1.0) exported by lynx's OBJ import/export script\n\n")DATA$&sDATA$&s Objects = Object.GetSelected()pADATAܓs if Objects == []:DATA0\s print("You have not selected an object!")DATAs returncode = 4DATAts else:DATAs for object in Objects:DATAls MtlList = []DATA0s if len(Objects) > 1 or exporttype > 1:DATA8s Transform = CreateMatrix(object, Transform)DATA$s multiflag = 1DATA s DATA4$s mesh = NMesh.GetRawFromObject(object.name)DATAęs ObjName = mesh.nameDATA(Ls has_uvco = mesh.hasVertexUV()DATAܚsDATA4Ls FILE.write("# Meshname:\t%s\n" % ObjName)DATAsDATA\s faces = mesh.facesDATA$s materials = mesh.materialsDATA ts Vertices = mesh.vertsDATA,s GlobalMaterials = Material.Get()DATAsDATALs if len(materials) > 1 and len(GlobalMaterials) > 0 and type < 4:DATA4s CreateMtlFile(Name, materials, MtlList)DATA\sqDATA<̠s # Total Vertices and faces; comment if not useful`DATADts FILE.write("# Total number of Faces:\t%s\n" % len(faces))DATAH$s FILE.write("# Total number of Vertices:\t%s\n" % len(Vertices))DATAԢsDATADs FILE.write("\n")DATẠsDATA4 1 and len(GlobalMaterials) > 0 and type < 3:DATAPls UseLayers(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATAL$s elif len(materials) > 1 and len(GlobalMaterials) > 0 and type == 3:DATALܨs UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATAs else:DATA@ s Standard(faces, Vertices, has_uvco, FILE, ObjName)DATAs DATA4$s#================================================EEDATA4īsdef CreateMtlFile (name, MeshMaterials, MtlList):DATA4ds#================================================DATAs global gFilename DATAsDATA s # try to export materialsGDATA4|s directory, mtlname = os.split(gFilename.val)DATA s mtlname = name + ".mtl"DATA0s filename = os.join(directory, mtlname)DATA$ 0:DATA(s limit = len(uvList)-200DATA0ls while index > limit and found == 0:DATA,s uv_value = uvList[index-1]pDATADs if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA0Ls uvPtrs.append(index+uvcount)DATAs found = 1DATA$ls index = index - 1DATAs if found == 0:DATA$s uvList.append(uv)DATA$s index = len(uvList)DATA,s uvPtrs.append(index+uvcount)DATA 0:DATAH$Ww FILE.write("%s/%s/%s " % (v+1, uvPtrs[uvindex], v+1))DATA$Ww uvindex = uvindex+1DATAdXw elif has_uvco:DATA<Xw FILE.write("%s/%s/%s " % (v+1, v+1, v+1))DATA(Yw else: DATA4$Zw FILE.write("%s//%s " % (v+1, v+1))DATAZw FILE.write("\n")DATAL[wDATA4[w vertexcount = vertexcount + len(Vertices)DATA(\\w uvcount = uvcount + len(uvList)DATA\wDATA@\]w print("Export of " +str(ObjName)+ ".obj finished.\n")DATA^wDATAHt^w#=====================================================================DATAL$_wdef UseLayers(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name): DATAH_w#===================================================================== DATA`w global vertexcountDATAaw global uvcountDATAaw global multiflagDATAbwDATAbw uvPtrs = []DATAcw uvList = []DATAcwDATA8cw FILE.write("mtllib %s\n\n" % (Name + ".mtl"))DATA,dw FILE.write("g %s\n\n" % (ObjName)) DATA,ewDATAew for v in Vertices: DATA$fw vert = v.co DATA fw if multiflag == 1:DATA0,gw vert = Alter(vert, Transform) DATAgw x, y, z = vertDATA4Lhw FILE.write("v %s %s %s\n" % (x, y, z))DATAhwDATA\iw uv_flag = 0DATA(iw for m in range(len(MtlList)):DATA ljw for face in faces:DATA jw if face.mat == m:DATA$|kw for uv in face.uv:DATA lw found = 0DATA(lw index = len(uvList)DATA $mw limit = 0DATA,mw if len(uvList)-200 > 0:DATA0Dnw limit = len(uvList)-200DATA8nw while index > limit and found == 0:DATA4|ow uv_value = uvList[index-1]DATALpw if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA8pw uvPtrs.append(index+uvcount)DATA$tqw found = 1DATA,rw index = index - 1DATA$rw if found == 0:DATA,,sw uvList.append(uv)DATA,sw index = len(uvList)DATA4\tw uvPtrs.append(index+uvcount)DATA$tw u, v = uvDATA<uw FILE.write("vt %s %s\n" % (u, v))DATA$4vw uv_flag = 1DATAvwDATA(4ww if has_uvco and uv_flag == 0:DATAww for v in Vertices:DATA Lxw u, v, z = v.uvcoDATAxw u = (u-1)/2DATATyw v = (v-1)/2DATA0yw FILE.write("vt %s %s\n" % (u, v))DATAlzwDATAzw for v in Vertices: DATAd{w x, y, z = v.noDATA4{w FILE.write("vn %s %s %s\n" % (x, y, z))DATA|wDATA|w total = len(faces)DATA}w p = 0DATA}w uvindex = 0DATA0|~w for m in range(len(MtlList)): DATA<w FILE.write("usemtl %s\n" % (MtlList[m].name)) DATA w for face in faces:DATA Dw if face.mat == m:DATÀw p = p+1DATA$Lw if (p%1000) == 0:DATAP܁w print ("Progress = "+ str(p)+ " of "+ str(total) +" faces")DATAwDATA$w FILE.write("f ")DATA4w for index in range(len(face.v)):DATA<4w v = face.v[index].index + vertexcount DATA(܄w if len(face.uv) > 0:DATALlw FILE.write("%s/%s/%s " % (v+1, uvPtrs[uvindex], v+1))DATA,$w uvindex = uvindex+1DATA$w elif has_uvco:DATA@Lw FILE.write("%s/%s/%s " % (v+1, v+1, v+1))DATAw else:DATA<|w FILE.write("%s//%s " % (v+1, v+1))DATA$$w FILE.write("\n")DATAwDATA4$w vertexcount = vertexcount + len(Vertices) DATATĊw print("Export of " +str(ObjName)+ ".obj using material layers finished.\n")DATAwDATADw#==================================================================DATAHwdef UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name): DATADTw#==================================================================DATAw global vertexcountDATAw global multiflagDATA wDATA8|w FILE.write("mtllib %s\n\n" % (Name + ".mtl")) DATA,w FILE.write("o %s\n\n" % (ObjName))DATAw DATA$w index = 0DATAw VertexList = []DATA $w for vertex in Vertices:DATA w VertexList.append(-1)DATA4w index = index + 1DATA@w print("number of vertices is " +str(len(VertexList)))DATAdwDATAԔw Totalindex = 0DATATw ix = 0DATA̕w NewVertexList = []DATATw NewVertexCo = []DATA(Ԗw for m in range(len(MtlList)):DATA4dw # Group name is the name of the mesh DATAw if MtlList[m]:DATADw FILE.write("g %s\n" % (MtlList[m].name+str(m+1))) DATA ?!@A5 " BCDEFG(H#$I%J%KLMNOPQRSTUV!WXYZ&[\]^'_(`abcdefghijklmnopqrs) tuvwx yz{|} ~*ijk+*,'_##DELMr(52o(#)+,-%hijklDE&(H.(/Ehijk[\&(/sH0  1!W2223   243   (/g f!"#$5 %&'()*+,-6.&/*-7770-123456789:6;5<8&3  = '>'?(9@A/ BC f!gDEFGH3427IJKLMNOPQ0R:::6;5<STUVWXY  Z&; [\]^_<"3  ` (A/ a b c=d>e?f@g<hCAi jWkg f!lmnopZqrBstuvw0xCyzD>C{|Z=}~0?ijk@E 126(AFFF AfG''T ''(9@3 HI J  `   / f!H     j]  KGGsL7h(&HMNNN'_O       P  sQRUOP !"#$%&'()@*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcSdrseT'fLgTh# iNjUklVm nMo jSpRiQqHW #(`NO@rstuvX+YYwxZyz{|}~'fWXFel[YYYwxZyz\YYwxZyz]YYwxZyzs[  ()^YYwxZyz[ vrs_ YYwxZyz[rs`YYwxZyzab c YYwxZyz[  dYYwxZyz[#rsNOe YYwxZyz[fYYwxZyz 5g YYwxZyhs5iQYYwxZy     jjkk !"s%#  $l%&'()*+,-./012345rsm6./789:;<=>?@ABCDEFGrnnn lHmImJmKmLmMmNmOmPmQmRmSmTmUo]V.p"WXYZ[\]^_`abcdefghijklmnopq rstuvowq x y zT{|}~rrrr sssrr2tttstZZZrrrrqTw   u 3v%JvvvLw ww2vx  tux y{| } ~y%yyy 2wv(T{$Ixyyy z{   |||}}}2~~~*|~F ' 2 (' -         rs /  s   r' !" #$%rs &''() *+% ,se &-./01' H2 3456Z78 9z:;<9=> 1'<? @AT{'f ' BC !DEFG  rHI'JKLMNO  rHIUkPQRSTU'V!Wrs"XY * Z 'V [\]^_`azb c!W!d e(>fghijk5lmnopqrstuvYYwxZy[z9NOs w''( f!x' yU z {|DDDD } ~z f     f ZI (  ZH YYwxZyz[HZsJJJ( ( Z1'Z'Z7'Z'Z'JH2'''rsk   Z(H23ENDB