BLENDER_v225REND d1SRdܟL SRanimt.001bhjwtDDATAbMcDATAcM,dbDATA,dMtdcDATAtdMf,dDATAfMdftdDATAdfMgfDATAgMgdfDATAgMDhgDATADhMhgDATAhMDhDATAjNjc,dDATAjN,mjbtdDATA,mNtmjbfDATAtmNm,mtddfDATAmNntmfdfDATAnNnmcgDATAnNon,dgDATAoNqnggDATAqNLqofDhDATALqNqqdfDhDATAqNrLqghDATArNtqghDATAtN,urDhhDATA,uNwtdfgDATAwN,ufgDATAtODbfdftdd\\DATA\CDdC#]uD/dCC(BDC??DATADO,tgc,dgdDATA,ODfghDh| m=0=o?}}}~ddDATAd>????????| m=0=o?p=A$OA??p=At B? #<CssDATAO,Dhhgdf??Pף~dTDATABB̽̌?B@== #< #<`jFzD OBB̽̌?DATADzCAzCA~~ A@FB= A DATAhIT DATATG,CC|?޾?~?DATAD,ET/DATAC,DdCC`DDC(BDC??DATAFT@0A{AA% ˆ% B~ A@CC #<@DATAT>??? ???? A???PA A!O?j?}GCHB? At B?=C@h@hSRd LܟSRfaceselectwl}l DDATAwM$zDATA$zMlzwDATAlzM {$zDATA {M|lzDATA|ML| {DATAL|M||DATA|M|L|DATA|M$}|DATA$}Ml}|DATAl}M$}DATAlN $zlzDATA NTlw {DATATN w|DATANT {L|DATAN,|L|DATA,Ń$z|DATÁN,lz|DATAN\́||DATA\N|$}DATAN\L|$}DATAN4|l}DATA4N||l}DATA|Nă4$}l}DATAăN |L||DATA Nă||DATAOtw|L| {dDATACDdC#]uD/dCC(BDC??DATAtO\|$zlz|dDATA\Ot||l}$}| m=Si=o?DDDATAD>????????| m=Si=o?p=AA??p=At B? #<CDATAO\$}l}|L|??Pף"3d̻DATAGCC??"?DATA 333??zDzDBC"FzD=HB ^DATAL 333?zCCHBC?CFC= ADATALDzCAzCA~~ A@FB= A DATAhIL DATADE$/DATA$C DdCC`DDC(BDC??DATA FԺ$@0A{AA% ˆ% B~ A@CC #<@DATAԺB̻ B̽̌?B@== #< #<`jFzD OBB̽̌?DATA̻>Ժ??? ???? A???PA A!O?j?}GCHB? At B?=C@h@hSRdL SRpleinecranTL|D.DATATMDATAMTDATAM,DATA,MtDATAtM,DATAMtDATAMLDATALMDATAN܆DATA܆NԇT,DATAԇN܆tDATANdԇDATAdNtDATANdTDATAN<tDATA<N4LDATA4N|<,LDATA|N4LDATAOTL,?C]@PףJ<DATAC\BDdC2,D;dCC(BDC??eDATA>\B>|BHa:=qG<X?=|?J >Q(??Bj?=>Aa:=|?|qG^98@?Pd9#$?|?|?8؋0B>sGqG@Q=@!J 1e @BB,3iK.=s=\2*5^DCeõGy dCGBd ?3ghx>r ?At B? #<C(@P@:DATAB\BB̽̌?B@ #< #<`jF@F OBB̽̌?DATAFd\Bj@(\AF)u?j B A@CC #<@DATAdG<\BCC@ @N@??DATAD<Ed\B SAVE FILEE:\ZI^P\3DGRX\blender\reserve_python\southpark_lipsync\cartman_southex00.blendDATAOt?V:CPף\DATADd KzCAzCA A@FB= A DATAdG< KCC@ @>??DATAD<Ed K/DATAC< KDdCDBBC(BDC??DATAFd ǨAzūzEA A@CC #<@DATAdB\ KB̽̌?B@ #< #<`jF@F OBB̽̌?DATA\>d K??? ???? A??V:CPA Aj? _;}GCHB? At B?=C DATAOtL=Z{B>o?S4DATA> T,?݋ ?GWk%y=X9?/?L ???,?DWX9??k/?M? ovZ??ڣq=нQƃ=A=ʞ:ݮ; >?F=M>p;?@2A2?5@s@6"}ËJC2ūM? ovZ??U?J`¾(6A B? #<CM o@vZ@31= @]]DATAB TB̽̌?B@ #< #<`jF@F OBB̽̌?DATAFt Tj@(\AF)u?j B A@CC #<@DATAtC\ TDdCwԸGmDڵVDC(BDC??dDATA\G4t TCC@ @N@??DATAD4E\ TSave AsEg:\easyphp\www\jmsoler\util\blenderfile\thon_souris_fichiers\..\untitled.blend.blendd SRdL SRscriptĊĎLDD7DATAĊM DATA MTĊDATATM DATAMTDATAM,DATA,M̌DATǍM,DATAM\̌DATA\MDATAM\DATAĎN TDATAN4ĎĊDATA4N|ĊDATA|N4,DATANDr|,DATADrNln ̌DATAlnNgDrTDATAgNclňDATAcNbg\DATAbNXc,\DATAXNTb̌DATATN<XDATA<NT\DATANL<,DATALŇDATADOĊ,,,dIDATA,CDDdCǝDʄ7dCC(BDC??eDATAOĎ TDATAǑ\??AHM IDATA>?`zJ;3@U?i!3(:>T??@U"i!3?`zJ.Qk3(<>T ;???u]3A??i?ti!X"TwQA>TAj?%%37N?l'`нB#֟K=Ȃ¶3$@(@5?533p,-At B? #<C44DATADE"SAVE FILEf:\EasyPHP\www\jmsoler\util\blenderfile\tesselate\animspring.blendw @DATAO\,??Pף    DATAhI |N=DATABBV?B CLX@ #< #<`jFzD  KEBV?DATADTzCAzCA~~ A@FB= A DATATG,CC|?޾?~?DATA,CTDdCC`DDC(BDC??DATAF,@0A{AA% ˆ% B~ A@CC #<@DATA>??? ???? A???PA A!O?j?}GCHB? At B?=C@h@hDATADE1LOAD TEXT FILEg:\EasyPHP\www\jmsoler\util\blenderfile\py\pythonrvk.pyend SRd LSRsequenceur l4DDATA MDATAM DATAMT DATAT MDATAMT DATAM&DATA&Ml>DATAl>M1&DATA1Ml>DATAM1DATAMlDATAMlDATANDATAN4 T DATA4N| DATA|N4T DATAN |DATA NT&DATATN l>DATANTl>&DATAN,1DATA,Nt1&DATAtN,l>DATANtDATANL1DATALN1DATANLDATAN$&DATA$Nll>DATAlN$DATAO T CdDATACDdC#]uD/dCC(BDC??DATAOl&l>dDATAlOT18=i>o?dTDATATD$zCAzCA A@FB= A DATA$>T????????8=i>o?fffAD&@??fffAt B? #<CDATADE$SAVE FILE/pics/blender/rt1.blendkDATATO4ll>8=H>o?oood<DATA<DzCAzCA1||1 A@FB= A DATA><????????8=H>o?fffA*@??fffAt B? #<C>>DATADESAVE FILE/pics/blender/rt1.blendkDATA4OT1&8=>o?iiijdDATABB̽̌?B̽̌?)) #< #<`jFzD SQB̽̌?DATA>????????8=>o?fffA@??fffAt B? #<CzzDATADESAVE FILE/pics/blender/rt1.blendkSC D<SC1tDs%B ^BZCddd??< d??_@??///render///#DATA8 &$ DATA8< ,LDATA<8 DATA8< DATA8D tDATAD8 OB5tOBLamp ԏY4@B???N>}E^%???E^%}%}}?>E^}?Y4@B??????_u4>}?p:/}>=@???OBt5LOBCamera ,(<>T ;????????i!3?i!3(<>T ;???????%"?`zJ.?']8&?DKEd?? #=?>=?@???OBL5$ tOBLamp.001 pA????>/??&sU?fU >LT=O=~? ЁTD=pA?????&sU?LT= eH~?D=gU ?OρT?XSAW: ?DOBd?? #=?>=@???OB$ 5 LOBLamp.002 pAB{$x ???xz Y%V%???V%YY%Y RW饳 R?YpAB{$x ??????@|1 RYzJY? R \A0XH?DOBd?? #=?>=@???OB 5$ OBPlaneDDc?d???"?O3gC??Z}?gs?A>>%PSv?XDc?d?????gs?'}?>X.Z=?@???DATADOB5 OBPlane.0013R??????????????@U"i!3?`zJ.Qk3(<>T ;??DKEd8? #=?>=?@???DATARME23MERVK1ſ^^tY<(W[@@\+>ņF@@cF@DATAtYDATA`/??@f깯?02Goh=@3R4?0`Pr?Z6?+>X r_6?]}?hXSrJIa}?Ҫn<r?PI+>XG0ǁ?l?7?Wfl?'?zGS;f&(?A/S A=stg+@kc?s}?'d`#2?h?;?<(c?m?vL@,Sc?4xL@ph%2?4;?jZۄ?@ہ?S%?{?@լ[@AS{?B=׬[@!b݄?=ہ?mGJa @@o? 6@@/V@S6@z>/V@`?Sa @n>o?"-i= @;>@ʃ?Qp@>>@<@WSٺQp@><@WV:= @>Ƀ?:ʛ4@h,@2š?C؏@k,@@S؏@e3?@zd4@e3?1š?mNC@t:@p1o?f^@t:@5?gS*a@Yi?5?UhTNC@Si?o1o?^ϩ=s2L@H@?? @H@)>S@?>aq2L@???յ"M@U@q>K.@U@Sc-@U? PM@U?!q>㣩H@Fc@)|@ Fc@&CS F|@@Y UHS?@`Pq>N'@] n,?N'@0d?t@F2fIF龙t@۽XS&z/4@߽ƙ?.4@ b ?/B@eBF5c0B@ h`S,c]B@ @ ?\B@eB6%UVv?@}>:T*@9> ^SC*P@9>T,`v?P@}>N?ʋv?]ݮ@.?XS^ݮ@A? RSS]@ A?GӋv?]@*?^b#y?@\?T}N@'x@=SwnUk@,x@\}?Uk@\?'eล?x@?G/p>x@O%<@"Sͥ_>x@U%<@3f㸥?x@?!a?!F@MO?A3Hퟦ?"F@U@S^쟦?!F@U@Dg? F@HO?-STd{?@\|?ҪW@@[@SѢY@@[@d/]c{?@W|?<z@O@?}nmP@P@_M@S˯rmP@O@eM@YJXIz@N@? SH)@@ʽ?jR@@Jo,@XSR@殗@Oo,@].RH)@宗@ǽ?ɚk;@}|@?Mҗ@~|@?S1җ@}|@?yg/k;@||@?%ੱNH@J@"K?SA@J@=?CSD@J@??fMH@J@"K?séM@@1#>Q@@<ɣSB@@?򬩱);L@?@=;=7xK@@@oS8{K@?@ oF";L@>@E;=VGdC@ղ@ }_!ы@ֲ@BῳSN ы@ղ@K*FdC@Բ@}ؚqt64@6@A-4H9e@6@AFjSm\e@k@K s64@j@*43#? @A7 L6)@A- S`8)@N@-8? @N@7[? @ AjKXVH? A[(/y S"[H?@a(/6{ @@gKɩU?t AIBXm6?t AӖ;S9Le6?-@ؖ ?,@IB橱b?w?d A=$@Qd AA￘PS5ö@IL?w?¶@dR?0BAgWyA]?YS\y@]?k8qr?@S>V3?vAF,?-X,`&vA?JS`&@"?۾Q?@F,?b6?^A:?O@^A%@2S@@ %@b6?@<?d~M?)D"AkӠ??F?)D"AI@ S͡F?$DAI@dhM?#DAlӠ?4\@h?%Aѵ?(װ-F?%A*Z@1S,F?A/Z@dh?Aѵ?MJF g@)AO? $.@)A`X@;S]%.@ AeX@;U g@ AP?0UM@x,AL?J^i@x,AS=A@M@x AM?Rv1@W/A<}?*}8@W/A4@۫SA8@RA7@:c 1@QA=}?ÛA@#F3A?5y?="@#F3A\S?SC?"@FA_S?qhA@FAA5y? өQtK@6A$?x3@6A?S- @A?btK@A$?&5N@:A黐>$@:AξƨS)$@AξcS5N@A컐>T ;I@z=Awި@z=AsS?C@zAE; ;I@zAo,x=@Q@Až,N@Q@A|NAES(C>z|.Aך?y|.Ax4dT?JQA:/eKjBþJQATſGWS)BþE1AXſpT?D1Ac?JUA2+lD8ZYJUA"+_S iYJ5A%+ؗ?J5A.+l23PWGx?XA^0=R VXA>^S#Vܰ8A>1(Gx?۰8Af0=$LBt?\AZ>X<^\AIܤ?TS%^K]>'A?x~_AN=R??Y1/.־x~_A @lm@E.־s~?A @qtA?r~?AO=R?xk.DATA| <(*              #! "!#"# $' !%$!"&%"#'&'$(+$%)(%&*)&'+*+(,/()-,)*.-*+/./,03,-10-.21./323047015412652376748;459856:967;:;8<?89=<9:>=:;?>?<@C<=A@=>BA>?CBC@DG@AEDABFEBCGFGDHKDEIHEFJIFGKJKHLOHIMLIJNMJKONOLPSLMQPMNRQNOSRSPTWPQUTQRVURSWVWTX[TUYXUVZYVW[Z[X\_XY]\YZ^]Z[_^_\`c\]a`]^ba^_cbc`dg`aedabfebcgfgdhkdeihefjifgkjkhlohimlijnmjkonolpslmqpmnrqnosrsptwpqutqrvurswvwtx{tuyxuvzyvw{z{x|xy}|yz~}z{~||}}~~ME32MERVK2\ ,HƆF@r@cF@DATA ,DATA`4/??R2cs?אRYR&RA?ِ2{^3Ur?r?+>wV͡ rv?]}?ZoU.rd`}?*r?d+>yWzǁ?@?7?S͡*f@?'?{LoU!f1~I(?"?܁?͡{?B"?Ԭ[@oU{?v׬[@`ۄ?w܁?_2za @?o?͡c6@?/V@oU6@3/V@-Va @9o?z= @$c?˃?=͡Qp@(c?<@}oUQp@gs<@FC= @ms˃?z4@?2š?K͡؏@?@oU'؏@8@|X%*4@D2š? zNC@ ?p1o?m͡X^@ ?5?oU `@s~+5?Da NC@~+p1o?z p2L@>"@??͡ @@"@>oUd @G=>`p2L@G=??zUM@x @q>Y͡Q@z @ʧoU$@'/>UcM@'/>q>ߦzkH@@)͡|@@&oU>|@>&hAH@>)zˆ;@@׾κ͡*4}@@oUQ }@c>'ˆ;@]>׾Mz$gl)@#c@C&͡WGD@&c@ۖ&KoU]D@,>&`gl)@(>C&3@Y @oUFJOO?\ ô1,?HOO?0 zZ? :@6͡SCi :@ڽgSoU .0j?ݽȤ'?.j?'z[R ?DtA@eBI͡.#cGtA@ ]oUp5c? ! ??eB?zATv?~DH@}>T͡9*DH@9>i^oU*?9>}Tv??}>8Qz*Njv?O@/?kV͡SO@ A?xUoUSt)?A?s6Njv?s)?/?ZZzKx?U@\?O͡iU@)x@CoU}ɫ?-x@îdMx?ɫ?\??Zz ޸?,\@?`A͡V>/\@R%<@-+oU N>\j?V%<@^߮k\޸?[j??PzR?fc@LO?,͡e矦?ic@U@%oU蟦? ?U@6a? ?LO?M?z^{?Uj@[|?E͡KU@Uj@[@oUW@D?[@<]^{?C?[|?7'z[z@%q@?͡۩mmP@%q@cM@oUomP@K?fM@E9Oz@K?? z4PH)@w@ʽ?͡;R@w@No,@oUR@+?Po,@sOd9PH)@*?ʽ?zUk;@M~@?͡җ@P~@?oUҗ@??]`k;@??zKH@C˂@"K?͡A@E˂@C?PoU*C@@D?a\KH@@"K?ɻz M@`3@?#>͡@b3@ z;L@}@;==͡i xK@@ooU 0zK@6@ o{M;L@6@;=ޤzEdC@@|͡&ы@@@oUG ы@4@Fΐ6EdC@4@|z<r64@k@$4͡P=e@k@EoUWe@n @Ir64@n @$4Gz=0? @ӓ@7A͡M6)@ӓ@-|oU_6)@'@-? @'@7zzNF @;@cK͡UG?;@[(/oU\E?w.@_(/Kܮ @w.@cKz0U?@IBh͡FUh6?@Ӗ2oUP`6?H5@זN?H5@IBCz[[=w?+ @)͡ L- @BIoUd<+T<@HP=w?T<@Vz.XR?Ht@l?͡ ;%.Jt@YoU"&.B@>R?B@2zKL?eܤ@4N͡$L{gܤ@(7_oU/]{ƸI@(\~L?ƸI@4PHz8kr?D@S>(V͡I yD@]?[oUyP@]? &kr?P@S>MVzU?@F,?T͡`&@?NoUP`&8YW@$?鶮KA?8YW@F,?w[z1?@;?J͡@@%@9oU3C@q)^@!%@BϮU1?q)^@;?FWzM?|@mӠ?8͡F?|@I@oUץF?d@I@쮭`M?d@mӠ?(Jzqb?@ѵ?:!͡%F?@+Z@oU%F?k@0Z@ Hab?k@ѵ?u5zŵg@M@R?C͡ .@M@bX@oUM!.@r@gX@*Xg@r@R?KzM@0@O?͡^i@2@U=A@oU/^i@Wjy@Y=A@CFM@Wjy@O?Wz1@M@?}?>͡ 8@O@6@9oU8@H@9@V-1@H@?}?zA@j@F5y?͡<"@l@`S?ФoUJ>"@e@cS?`A@e@F5y?z÷tK@@#$?ۮ͡@@?oU}@@?`tK@@#$?z,2N@U@>h͡$@U@ξboUp $@U@ξW2N@U@>ʧz ;I@@2Ь͡D@ý@5oU;@@WD ;I@@2zx=@%@ž͡I1M@%@oUOM@%@*ŧx=@%@žܪzs!q+@@!' ͡DEHL@@#oU\GL@@# Ϟq+@@!' ƹz:@@9Du͡)RZ@@?0oU!_Z@@B0Pʟ@@9DzMo?5^@dK͡Vj?7^@w)#oUmXe?0^@w)Ϯo?0^@dKzYК?R@u4*͡IR>T@=oUH>Mƞ@g)К?Mƞ@u4z[T?o.@3͡EBþq.@UſqQoU1Bþj.@UſTrT?j.@i$zS?@'+l G͡1mY@%+\oUCxY@!+m?@'+l =z"D3x?@r0=S͡V@>^oUV@> 3x?@r0=mOza-t?f@_>V͡+^f@Iܤ? WoU_^f@Mܤ?X3t?f@_>YzA?@Q=R?U]*'h.־@ @n >l.־ί@ @s>A?ί@Q=R?9gC3'DATA| H*@)I  @ ) I   @ )  I    )  ) ) )  #! )"!#" # $'@ !%$)!"&%I"#'& '$(+@$%)()%&*)I&'+* +(,/@()-,))*.-I*+/. /,03@,-10)-.21I./32 3047@0154)1265I2376 748;4598)56:967;: ;8<?89=<)9:>=:;?> ?<@C<=A@)=>BA>?CB C@DG@AED)ABFEBCGF GDHKDEIH)EFJIIFGKJ KHLO@HIML)IJNMIJKON OLPS@LMQP)MNRQINOSR SPTW@PQUT)QRVUIRSWV WTX[@TUYX)UVZYIVW[Z [X\_@XY]\)YZ^]Z[_^ _\`c\]a`)]^ba^_cb c`dg`aed)abfebcgf gdhkdeih)efjifgkj khlohiml)ijnmjkon olpslmqp)mnrqInosr sptw@pqut)qrvuIrswv wtx{@tuyx)uvzyIvw{z {x|@xy}|)yz~}Iz{~ |@|})}~I~ @) ) ) ) ) )I @)I @)I @)I @)I @) ) ) ) ) @)I @)I @)I @)I @)I ) ) ) ) ) @)I @)I @)I @)I DATAl9m ??*? %?q??&?q?I ??9?}?C ????CAl,CACamera2=B? A B?LAԏ,pLALampI{G?.h??\@B颻B>??/AB4B?qhaALAԏLALamp.001HBF??{G??B颻B>???B4B?@@LALALamp.002H??>;@B颻B>???B4B?@@IPPIPKeyIpoB CLX@KEDATAP)BV?KE ;DATA% F%> A ..AF۠?A5‚?6Aak?   B= B= <wH9B 6WBV?qB?ͼzB\e?Tnw!B8@D=B+<cBhBa9>PB^>c/Bp?B5‚?NfB¼?BSBSBS  KEtKEKey ̢DATA̢p:DATA ??ۭ?O22ۭ3?P2r?@?+> r@?]}?r2~Ia}?r?8~I+>ǁ?́?7?fс?'?ff(?ǁ?l7???|? A=?rg+@ A=4tg+@?@}?#2??;?c??vL@c?6xL@%2?N;?ۄ??"@ہ?{?B"@լ[@{?G=׬[@݄?G=ہ?a @@o?6@@/V@6@>/V@a @>o?= @%c@ʃ?Qp@(c@<@Qp@/><@= @#>Ƀ?4@-@2š?؏@-@@؏@c4?@4@]4?1š?NC@ :@p1o?^@:@5?a@/j?5?NC@)j?o1o?s2L@~DH@?? @DH@)>@?>q2L@???M@U@q>@U@@ɫ? M@ɫ?!q>H@dc@)|@gc@&|@ ?&H@ ?)Ά;@%q@׾ }@%q@ }@K?͆;@K?׾jl)@J~@D&D@M~@ږ&D@?&jl)@?C&@_3@FA7@`3@;0?7@f @A0@f @F?@'J?@I'?2@N'?1@'J,?ӓ@0Pq>ӓ@Y `Pq>'@] ,?'@0? @F@۽zH5@߽?H5@ ?Gt@eBcHt@ ,cB@ ?B@eBVv?D@}>*D@9>*P@9>`v?P@}>ʋv?@.?S@A?Sv)^@ A?Ӌv?u)^@*?y?@\?N@'x@nk@,x@}?k@\?ล?/@?p>0@O%<@_>]jy@U%<@㸥?\jy@??h@MO?ퟦ?i@U@쟦?h@U@?g@HO?d{?U@\|?W@U@[@Y@U@[@c{?U@W|?z@%@?nmP@%@_M@rmP@%@eM@z@%@?SH)@@ʽ?R@@Jo,@R@@Oo,@RH)@@ǽ?k;@P@?җ@Q@?җ@Pƞ@?k;@Oƞ@?NH@@"K?A@@=?D@@??MH@@"K?M@f@1#>@f@<@f@>;L@6@=;=xK@6@o{K@6@ o;L@6@E;=GdC@4@ }ы@5@B ы@4@KFdC@3@}t64@kA-4e@kAFe@m@Ks64@l@*4? @A76)@A-8)@@-? @@7 @;AjKH?;A[(/H?w@a(/ @w@gK? AIBm6? AӖe6?H@ؖ?H@IB?w?+ A+ AAQ@I?w?P@R?HtA%.HtA%.@R?@N?eA14B{eA|(V{ø@(N?¸@4qr?DAS>yDA]?y@]?qr?@S>?AF,?`&A?`&5Y@"??4Y@F,?6?A:?@A%@@n)@ %@6?m)@<?M?|"AkӠ?F?|"AI@F?|AI@M?|AlӠ?h?%Aѵ?-F?%A*Z@,F?A/Z@h?Aѵ? g@M)AO?$.@M)A`X@%.@M AeX@ g@ M AP?M@0,AL?^i@0,AS=A@^i@+ AW=A@M@* AM?1@M0A<}?8@M0A4@8@HA7@1@GA=}?A@j3A?5y?="@j3A\S??"@eA_S?A@dAA5y?tK@6A$?@6A?@A?tK@A$?5N@U:A黐>$@U:Aξ$@UAξ5N@UA컐> ;I@=Aw@=A@A ;I@Aox=@%AAžN@%AAO@%!Ax=@%!Ažt+@DA(' JL@DA#KL@$A#t+@$A'' @GA:DZ@GA@0Z@'AD0@'A9Du?5^KAdKo?5^KAw)l?0^+Aw)u?/^+AdKך?RNAy4Ƚ>RNA>M.Aך?L.Ax4T?o.RAjBþo.RATſBþj.2AXſT?i.2A?UA2+lZYUA"+iY5A%+?5A.+lGx?XA^0=VXA>V8A>Gx?8Af0=t?f\AZ>^f\AIܤ?^fA?_AN=R?/.־_A @E.־?A @A??AO=R?DATA̢?$DATA $??R2?אR?ِ2r?r?+> rv?]}?rd`}?r?d+>ǁ?@?7?f@?'?f1~I(?ǁ?4~I7??X?}?A=\?rg+@ A=K=.tg+@?N=.}?#2?ˁ?;?c?ρ?uL@c?exL@#2?h;?ۄ?>"?܁?{?B"?Ԭ[@{?v׬[@ۄ?w܁?a @?o?6@?/V@6@3/V@a @9o?= @$c?˃?Qp@(c?<@Qp@gs<@= @ms˃?4@?2š?؏@?@؏@8@4@D2š?NC@ ?p1o?^@ ?5?`@s~+5?NC@~+p1o?p2L@>"@?? @@"@> @G=>p2L@G=??M@x @q>@z @@'/>M@'/>q>H@@)|@@&|@>&H@>)ˆ;@@׾}@@ }@c>ˆ;@]>׾gl)@#c@C&D@&c@ۖ&D@,>&gl)@(>C&@\3&@F=7@_3&@;0<7@|?@0@z?F?-@'J?-@I'?c4?M'?a4?'J,?3@0tPq>3@Y JOO?\ ,?HOO?0? :@i :@ڽ0j?ݽ?.j? ?DtA@eB#cGtA@ 5c? ??eBTv?~DH@}>*DH@9>*?9>Tv??}>Njv?O@/?SO@ A?St)?A?Njv?s)?/?x?U@\?iU@)x@}ɫ?-x@x?ɫ?\?޸?,\@?V>/\@R%<@N>\j?V%<@޸?[j???fc@LO?矦?ic@U@蟦? ?U@? ?LO?^{?Uj@[|?U@Uj@[@W@D?[@^{?C?[|?z@%q@?mmP@%q@cM@omP@K?fM@z@K??PH)@w@ʽ?R@w@No,@R@+?Po,@PH)@*?ʽ?k;@M~@?җ@P~@?җ@??k;@??KH@C˂@"K?A@E˂@C?C@@D?KH@@"K?M@`3@?#>@b3@<@f @;L@}@;=xK@@ozK@6@ o;L@6@;=EdC@@|ы@@@ ы@4@FEdC@4@|r64@k@$4e@k@Ee@n @Ir64@n @$4? @ӓ@76)@ӓ@-6)@'@-? @'@7 @;@cKG?;@[(/E?w.@_(/ @w.@cK?@IBh6?@Ӗ`6?H5@ז?H5@IB=w?+ @- @B+T<@H=w?T<@R?Ht@%.Jt@&.B@R?B@L?eܤ@4L{gܤ@(]{ƸI@(L?ƸI@4kr?D@S>yD@]?yP@]?kr?P@S>?@F,?`&@?`&8YW@$??8YW@F,?1?@;?@@%@C@q)^@!%@1?q)^@;?M?|@mӠ?F?|@I@F?d@I@M?d@mӠ?b?@ѵ?%F?@+Z@%F?k@0Z@b?k@ѵ?g@M@R? .@M@bX@!.@r@gX@g@r@R?M@0@O?^i@2@U=A@^i@Wjy@Y=A@M@Wjy@O?1@M@?}?8@O@6@8@H@9@1@H@?}?A@j@F5y?<"@l@`S?>"@e@cS?A@e@F5y?tK@@#$?@@?@@?tK@@#$?2N@U@>$@U@ξ$@U@ξ2N@U@> ;I@@2@ý@@@ ;I@@2x=@%@žM@%@M@%@x=@%@žq+@@!' HL@@#GL@@#q+@@!' @@9DZ@@?0Z@@B0@@9Do?5^@dKj?7^@w)e?0^@w)o?0^@dKК?R@u4>T@>Mƞ@К?Mƞ@u4T?o.@Bþq.@UſBþj.@UſT?j.@?@'+lmY@%+xY@!+?@'+l3x?@r0=V@>V@>3x?@r0=t?f@_>^f@Iܤ?^f@Mܤ?t?f@_>A?@Q=R?h.־@ @l.־ί@ @A?ί@Q=R?WO6WOWorldb%?b%??????A@pATXd|NTXtesselate8_8a.py \ϻ  DJDATA<g:\easyphp\www\jmsoler\util\blenderfile\py\tesselate8_8a.pyDATA TϻADATAT ϻDATATDл#eo SDATA,лile DATA,tлDATAt,,ѻx7ODATAttѻܦDATALѻDATAL$һKDATAܲL|һDATAܲ$һDATA$lܲ,ӻFREEDATAl$d~DATAl>FREEDATADOIDATAD\FREEDATAԴDӻFREEDATAԴӻ |DATAdԴ$ԻDATAdlԻDATAd4nderDATA<pactiDATA<oGRX\DATA̶<ԻDATA̶ԻDATA\̶Tջ DATA\ջDATA\ջDATA4ֻ DATA4|dֻ5DATA|ĸ4ֻDATAĸ |׻DATA TĸL׻"DATAT ׻FDATATػDATA,tػPDATA,tػDATAt,Dٻ8DATAtٻ"DATALڻ0DATAL|ڻDATAܻLڻgDATAܻ$lۻ9DATA$lܻۻFDATAl$\ܻ6DATAlܻ6DATAD,ݻDATADݻLDATAԽD ޻DATAԽ$@[DATAdԽ@DATAdADATAdLA^DATA<ADATA<DATA L IJDATAL    JDATA  L WDATA $! RDATA$!l! 2DATAl!!$! DATA!!l!T DATA!D"!DATAD""!ԵDATA""D"DATA"#"dDATA#d#"DATAd###DATA##d#<DATA#<$#DATA<$$#ܷ+DATA$$<$D$DATA$%$&DATA%\%$DATA\%%%<(DATA%%\%)DATA%4&% DATA4&|&%T3DATA|&&4&DATA& '|&DATA 'T'&l0DATAT'' 'Ի%DATA''T',)DATA',('DATA,(t('ܼ3DATAt((,(DDATA()t(DATA)L)('DATAL)))<DATA))L)%DATA)$*)ܾ(DATA$*l*)DDATAl**$*DATA**l*DATA*D+*<(DATAD++*DATA++D+DATA+,+D5DATA,d,+DATAd,,,$DATA,,d,L/DATA,<-,DATA<--,DATA--<-$DATA-.-|$DATA.\.- DATA\...,HDATA..\.HDATA.4/.<XDATA4/|/. DATA|//4/,'DATA/ 0|/4DATA 0T0/DATAT00 0DHDATA00T01DATA0,104\DATA,1t10,DATAt11,142DATA12t1DATA2L21DATAL222< DATA22L2,DATA2$32DATA$3l32D)DATAl33$3DATA33l3<DATA3D43|DATAD4431DATA44D4,DATA454DATA5d54%DATAd5554DATA55d5-DATA5<65(DATA<665\$DATA66<6!DATA676 DATA7\76d2DATA\777DATA77\7$(DATA7487`DATA48|87$DATA|8848|]DATA8 9|8DATA 9T98lDATAT99 9'DATA99T9 &DATA9,:9dDATA,:t:9'DATAt::,:=DATA:;t:DATA;L;:2DATAL;;;<DATA;;L;(DATA;$<;DATA$<l<;4%DATAl<<$<DATA<<l<DATA<D=<DATAD==<dDATA==D=$DATA=>=$DATA>d>=l DATAd>>> DATA>>d>"DATA>T$DATA$DATA??DATAQQDQdDATAQRQNDATARdRQ$MDATAdRRRDATARRdR DATARDATAt{{,{\0=DATA{|t{0EDATA|L|{L1DATAL|||1'DATA||L|1>DATA|$}|t2XDATA$}l}| 3*DATAl}}$}t3CDATA}}l}3&DATA}D~}D4 DATAD~~}4DATA~~D~4!DATA~~5DATAd~t5DATAd5DATAd$6DATA<|6DATA<6DATÀ<,7DATÀ7"DATA\̀7DATA\48DATA\8DATA48GDATA4|\98DATA|Ă49DATAĂ |:,DATA TĂ:DATAT :*DATATD;HDATA,;hDATA,tt<dDATAt, =DATAtT=DATAL=*DATAL>[DATA܅L>hDATA܅$T?dDATA$l܅?dDATAl$@ DATAl@*DATAD4ALDATADAhDATAԇDdBTDATAԇBDATAdԇ$CDATAd\CDATAdC#DATA<C#DATA<DD@DATẢ<DDDATẢ4EIDATA\̉E4DATA\$FDATA\\FDATA4FDATA4| GDATA|ċ4DGDATAċ |G4DATA TċHDATAT \H DATATHDATA,H DATA,t4I0DATAt,InDATAtDJDATAL|JDATALJ!DATA܎L,K*DATA܎$K"DATA$l܎KDATAl$DL3DATAlLDATADL0DATAD\M!DATAԐDM'DATAԐ N-DATAdԐtNDATAdN'DATAd$ODATA<lODATA<ODATA̒<$P$DATA̒|PDATA\̒P%DATA\Q?DATA\Q)DATA4Q&DATA4|TR2DATA|Ĕ4R%DATAĔ |SDDATA TĔS1DATAT SDATATLT%DATA,T0DATA,t U%DATAt,dUDATAtU(DATAL$V3DATALV%DATAܗLV3DATAܗ$LW%DATA$lܗW;DATAl$X.DATAlX!DATADX@DATADTY(DATAԙDYDATAԙZ%DATAdԙ\Z2DATAdZ4DATAd,[=DATA<[DATA<[%DATA̛<T\LDATA̛\,DATA\̛D].DATA\]?DATA\$^%DATA4|^DATA4|^&DATA|ĝ4_!DATAĝ |t_DATA Tĝ_xDATAT t`DATAT`DATA,L!"DATA,t!1DATAt, "1DATAtt")DATAL"6DATALD#.DATAܠL#FDATAܠ$$$+DATA$lܠ$~DATAl$D%DATAl%+DATAD&BDATAD|&UDATAԢD' DATAԢ\'UDATAdԢ'(DATAdL(DATAd(5DATA<(DATA<T))DATA̤<)DATA̤*#DATA\̤l*3DATA\*3DATA\<+3DATA4+3DATA4| ,(DATA|Ħ4t,IDATAĦ |,DATA TĦD-HDATAT -HDATATT.:DATA,.:DATA,tD/DATAt,/ DATAt/4DATALL0-DATAL00DATAܩL1DATAܩ$t14DATA$lܩ13DATAl$D2%DATAl25DATAD35DATADl36DATAԫD36DATAԫ<4*DATAdԫ4KDATAd,5DATAdt5JDATA<5JDATA<6DATA̭<6=DATA̭D7=DATA\̭7DATA\8DATA\l8DATA480DATA4|9'DATA|į4t93DATAį |9+DATA TįD:`DATAT :DATAT4;<DATA,;'DATA,t<DATAt,L<:DATAt</DATAL,='DATAL=9DATAܲL=@DATAܲ$t>9DATA$lܲ>,DATAl$T?MDATAl$DATAD|"DATAD"DATAԴD,DATAԴ4DATAdԴ#DATAdD#DATAd!DATA<:DATA<l:DATA̶<@DATA̶\.DATA\̶4DATA\,DATA\QDATA4 (DATA4|t)DATA|ĸ4?DATAĸ |DATA Tĸ$<DATAT DATAT)DATA,\DATA,tADATAt,,&DATAt;DATAL$DATALTDATAܻL8DATAܻ$ DATA$lܻ\DATAl$DATAlDATAD4DATADlDATAԽD'DATAԽ)DATAdԽ DATAd DATAd)DATA<|*DATA< DATA̿<,DATA̿!DATA\̿ADATA\TADATA\GDATA4D DATA4|DATA|4)DATA |L DATA T1DATAT  DATATDDATA,7DATA,t0DATAt,lIDATAt4DATAL\DATALDATAL%DATA$4DATA$l)DATAl$ DATAlLDATADDATADDATAD4DATADATAdDATAd 'DATAddDATA<DATA<DATA<,DATAdDATA\DATA\DATA\DATA4dDATA4|DATA|4 DATA |LDATA TDATAT DATAT$DATA,lDATA,tDATAt,DATAtTDATAL  DATALTDATALDATA$DATA$l DATAl$tDATAlDATAD DATADLDATADDATA\0DATA\004%DATA00\0DATA0410 DATA41|10DATA|1141TDATA1 2|1 DATA 2T21DATAT22 2\$DATA22T2&DATA2,32 &DATA,3t32d?DATAt33,3DATA34t3$DATA4L43\ DATAL444DATA44L4qDATA4$54uDATA$5l54,DATAl55$5dDATA55l53DATA5D65DATAD665L"DATA66D69DATA676DATA7d76T^DATAd777}DATA77d7DATA7<87\{DATA<887DATA88<8LDATA898DATA9\98 DATA\999$ DATA99\9l DATA94:9DATA4:|:9DATA|::4:D DATA: ;|: DATA ;T;: DATAT;; ; DATA;;T;dDATA;,<;DATA,<t<;&DATAt<<,<<DATA<=t<DATA=L=<DATAL===DATA==L=DATA=$>=tDATA$>l>=DATAl>>$>DATA>>l>DATA>D?>DATAD??>DATA??D? DATA?,? 'DATA,t?4 DATAt,  DATAtT DATAL, DATALd DATAܯL\ DATAܯ$TDATA$lܯLDATAl$DATAl|DATADtDATADlDATAԱDDATAԱDATAdԱDDATAdDATAd DATA<DATA<DATA̳<DATA̳t}DATA\̳,DATA\DATA촻\DATA촻4DATA4|촻<|DATA|ĵ4~DATAĵ | DATA Tĵ~DATAT DATA䶻TDATA䶻,LDATA,t䶻DATAt,DATAt1DATAL\DATALqDATAܸL\DATAܸ$DATA$lܸlDATAl$ pDATAl,!DATADd!DATAD"DATAԺDT" DATAԺ"mDATAdԺD#DATAd|# DATAd#*DATA<,$DATA<t$(DATA̼<$DATA̼$% DATA\̼l%DATA\%rDATA콻\L&DATA콻4&DATA4|콻&"DATA|ľ4'DATAľ |l'fDATA Tľ( DATAT L(fDATA俻T(DATA俻,)DATA,t俻T)DATAt,)DATAt)'DATAL<*DATALt*DATAL*DATA$»+DATA$»l»L+DATAl»»$»+DATA»»l»+DATA»Dû»,DATADûû»\,DATAûûDû,DATAûĻû,DATAĻdĻûD-DATAdĻĻĻ-DATAĻĻdĻ-DATAĻ<ŻĻ,. DATA<ŻŻĻ.DATAŻŻ<Ż.-DATAŻƻŻD/ DATAƻ\ƻŻ/DATA\ƻƻƻ/DATAƻƻ\ƻ$@DATAƻ4ǻƻ\@ DATA4ǻ|ǻƻ@DATA|ǻǻ4ǻ@DATAǻ Ȼ|ǻDADATA ȻTȻǻADATATȻȻ ȻADATAȻȻTȻDATAD̻̻˻tFDATA̻̻D̻FDATA̻ͻ̻$G DATAͻdͻ̻lGDATAdͻͻͻG!DATAͻͻdͻHDATAͻ<λͻdH DATA<λλͻHDATAλλ<λHDATAλϻλLIDATAϻ\ϻλI DATA\ϻϻIDATAϻ######################DATA ϻ# wire and tesselate projectr %DATA$Dл# jean-michel soler january/octoberDATAл# 2000DATAл######################EDATA,ѻimport BlenderFDATAtѻfrom Blender import ObjectDATA ѻfrom Blender.Object import *REEDATA$һfrom Blender import NMesh DATA|һfrom Blender.NMesh import *DATAһfrom Blender.Draw import *DATA,ӻfrom Blender.BGL import *DATAd~DATA>DATAOREEDATA\try:REEDATAӻ import whrandomDATA$ӻ from whrandom import whrandomREEDATA$Ի g=whrandom()DATAlԻ n_=whrandom():\|DATA4 DATApexcept:DATAo DATAԻ import randomDATA Ի from random import RandomDATATջ g=Random()DATAջ n_=Random()DATAջDATA ֻimport mathDATA8dֻfrom math import cos, sin, pi, sqrt, acos, asin, atanDATAֻDATA׻fr= { 'Lang':'Eng',DATA$L׻ 'EpXY':"Epaisseur XY : ",DATAH׻ 'EpXY_doc':"Etablit l'epaisseur a partir du bord de la face",DATA ػ 'EpZ':"Epaisseur Z",DATATtػ 'EpZ_doc':"indique s'il faut calculer lepaisseur a partir de la face" ,DATAػ 'NgZ':"Neg Z",DATA<Dٻ 'NgZ_doc':"inverse la direction de la normale",DATA$ٻ 'FintTG':"FaceinterneTG",DATA4ڻ 'FintTG_doc':"Ajoute une face interne",DATA |ڻ 'EpQZ':"Epais Z : ",DATAhڻ 'EpQZ_doc':"Etablit l'epaisseur a partir de la surface de la face dans le sens de la normale",DATA<lۻ 'FrgT':"Fragmentation totale, face pour face ",DATAHۻ 'FrgT_doc':"Effectue l'equivalent de split sur tout le mesh",DATA8\ܻ 'T1':"Fragmention : explose l'objet courant",DATA8ܻ 'T2':"sans effectuer les autres operations.",DATA,ݻ 'Act':"Action",DATAPݻ 'iteration':"boucle sur cette valeur. Reset to non at the end of ",DATA ޻DATA\$@ 'random_doc':"renvoie une valeur d epaissour au hasard entre 0.0 et epaisseur Z" ,DATA @ 'random':"Hasard Z" ,DATAADATA`LA 'randomxy_doc':"renvoie une valeur d epaissour au hasard entre 0.0 et epaisseur XY" ,DATAA 'randomxy':"XY" ,DATApoints de chaque faceDATA\< #------------------------------------------------------- DATA$ for v in face.v:DATA(, for n0 in range(3):DATA8 accu2[n0]=accu2[n0]+v.co[n0]DATA n0=0DATALD #-------------------------------------------------------DATA4 #centre geometrique de la facetteDATA`4 #------------------------------------------------------- DATA0 for n0 in range(len(accu2)):DATA44 accu2[n0]=accu2[n0]/(lgf1*1.0)DATA DATA  return accu2DATA< DATA0def calcul_Z_deplacement( face, B, MaxIter):DATA DATA,D if B.DistanceTG.val==1.0:DATA  dv=face.vDATA@ a,b,c = EquationPlan(dv[0],dv[1],dv[2])DATA| DATA4 if not B.RandomDistance.val:DATA , g0=1.0DATA  else: DATA( g0=g.random()DATA4 DATA0 if B.RandomNeg.val==1.0:DATA, n_0= n_.random()DATA(\ if n_0>=0.5:DATA$ g0=-g0DATA  DATA4d g0=g0*B.Iteration.val/MaxIterDATA DATA,$ if B.DistNegTG.val:DATAd locZ=[-a*B.distance.val*g0,-b*B.distance.val*g0,-c*B.distance.val*g0]DATA$ else:DATA`| locZ=[a*B.distance.val*g0,b*B.distance.val*g0,c*B.distance.val*g0]DATA DATAl else:DATA( locZ=[0.0,0.0,0.0]DATA(  a,b,c=0.0,0.0,0.0DATAd DATA( if B.RandomXY.val==1.0:DATA@ epais2=B.epaisseur.val*g.random()DATA else:DATA4 epais2=B.epaisseur.valDATA< DATA, return locZ,epais2,a,b,cDATADATA(4def rotation_aroundxyz(u,v0,w,x,y,z):DATA u=u*pi/180.0DATA v=v0*pi/180.0DATA w=w*pi/180.0 DATAd if u!=0.0: ##x-axis:DATA( y1 = y * cos(u) - z * sin(u)DATA( z1 = z * cos(u) + y * sin(u)DATAl z=z1DATA y=y1DATA$ if v!=0.0: ##y-axis:DATA(T z1 = z * cos(v) - x * sin(v)DATA( x1 = x * cos(v) + z * sin(v)DATA z=z1DATAL x=x1 DATA if w!=0.0: ##z-axis:DATA( x1 = x * cos(w) - y * sin(w)DATA(D y1 = y * cos(w) + x * sin(w)DATA x=x1DATA y=y1 DATA, return x,y,z DATAtDATADATA def ArbitraryRotate(p,theta,r):DATA< q = [0.0,0.0,0.0] DATA  costheta = cos(theta*pi/180)DATA  sintheta = sin(theta*pi/180)DATA<D q[0] += (costheta + (1 - costheta) * r[0] * r[0]) * p[0]DATAD q[0] += ((1 - costheta) * r[0] * r[1] - r[2] * sintheta) * p[1]DATAD4 q[0] += ((1 - costheta) * r[0] * r[2] + r[1] * sintheta) * p[2]DATAD q[1] += ((1 - costheta) * r[0] * r[1] + r[2] * sintheta) * p[0]DATA<$ q[1] += (costheta + (1 - costheta) * r[1] * r[1]) * p[1]DATAD q[1] += ((1 - costheta) * r[1] * r[2] - r[0] * sintheta) * p[2]DATAD q[2] += ((1 - costheta) * r[0] * r[2] - r[1] * sintheta) * p[0]DATAD q[2] += ((1 - costheta) * r[1] * r[2] + r[0] * sintheta) * p[1]DATA< q[2] += (costheta + (1 - costheta) * r[2] * r[2]) * p[2]DATA| return q[0],q[1],q[2]DATADATA( ## ---------------------------------DATA,d## grands mercis richie pour son aide DATA$## sur les deux fonctions suivantesDATA($## ---------------------------------DATA|def pv(a,b,c):DATA  c[0]=a[1]*b[2]-a[2]*b[1]DATA  c[1]=a[2]*b[0]-a[0]*b[2]DATA t c[2]=a[0]*b[1]-a[1]*b[0]DATA return cDATADATALw=[0.0,0.0,0.0]DATA axeloc=[]DATAaccu3=[0.0,0.0,0.0]DATA$DATA\def rxyn(no):DATA if no[0]!=0.0:DATA, ang=math.atan(no[1]/no[0])+pi/2DATA$T X=[cos(ang),sin(ang),0]DATA  else:DATA X=[0.0,0.0,0.0]DATAL DATA if no[0]<0:DATA$ X[0],X[1]=-X[0],-X[1]DATA$ Y=pv(X,no,w)DATAl return(X,Y,no)DATA DATA0def sommet_connectes(face, n3, dern_long): DATA@T global liste_des_sommets, liste_dordre_des_sommets DATA DATAD if face.v[n3+1].index not in liste_des_sommets.keys():DATA< liste_des_sommets[face.v[n3+1].index]=[]DATAD liste_dordre_des_sommets[face.v[n3+1].index]=[]DATA| DATAX if dern_long[1]+n3+1 not in liste_des_sommets[face.v[n3+1].index]: DATAPL liste_des_sommets[face.v[n3+1].index].append(dern_long[1]+n3+1)DATADATAD  if face.v[n3].index not in liste_des_sommets.keys():DATA8 liste_des_sommets[face.v[n3].index]=[]DATA@ liste_dordre_des_sommets[face.v[n3].index]=[]DATAdDATAP if dern_long[1]+n3 not in liste_des_sommets[face.v[n3].index]: DATAP$ liste_des_sommets[face.v[n3].index].append(dern_long[1]+n3)DATA DATA$def ordre_des_sommets(s1,f1,f0):DATA@L global liste_des_sommets, liste_dordre_des_sommetsDATAt liste_dordre_des_sommets[s1].append([liste_des_sommets[s1].index(f0),liste_des_sommets[s1].index(f1)])DATA l DATA\def creation_facette(n1,me,me2,face,accu2,epais2,locZ,liste_des_facesbis,a,b,c,recursion):DATAPL global axeloc, B, liste_des_sommets, liste_dordre_des_sommetsDATAP global liste_des_segments, liste_des_faceseg,liste_des_seglinkDATAD\ global liste_reverseg, liste_des_facescchanfreinDATA DATA  limite=0.0001DATAt DATA( #calculer la positionDATA4 if B.matrix['use_matrice'].val==0:DATA$| for v in face.v:DATA@ #appel de la methode d'ajout de pointDATA@L v1= Blender.NMesh.Vert(0.0, 0.0, 0.0)DATAL for n0 in range(len(accu2)): DATATL v1.co[n0]=(v.co[n0]-accu2[n0])*epais2+accu2[n0]+locZ[n0]DATA4 #ajouter le point la listeDATA,< me.verts.append(v1)DATA, me2.verts.append(v1)DATA  else:DATALT #creation de nouveaux points l'interieur de la facetteDATAT m=[[B.matrix['Sx'].val,B.matrix['Sy'].val,B.matrix['Sz'].val],DATATd [B.matrix['Rx'].val,B.matrix['Ry'].val,B.matrix['Rz'].val],DATA\ [B.matrix['Rnz'].val, B.matrix['Rnx'].val,B.matrix['Rny'].val]] DATA  abc=[a,b,c]DATA8 coeff=1.0/B.matrix['recursion'].valDATA D #print coeffDATA8 rz= coeff*m[2][0] DATA( rx= coeff*m[2][1]DATA(\ ry= coeff*m[2][2]DATA DATA$ u= coeff*m[1][0]DATA(T v0= coeff*m[1][1]DATA$ w= coeff*m[1][2]DATA DATA$L #print recursionDATA` if recursion==B.matrix['recursion'].val-1 or B.matrix['recursion'].val==1:DATA@< axeloc=rxyn(abc) DATA DATA$ for v in face.v:DATA@T #appel de la methode d'ajout de pointDATA@ v1= Blender.NMesh.Vert(0.0, 0.0, 0.0)DATAD DATAL for n0 in range(len(accu2)): DATAD$ v1.co[n0]=(v.co[n0]-accu2[n0])*epais2DATA  DATA8 if B.matrix['rotGlobal'].val==1:DATAt\ accu3[0], accu3[1], accu3[2] = rotation_aroundxyz(u,v0,w,accu2[0], accu2[1], accu2[2])DATA DATA0\ if abs(m[2][0])>=limite:DATAl v1.co[0],v1.co[1],v1.co[2]=ArbitraryRotate([v1.co[0],v1.co[1],v1.co[2]],rz,abc)DATAl  DATAH  if abs(m[2][1])>=limite or abs(m[2][2])>=limite:DATAp<  v1.co[0],v1.co[1],v1.co[2]=ArbitraryRotate([v1.co[0],v1.co[1],v1.co[2]],rx,axeloc[0])DATAp  v1.co[0],v1.co[1],v1.co[2]=ArbitraryRotate([v1.co[0],v1.co[1],v1.co[2]],ry,axeloc[1])DATA  DATA4  v1.co[0],v1.co[1],v1.co[2]DATAL  DATA8  if B.matrix['rotGlobal'].val==0:DATAl  v1.co[0],v1.co[1],v1.co[2]=rotation_aroundxyz(u,v0,w,v1.co[0],v1.co[1],v1.co[2])DATAX  for n0 in range(len(accu2)): DATAX, v1.co[n0]=v1.co[n0]+accu2[n0]+(locZ[n0]+m[0][n0])*coeffDATA  else: DATAx  v1.co[0],v1.co[1],v1.co[2]=rotation_aroundxyz(u*2.0,v0*2.0,w*2.0,v1.co[0],v1.co[1],v1.co[2])DATAX for n0 in range(len(accu2)): DATAX< v1.co[n0]=v1.co[n0]+accu3[n0]+(locZ[n0]+m[0][n0])*coeffDATA  DATA4 #ajouter le point la listeDATA, me.verts.append(v1)DATA, me2.verts.append(v1)DATAT DATA n0=0DATA DATAP, #ne pas depasser la fin de la liste des points de cette facetteDATA0 n2=len(face.v) DATA$ #ajouter une faceDATA,t f1= Blender.NMesh.Face()DATA@ #cette face est compose des sommets normauxDATA,T f1.v.append(face.v[n2-1])DATA8 f1.v.append(face.v[0]) DATA0$ #et des nouveaux sommet ajoutDATA4 f1.v.append(me.verts[dern_long[1]])DATA< f1.v.append(me.verts[dern_long[1]+n2-1])DATAl DATA( f1.uv=uv[0:len(f1.v)]DATA  f1.flag=1DATAd DATA@ # le segment qui contrle le chanfrein est doncDATAH$ # sur la face normale DATA8 me2.faces.append(f1) DATA< liste_des_facesbis.append(len(me2.faces)-1)DATA| DATA@ if B.Chanfrein.val==1 or B.Enveloppe.val==1:DATAH< fz= [face.v[0].index, face.v[n2-1].index]DATA< if fz in liste_des_segments:DATA, liste_des_seglink[liste_des_segments.index(fz)].append([len(me2.faces)-1, dern_long[1]+n2-1, dern_long[1]])DATA DATA<< #boucler sur les points de cette facetteDATA( for n3 in range(n2-1):DATA<  #creation des facettes supplmentaires DATA0 f1= Blender.NMesh.Face()DATA DATA,D f1.v.append(face.v[n3])DATA0 f1.v.append(face.v[n3+1])DATA  DATA@l  f1.v.append(me.verts[dern_long[1]+n3+1])DATA<  f1.v.append(me.verts[dern_long[1]+n3])DATA,\! f1.uv=uv[0:len(f1.v)]DATA ! f1.flag=1 DATA" DATADd" if (n3==0) and B.matrix['use_matrice'].val==0: DATA," me2.faces[n1]=f1DATALD# if me2.faces.index(f1) not in liste_des_facesbis:DATAL# liste_des_facesbis.append(me2.faces.index(f1))DATAT$ else:DATAH$ me2.faces.append(f1) DATAD$% liste_des_facesbis.append(len(me2.faces)-1)DATA% DATAT% if B.Digger.val==1 or B.Chanfrein.val==1 or B.Enveloppe.val==1:DATAT|& sommet_connectes(face, n3, dern_long) DATA' DATAD\' if B.Chanfrein.val==1 or B.Enveloppe.val==1:DATAH' fz= [face.v[n3].index, face.v[n3+1].index]DATA<L( if fz in liste_des_segments:DATA( liste_des_seglink[liste_des_segments.index(fz)].append([me2.faces.index(f1),dern_long[1]+n3+1, dern_long[1]+n3])DATA) try:DATA4) if B.matrix['segment'].val==0:DATA@<* del me2.faces[me2.faces.index(face)]DATA* except:DATA* passDATAT+ DATA+ return n2DATA+ DATA<<,def Face_interne(n2,me,me2,liste_des_facesbis,dern_long):DATA$, #------------------DATA< - # boucler sur les points de cette facetteDATA4- # pour obturer l'ouverture restanteDATA(- #-------------------DATA4D. global B,liste_des_facescchanfreinDATA,. if B.FaceinterneTG.val :DATAD/ f1= Blender.NMesh.Face() DATA(/ for n3 in range(n2):DATA@/ #creation des facettes supplmentaires DATA@\0 f1.v.append(me.verts[dern_long[1]+n3])DATAH0 f1.uv=[(0.0,0.0), (1.0,0.0), (1.0,1.0), (0.0,1.0)]DATA L1 ##f1.flag=1DATA(1 me2.faces.append(f1)DATA@1 liste_des_facesbis.append(len(me2.faces)-1)DATA\t2 liste_des_facescchanfrein.append(len(me2.faces)-1) DATA, 3 dern_long[1]=len(me.verts)DATADt3 face=me2.faces[len(me2.faces)-1] DATA(3 return dern_long, faceDATAD4 DATA4DATA$4def creation_recursive(recursion,DATA 5 face,DATAt5 me,DATA 5 me2,DATA $6 n1,\DATA|6 B,DATA 6 a,b,c,\DATA,7 n2,DATA$7 dern_long,DATA 7 MaxIterDATA48 ):DATA8 DATAH8 global liste_des_segments, liste_des_faceseg, liste_des_seglinkDATA<\9 global liste_reverseg, liste_des_facescchanfreinDATA 9 DATA0: if B.matrix['use_matrice'].val==1: DATA: if recursion==1:DATA,: accu2=centre_facette(face)DATALD; locZ,epais2,a,b,c= calcul_Z_deplacement( face,B,MaxIter)DATAl; n2=creation_facette(n1,me,me2,face,accu2,epais2,locZ,liste_des_facesbis,a,b,c,recursion)DATAht< dern_long,face=Face_interne(n2, me,me2,liste_des_facesbis,dern_long) DATA = else:DATA T= recursion-=1DATA,= accu2=centre_facette(face)DATA\> locZ,epais2,a,b,c= calcul_Z_deplacement( face, B, MaxIter ) DATAl> n2=creation_facette(n1,me,me2,face,accu2,epais2,locZ,liste_des_facesbis,a,b,c,recursion)DATAhT? dern_long,face=Face_interne(n2, me,me2,liste_des_facesbis,dern_long) DATAh? creation_recursive( recursion, face, me, me2, n1, B, a,b,c, n2, dern_long, MaxIter )DATA@ else:DATA,@ accu2=centre_facette(face)DATAP4A locZ,epais2,a,b,c= calcul_Z_deplacement( face, B, MaxIter )DATAlA n2=creation_facette(n1,me,me2,face,accu2,epais2,locZ,liste_des_facesbis,a,b,c,recursion)DATAXdB dern_long,face=Face_interne(n2, me,me2,liste_des_facesbis,dern_long)DATABDATA$CDATA\C DATA$C#fonction de fractionnement de faceDATA$Cdef tesselate(meb,nom,ob, MaxIter):DATADDD global dern_long,n0,p0,n,accu1,accu2, n_,n_0,liste_des_facesDATAHD global liste_des_facesbis, liste_des_sommets, liste_des_segmentsDATAL4E global liste_des_faceseg, liste_des_seglink, liste_dordre_des_sommetsDATA8E global liste_reverseg, liste_des_facescchanfreinDATA$FDATA \F me2=Blender.NMesh.GetRaw()DATA F me=Blender.NMesh.GetRaw()DATA G DATA DG if B.SaveOriginal.val==1:DATA8G Blender.NMesh.PutRaw(meb,'SaveOriginal')DATA H me=meb DATA \H else:DATAH me=mebDATAH DATA44I if B.Chanfrein.val==1 or B.Enveloppe.val==1:DATApI liste_des_segments,liste_des_faceseg,liste_des_seglink,liste_reverseg=doc_segments(me) DATADJDATA |J if B.SplitTotalTG.val==0 :DATA$J #--------------------DATA,,K # copie de la liste de sommetsDATA$K #-------------------- DATA K for v in me.verts:DATA4DL v1= Blender.NMesh.Vert(0.0,0.0,0.0)DATAL v1=vDATA4L me2.verts.append(v1) DATA$\M #--------------------DATA(M # copie de la liste de faceDATA0 N #-------------------- DATA tN for f in me.faces:DATA(N f1=Blender.NMesh.Face()DATA$O f1=fDATA lO f1.uv=f.uv[:]DATAO f1.flag=0DATA($P me2.faces.append(f1)DATA|P DATA(P #------------------------DATA@Q #reperer la fin des listes de points et de facettesDATA,Q #------------------------ DATA(Q dern_long[0]=len(me.faces)DATA4TR dern_long[1]=len(me.verts) DATA(R #------------------------DATAHS #accumulateur pour trouver le centre geometrique du meshDATA4S #------------------------ DATA S lgf=len(me.faces)DATA(LT #------------------------DATA4T # faire la liste des face traiter:DATA( U #------------------------DATAdU # Toutes...DATA,U if B.SelectedFacesTG.val==0:DATA4$V liste_des_faces=range(dern_long[0])DATA(V #------------------------DATA4V #... ou seulement celles selectionnees DATA(LW #------------------------DATA<W elif me.hasFaceUV()==1 and liste_des_faces==[]:DATA0X faces=meb.getSelectedFaces()DATA$X for f in faces:DATADX liste_des_faces.append(meb.faces.index(f)) DATA,TY #print liste_des_facesDATAY DATA(Z #------------------------DATA4\Z # ... ou si on est en train de repeterDATA8Z # l'opration plusieurs fois sur la memeDATA@,[ # serie de faces ce qui justifie l'utilisation deDATA [ # list_des_facebisDATA([ #------------------------DATAPT\ elif B.SelectedFacesTG.val!=0 and len(liste_des_faces)!=0: DATA0\ for f in liste_des_facesbis:DATA0D] liste_des_faces.append(f)DATA@] #print '...',liste_des_faces,liste_des_facesbisDATA($^ liste_des_facesbis=[]DATA|^ DATA(^ for n1 in liste_des_faces:DATA$_ face=me.faces[n1]DATAt_ n2=0DATA|_ creation_recursive( B.matrix['recursion'].val, face, me, me2, n1, B, a,b,c, n2, dern_long, MaxIter)DATAt` DATA ` if B.Digger.val==1:DATA$L! accu1=[0.0,0.0,0.0]DATA4! for s in liste_des_sommets.keys():DATA4 " if len(liste_des_sommets[s])>2:DATA,t" if B.PDigger.val==1:DATA8" for v in liste_des_sommets[s]:DATA0D# for n0 in range(3):DATAH# accu1[n0]= accu1[n0]+me2.verts[v].co[n0]DATA,$$ for n0 in range(3):DATA$ me2.verts[s].co[n0]+=(me2.verts[s].co[n0]-accu1[n0]/float(len(liste_des_sommets[s])))*B.NDigger.valDATAD% else:DATA,% for n0 in range(3):DATAD& if B.NDigger.val/abs(B.NDigger.val)>0:DATAX|& me2.verts[s].co[n0]+=me2.verts[s].co[n0]*B.NDigger.valDATA$' else:DATAX\' me2.verts[s].co[n0]-=me2.verts[s].co[n0]*B.NDigger.valDATA,' accu1=[0.0,0.0,0.0]DATAL( DATA8( if B.Enveloppe.val==1 or B.Chanfrein.val:DATA ( excludeSlink=[]DATA,T) for f in liste_des_seglink:DATA ) if len(f)>1:DATA$* f1=NMesh.Face()DATA4l* f1.v.append(me2.verts[f[0][1]])DATA4* f1.v.append(me2.verts[f[0][2]])DATA4<+ f1.v.append(me2.verts[f[1][2]])DATA4+ f1.v.append(me2.verts[f[1][1]])DATA, , me2.faces.append(f1)DATALt, liste_des_facescchanfrein.append(me2.faces.index(f1))DATA, DATALD- s1=liste_des_segments[liste_des_seglink.index(f)][1]DATAL- s2=liste_des_segments[liste_des_seglink.index(f)][0]DATA<T. ordre_des_sommets(s1, f[1][1],f[0][1])DATA<. ordre_des_sommets(s2, f[0][2],f[1][2])DATAD/ DATA$/ elif len(f)!=0:DATA8/ tlink=liste_des_seglink.index(f) DATA0L0 Slink=liste_reverseg[tlink]DATA40 if tlink not in excludeSlink :DATA1 try: DATA8t1 f2=liste_des_seglink[Slink[1]]DATA41 excludeSlink.append(Slink[1])DATA(D2 f1=NMesh.Face()DATA82 f1.v.append(me2.verts[f[0][1]])DATA83 f1.v.append(me2.verts[f[0][2]])DATA8l3 f1.v.append(me2.verts[f2[0][1]])DATA83 f1.v.append(me2.verts[f2[0][2]])DATA,<4 me2.faces.append(f1)DATAL4 liste_des_facescchanfrein.append(me2.faces.index(f1))DATA,5 DATALt5 s1=liste_des_segments[liste_des_seglink.index(f)][1]DATAL5 s2=liste_des_segments[liste_des_seglink.index(f)][0]DATA6 DATA@6 ordre_des_sommets(s1, f[0][1],f2[0][2])DATA@D7 ordre_des_sommets(s2, f[0][2],f2[0][1])DATA7 except:DATA8 passDATAl8 DATA48 for s in liste_des_sommets.keys():DATA(9 accu1=[0.0,0.0,0.0]DATA4t9 for s3 in liste_des_sommets[s]:DATA,9 for n0 in range(3):DATAdD: accu1[n0]+=me2.verts[s3].co[n0]*1.0/float(len(liste_des_sommets[s]))DATA : DATA@4; v=NMesh.Vert(accu1[0],accu1[1],accu1[2])DATA(; me2.verts.append(v)DATA< DATA<L< for s3 in liste_dordre_des_sommets[s]:DATA0< s4=liste_des_sommets[s]DATA(,= f1=NMesh.Face()DATA<= f1.v.append(me2.verts[s4[s3[1]]])DATAD= f1.v.append(me2.verts[len(me2.verts)-1])DATA<t> f1.v.append(me2.verts[s4[s3[0]]])DATA0> me2.faces.append(f1)DATAPT? liste_des_facescchanfrein.append(me2.faces.index(f1))DATA$ DATA$| if B.Chanfrein.val==1:DATA$ me3=NMesh.GetRaw()DATA, index=[]DATA8 for f0 in liste_des_facescchanfrein:DATA$ f=me2.faces[f0]DATA$D f1=NMesh.Face()DATA$ for v in f.v:DATA< if me2.verts.index(v) not in index:DATA<l index.append(me2.verts.index(v))DATAD v1=NMesh.Vert(v.co[0],v.co[1],v.co[2])DATA0\ me3.verts.append(v1)DATA8 f1.v.append(me3.verts[-1])DATA , else:DATAT f1.v.append(me3.verts[index.index(me2.verts.index(v))])DATA,  me3.faces.append(f1)DATA,t ##print len(index), indexDATA? DATA DATA@$ elif B.SplitTotalTG.val==1 and B.SelectedFacesTG.val==0:DATA  for f in me.faces:DATA, f1=Blender.NMesh.Face() DATA \ for v in f.v:DATAD v1= Blender.NMesh.Vert(v.co[0],v.co[1],v.co[2])DATA(, me2.verts.append(v1)DATA< f1.v.append(me2.verts[len(me2.verts)-1]) DATA( me2.faces.append(f1)DATAT DATA< elif B.SplitTotalTG.val==0 and B.SelectedFacesTG==1:DATA passDATA\ DATA if BLVERSION>=228:DATA me2.mode=meb.modeDATA4 DATA l if nom.find('.tessel')!=-1:DATA( if B.Chanfrein.val==1: DATA, Blender.NMesh.PutRaw(me3,nom,1)DATA else:DATA  DATA, Blender.NMesh.PutRaw(me2,nom,1)DATA,| SelOb= Blender.Object.GetSelected()DATA  DATA, for obj in SelOb:DATA$ if obj.data.name==nom:DATAD obj.LocX,obj.LocY,obj.LocZ=ob.LocX,ob.LocY,ob.LocZDATADT obj.RotX,obj.RotY,obj.RotZ=ob.RotX,ob.RotY,ob.RotZDATAH obj.SizeX,obj.SizeY,obj.SizeZ=ob.SizeX,ob.SizeY,ob.SizeZDATA D else:DATA  if B.Chanfrein.val==1:DATA, Blender.NMesh.PutRaw(me3,nom)DATAL else:DATA4 Blender.NMesh.PutRaw(me2,nom) DATA DATADdef testselect(MaxIter):DATA8 global liste_des_faces,liste_des_facesbis,BLVERSIONDATA4 global liste_des_sommets, liste_des_segmentsDATALl global liste_des_faceseg, liste_des_seglink, liste_dordre_des_sommetsDATA8 global liste_reverseg, liste_des_facescchanfreinDATA\DATA liste_des_faces=[]DATA( liste_des_facesbis=[] DATA4 liste_des_sommets={}DATA, liste_dordre_des_sommets={} DATA$ liste_des_facescchanfrein=[]DATALDATA liste_des_segments=[]DATA liste_des_faceseg=[]DATA4 liste_des_seglink=[]DATA liste_reverseg=[]DATA DATA(  ob= Blender.Object.GetSelected() DATAdDATA if len(ob)<1:DATA returnDATA, DATAd ob=ob[0] DATADATADATA if BLVERSION==223:DATAd me=ob.dataDATA materials=me.matsDATA  else:DATAL me=ob.getData()DATA  materials=me.materialsDATADATA$ nom=me.nameDATAl DATA if len(materials)>0:DATA  nom=nom+'.tessel'DATAT print 'cet objet possede des materiaux, la copie directe en remplacment ne peut pas se faire. un nouvelle objet sera cr.'DATA  DATAT if (me==None):DATA returnDATA DATA$ tesselate(me,nom,ob,MaxIter)DATAt ob.makeDisplayList()DATADATA def draw():DATA L global B, liste_des_sommetsDATA DATA  size=Buffer(GL_FLOAT, 4)DATA(4 glGetFloatv(GL_SCISSOR_BOX, size)DATA size= size.listDATA ligne=18DATA DATA T glColor3f(0.7, 0.7, 0.7)DATA$ glClear(GL_COLOR_BUFFER_BIT)DATA  glColor3f(0.1, 0.1, 0.15)DATA(\ glRasterPos2f(20, size[3]-ligne)DATA( Text("Fragmentation et Extrusion")DATA(  glRasterPos2f(20, size[3]-ligne*2)DATA@d Text("Jean-michel Soler, Octobre 2000-octobre 2003")DATA l=int(B.lang.val)DATA$DATA\ ligne=20DATADATAt B.Enveloppe=Toggle(lg[l]['Envel'], 6, 150, size[3]-ligne*10, 65, 18, B.Enveloppe.val, lg[l]['Envel_doc']) DATAx B.Chanfrein=Toggle(lg[l]['Chanfrein'], 4, 212, size[3]-ligne*10, 65, 18, B.Chanfrein.val, lg[l]['Chanfrein_doc'])DATA,DATAd #boutons de sortieDATA4 Button("Exit", 1, 20, size[3]-ligne*10, 60, 18)DATADATA$L #bouton de cration de la formeDATA< Button(lg[l]['Act'], 3, 85, size[3]-ligne*10, 60, 18)DATA DATA`T B.lang = Toggle( lg[l]['Lang'], 2, 172, size[3]-ligne, 44, 18, B.lang.val )DATA B.SaveOriginal = Toggle( lg[l]['SaveOrig'], 2, 218, size[3]-ligne, 105, 18, B.SaveOriginal.val ,lg[l]['SaveOrig_doc'] )DATA B.epaisseur = Slider( lg[l]['EpXY'], 2, 20, size[3]-ligne*3 , 260, 18, B.epaisseur.val, 0.0, 2.0, 0,lg[l]['EpXY_doc'])DATA|\ B.RandomXY = Toggle( lg[l]['randomxy'], 2, 280, size[3]-ligne*3 , 40, 18, B.RandomXY.val, lg[l]['randomxy_doc'])DATADATAL DATA if B.B_allign.val==1.0:DATA H=310DATA$ V=10DATAl L=1.7DATA L2=1.15DATA L3=1.27DATA D else:DATA  H=0DATA  V=0DATA L=1.0DATAd L2,L3=1.0,1.0DATADATA( if B.matrix['use_matrice'].val==1:DATA< B.matrix['use_matrice'] = Toggle(lg[l]['UseMatrice'], 5, 330-H, size[3]-ligne*(1+V), 85, 18, B.matrix['use_matrice'].val, lg[l]['UseMatrice_doc']) DATA B.matrix['recursion'] = Slider(lg[l]['division'], 5, 330-H, size[3]-ligne*(2+V), 221, 18, B.matrix['recursion'].val,1,B.matrix['limrec'].val,0, lg[l]['division_doc'])DATA B.matrix['maxdec'] = Number('', 5, 330+98+60-H, size[3]-ligne*(1+V), 73, 18, B.matrix['maxdec'].val,1.0,1000.0, lg[l]['MaxDec_doc']) DATA B.matrix['maxrot'] = Number('', 5, 562-H, size[3]-ligne*(1+V), 73, 18, B.matrix['maxrot'].val,180.0,4800.0, lg[l]['MaxRot']) DATA B.matrix['limrec'] = Number('', 5, 330+225-H, size[3]-ligne*(2+V), 80, 18, B.matrix['limrec'].val,10,100,lg[l]['division_doc'])DATAtDATA B.matrix['segment'] = Toggle(lg[l]['Segment'], 5, 330+93-H, size[3]-ligne*(1+V), 60, 18, B.matrix['segment'].val, lg[l]['Segment_doc']) DATADATA B.matrix['Sx'] = Slider(lg[l]['Sx'], 5, 330-H, size[3]-ligne*(3+V), 306, 18, B.matrix['Sx'].val,-B.matrix['maxdec'].val,B.matrix['maxdec'].val,0, lg[l]['Rx_doc'])DATA B.matrix['Sy'] = Slider(lg[l]['Sy'], 5, 330-H, size[3]-ligne*(4+V), 306, 18, B.matrix['Sy'].val,-B.matrix['maxdec'].val,B.matrix['maxdec'].val,0, lg[l]['Ry_doc'])DATA B.matrix['Sz'] = Slider(lg[l]['Sz'], 5, 330-H, size[3]-ligne*(5+V), 306, 18, B.matrix['Sz'].val,-B.matrix['maxdec'].val,B.matrix['maxdec'].val,0, lg[l]['Rz_doc'])DATA DATA(  if B.matrix['rotGlobal'].val==0:DATA4  B.matrix['rotGlobal'] = Toggle(lg[l]['rotLocal'], 5, 330+262-H, size[3]-ligne*(8+V), 44, 58, B.matrix['rotGlobal'].val, lg[l]['rotLocal_doc']) DATA  else:DATAT  B.matrix['rotGlobal'] = Toggle(lg[l]['rotGlobal'], 5, 330+262-H, size[3]-ligne*(8+V), 44, 58, B.matrix['rotGlobal'].val, lg[l]['rotGlobal_doc']) DATA, DATAd  B.matrix['Rx'] = Slider(lg[l]['Rx'], 5, 330-H, size[3]-ligne*(6+V), 260, 18, B.matrix['Rx'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Rx_doc']) DATA\  B.matrix['Ry'] = Slider(lg[l]['Ry'], 5, 330-H, size[3]-ligne*(7+V) , 260, 18, B.matrix['Ry'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Ry_doc'])DATAT B.matrix['Rz'] = Slider(lg[l]['Rz'], 5, 330-H, size[3]-ligne*(8+V), 260, 18, B.matrix['Rz'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Rz_doc'])DATALDATA B.matrix['Rnz'] = Slider(lg[l]['Rnz'], 5, 330-H, size[3]-ligne*(9 +V), 306, 18, B.matrix['Rnz'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Rnz_doc']) DATA| B.matrix['Rnx'] = Slider(lg[l]['Rnx'], 5, 330-H, size[3]-ligne*(10+V), 306, 18, B.matrix['Rnx'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Rnx_doc']) DATAt B.matrix['Rny'] = Slider(lg[l]['Rny'], 5, 330-H, size[3]-ligne*(11+V), 306, 18, B.matrix['Rny'].val,-B.matrix['maxrot'].val,B.matrix['maxrot'].val,0, lg[l]['Rny_doc']) DATAl DATA B.Extrude.val=1DATA B.DistanceTG.val =1DATA D B.FaceinterneTG.val=1DATA DATA  else:DATA B.matrix['use_matrice']=Toggle(lg[l]['UseMatrice'], 5, 330, size[3]-ligne*10, 60, 198, B.matrix['use_matrice'].val, lg[l]['UseMatrice_doc'])DATA DATA if B.Extrude.val==1:DATAt B.DistanceTG = Toggle( lg[l]['EpZ'], 2, 50, size[3]-ligne*5, 80, 18, B.DistanceTG.val, lg[l]['EpZ_doc'])DATA, B.distance = Slider( lg[l]['EpQZ'], 2, 50, size[3]-ligne*4, 220, 18, B.distance.val, 0.001, B.maxdistance.val ,0,lg[l]['EpQZ_doc'])DATA B.maxdistance = Number( '', 2, 270, size[3]-ligne*4, 50, 18, B.maxdistance.val, 0.01, 200.0, lg[l]['EpQZ_doc'])DATA B.RandomDistance = Toggle( lg[l]['random'], 2, 130, size[3]-ligne*5, 60, 18, B.RandomDistance.val, lg[l]['random_doc'])DATA B.RandomNeg = Toggle( lg[l]['randomneg'], 2, 210, size[3]-ligne*5, 60, 18, B.RandomNeg.val, lg[l]['random_docneg'])DATA< B.DistNegTG = Toggle( lg[l]['NgZ'], 2, 270, size[3]-ligne*5, 50, 18, B.DistNegTG.val, lg[l]['NgZ_doc'])DATA B.Extrude = Toggle( lg[l]['Extrude_off'],5, 20, size[3]-ligne*5, 28, 38, B.Extrude.val, lg[l]['Extrude_doc'])DATA  else:DATA B.Extrude = Toggle( lg[l]['Extrude'], 5, 20, size[3]-ligne*5, 300, 40, B.Extrude.val, lg[l]['Extrude_doc'])DATA B.DistanceTG.val=0DATA  DATAL B.FaceinterneTG = Toggle( lg[l]['FintTG'], 5, 20, size[3]-ligne*6, 150, 18, B.FaceinterneTG.val, lg[l]['FintTG_doc'])DATA B.SelectedFacesTG = Toggle( lg[l]['Select'], 5, 170, size[3]-ligne*6, 150, 18, B.SelectedFacesTG.val, lg[l]['Select_doc'])DATADATA4 if B.Chanfrein.val ==1 or B.Enveloppe.val==1:DATA\ B.Iteration.val=1DATAt B.Iteration = Number("Iteration: ", 2, 20, size[3]-ligne*9, 300, 18, B.Iteration.val,0,8,lg[l]['iteration'] )DATA\DATA if B.Digger.val==1:DATAp B.Digger=Toggle(lg[l]['Digger'], 4, 20, size[3]-(ligne*7), 50, 18, B.Digger.val, lg[l]['Digger_doc'])DATAt  B.PDigger=Toggle(lg[l]['PDigger'], 4, 72, size[3]-(ligne*7), 18, 18, B.PDigger.val, lg[l]['PDigger_doc'])DATA,!DATAd! B.NDigger=Slider( lg[l]['NDigger'],4, 92, size[3]-(ligne*7), 208, 18, B.NDigger.val, -2.0, 2.0 ,0,lg[l]['NDigger_doc'])DATA" DATA T" else:DATAp" B.Digger=Toggle(lg[l]['Digger'], 4, 20, size[3]-(ligne*7), 300, 18, B.Digger.val, lg[l]['Digger_doc'])DATAD# DATA |# """ DATA,# glRasterPos2f(20, size[3]-(ligne*7-9))DATA,$ Text(lg[l]['T1'])DATA,t$ glRasterPos2f(20, size[3]-(ligne*7))DATA$ Text(lg[l]['T2'])DATA $% """ DATAl% DATAt% B.SplitTotalTG = Toggle(lg[l]['FrgT'], 4, 20, size[3]-ligne*8, 300, 18, B.SplitTotalTG.val, lg[l]['FrgT_doc'])DATAL&DATA&DATA$& #bouton de cration de la formeDATA' if B.B_allign.val==1.0:DATAhl' B.B_allign=Toggle(lg[l]['V'], 5, 280, size[3]-ligne*10, 40, 18, B.B_allign.val, lg[l]['V_doc'])DATA ( else:DATAhL( B.B_allign=Toggle(lg[l]['H'], 5, 280, size[3]-ligne*10, 40, 18, B.B_allign.val, lg[l]['H_doc'])DATA(DATA) DATAT)DATA)def event(evt, val): DATA() if (evt== QKEY and not val): Exit()DATA<*DATAt*def bevent(evt):DATA * global B, liste_des_sommetsDATA+ DATAL+ if (evt== 1):DATA+ Exit()DATA+DATA, elif (evt== 3):DATA\, liste_des_sommets={}DATA, DATA, liste_des_faces=[]DATA D- liste_des_facesbis=[]DATA - MaxIter= B.Iteration.valDATA-DATA$,. while B.Iteration.val!=0:DATA . testselect(MaxIter)DATA0. B.Iteration.val=B.Iteration.val-1DATAD/ DATA/ B.Iteration.val=1DATA / Blender.Window.Redraw()DATA$@ DATA$\@ elif (evt== 4) or (evt== 6):DATA@ DATA@ B.DistanceTG.val =0DATADA if (evt== 4):DATA A B.FaceinterneTG.val=1DATAA B.Enveloppe.val=0DATA2 "?@ABCDEFGH%I#$J%K%LMNOPQRSTUVW!XYZ[&\]^_'`(abcdefghijklmnopq) rstuv wxyz{ |}*jkl~+*, '`##ABMN(#/p%#)+,-ijklmAB&%I.%/:ijkl\]&%/I01!X222/34 %/hg5 6777   6 5 8&4  ''%9/ gh/4 !"0#:::6 5 $%&'()*  +#;,-./01<,-./01= 23456>78?@>9:[A;<B~jklC=D"4 > %/ ? @ AAB@CBDCEDFEG H(IhgJKL[MNOPF QRST6U%GGGV 'OWXYZ[ \']'^%94H_I` Ja b > c d/efgghijklmnopqrstuvwxyz{|}~I     H4  K+i%&ILMMM'`N  O5N{=PQ'KQ# MRS L HP OjIT #(a =    U&VVW'TUE !f"#$%&'X ()*+,-./012VVVWYVVWZVVW3X4 5 6%&789:;<[[VVW=>X4?;8@ ABCDEFGHIsJZK\ VVWX4? ]VVW^LMNOPQRST_UVWX YZ` VVWX4 [8\ AaVVWX4#] 8^_ <bVV<WX4cVVW `ab2;cdefgh i j k ldQVVWmnopq"#rstuvwxyz{|}~eeff% Y gh   Qiiii jjjiiWWWiiiih%  k l%KlllMm mm/ln  rsv} wyz { |o ooo /ml%Q$Jnooo p   qqq rrr /sss  ' !"t#uuu $%&'(v ')WXYZ*+,-w ww/.-/0xW12 3456789:;%']XYZ<vU=>y yy?@A Bz zzVCDE F G{VHI|}V/J~KLMNOVPQVRSVTUVVWVUXYZ'[\]C^_`V a')bcd `ef`CgV ahijkl') Hm Vnopq[MN r stuvr wx l')DyVz{Q'VP') |}eh~  V')$-V8  VRX'\]  eCV ')S |!X! %x2VVWX4sr <VWXYZ']'^%efgghijklnopqz{') R  ????] V8eggijk    gikV[I % bV[H  VVWX4H_8[<JJJ%V  %CVl'['[M'['['Hm'   [%HmnENDB