BLENDER_v220REND 1SRd0ISRscreenПP@!DEDATAПJDATAJ0ПEDATA0JEDATAJ0DATAJ@DATA@JDATAJ@0DATAJP0DATAPJLDATAJPL0DATAK`0DATA`KПDATAK`ПDATAKp@DATApK @DATA KКpDATAКK 0DATAK0КDATA0KPDATAK0P@DATAK@DATA@KDATAK@PDATAKP@DATAPKDATA@L`П@hheeyxydGEJGGpp  DATApBDdCIzաDck,AJ9YCC(BDC?z?P|DATA`LP@0bb3E3GEEdE0G0GppDATAPL`PVVTTu>Ë=o?I-II-JIdtGExFtGtG DATA? ???Zk???H<??Zk?ҿ?u>Ë=o袋L>?7@\v|OAZk?ҿ??7@ B? #<CZk?xxDATA< D-SAVE FILED:\Blender\realign.blend0TDDATALPP@RR ??PףO-OO-  dEMpMDATAXG K  (>ac~DATA A`zC̽̌?zC@pp #< #<`jFzD OBzC̽̌?DATA`? ??? ???? A???PA A!O?j?}GCHB? A B? #<C@h@hDATA<D`,LOAD TEXT FILED:\Blender\\realign.pyndd GSRdI0SRscreen.001@Ќ!DEDATA@JpDATApJ`@EDATA`JpEDATAJ`DATAJpDATApJ DATA JЌp0DATAЌJ 0DATAK0`pDATA0K@DATAK0@DATAK@pDATA@KpDATAK@ pDATAKPЌ`DATAPKЌ DATAKP DATAKЌpDATAL@pyxyCdGEJGGЇЇDATAЇBDdCzաD\k,AJ9YCC(BDC?z?dDATAL p`Ќ3E3GEEdE0G0GDATAL ЌpE=}=o?--dtGExFtGtGDATA????xЄ=????xЄ>?E=}=oLI;?SAz(AxЄ>??SA B?=CxЄ={{ DATA<DQLOAD FILE/data/ople/psx/test/rt3.blendDATAAzC AzC A #< #<`jFzD OBDATABDdCDv@CC(BDC?z?SRdISRscreen.002pp`P!DEDATApJ0DATA0JpEDATAJ0EDATAJ@DATA@JDATAJ@DATAJP0DATAPJ0DATAJPhDATAJ`hDATA`JhDATAJ`0DATAKp0DATApK pDATA Kpp@DATAK DATAK0@DATA0K0DATAK0PDATAK@PDATA@K@DATAK@DATAKPPDATAPKDATAKPDATAK``DATA`K`DATAK`DATAKpPDATApK`DATA`Lp@dGEJGGDATABDdCIzաDdCC(BDC?z?DATALp`0P  dE0G0GDATApLP@8=i>o?dGEpvO G@DATAC`zCAzCA A@FB= A DATA`?@????????8=i>o?fffAD&@??fffA B? #<CDATA<@D`SAVE FILE/pics/blender/rt1.blendkDATAPLPp`P8=H>o?UUUdGEpvO G`DATACzCAzCA1||1 A@FB= A DATA?`????????8=H>o?fffA*@??fffA B? #<C>>DATA<`DSAVE FILE/pics/blender/rt1.blendkDATAPLP`8=>o?OOOPdGEN0G0G`0DATA`AB̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATA?0`????????8=>o?fffA@??fffA B? #<CzzDATA<0DSAVE FILE/pics/blender/rt1.blendkSC=SC1@@dd??d@??_@??///render///#DATA;@}DATA;@x)DATA@;xOB8OBCamera x??????w?w?????d??)d??)d?????OB8@}OBPlaneP|0????????????OBd??)d??)d?????DATA0OB@}8OBEmpty@???I???5?5?55??@?????DOBd?? #=?=?@???MEP|4MEPlanek`LKK`4????DATA`LzDATAPK1????DATA K,MAz#MAMaterialL?L?L?????????L??2????zDATAPz0y???????????TE0y TETex>@????????CAlxCACamera=B?A B?TXdYKTXvect.py XN`X`X`X8FpDATAXD:\Blender\vect.pyEDATA`XXPO DATAXW`X&DATAWpWX`^DATApW WWP/DATA WVpWDATAVV WDATAV0VVP=@DATA0VUV?DATAUU0VDATAU@UU H DATA@UTUDATATT@U\DATATPTTPDATAPTTTDATATSPT;[DATAS`ST@"CDATA`SSSDATASR`S @DATARpRSDATApR RR0DATA RQpR @DATAQQ RDATAQ0QQPDATA0QPQFREEDATAPP0Q4DATAP@PP01DATA@PЏPDATAЏ@PDATA0Џ06DATA0#DATA0DATA@0 DATA@DATA@ DATAP` DATAP;DATAP DATA``@DATA`9 DATA`6DATAp6DATAp 6DATA ЊpPDATAЊ DATA0Њ*DATA00FCDATA01DATA@p DATA@ DATA@DHDATAPDATAP@DATAPDATA`,DATA` >DATA`DATAp DATAp @'DATA Ѕp DATAЅ 4DATA0ЅPDADATA0 tBoDATA0+DATA@p DATA@1DATA@ DATAP`DATAP :DATAP ADATA`p)DATA`0 DATA`DATApDATAp 05 DATA ЀpDATAЀ DATA0Ѐ07DATA0ПDATAП0ODATA0ПPDATA0+DATA0 XaDATA@PDATA@DATA@+FREEDATAP0:DATAP0DATAPDATA` GDATA`:dDATA`pDATAp DATAp DATA Кp DATAК ` DATA0К0XaDATA0uCDATA0DATA@*XaDATA@@ DATA@nimDATAPPFREEDATAP*DATAP DATA``DATA` DATA`*DATAp DATAp 0DATA Еp~ConsDATAЕ ~DATA0Е`~DATA0~*SounDATA0} FREEDATA@p}DATA@0}DATA@|*DATAP| DATAP@|DATAP|DATA`{*DATA``{ DATA`{DATApzDATAp zDATA Аp@zDATAА y*DATA0Аy XaDATA0Py BDATA0yDATA0x*XaDATA0px DATA0 xDATA@wFREEDATA@w*DATA@@w DATAPvDATAPvDATAP`vDATA`vDATA`uDATA`u DATAp@uDATAp t.DATA ptDATA Pt DATA0tDATA0sDATA0`sDATA@ s[DATA@rDATA@`r5DATAPr'DATAPq%DATAP@q DATA` DATA`qDATA`pdDATAp0@DATAp ditDATA p dDATA 0DATA0ConsDATA0 dDATA0`DATA@8SounDATA@ DATA@p DATAP0DATAPPDATAPPDATA``@DATA`$ ADATA`pDATAp0 DATAp ODATA p TADATA /DATA0DATA0 /DATA0cDATA0DATA00DATA0XaDATA@DATA@PDATA@DATAPDATAPpampDATAP*FREEDATA`DATA`DATA`=6 ADATAp DATAp _DATA p@cDATA !DATA0DATA0@ScriDATA0DATA@DATA@P!DATA@DATAPDATAPpDATAP/&FREEDATA`P/8DATA`0DATA`.$xADATAp.DATAp P.0DATA p.uDDATA -@DATA0@-DATA0,DATA0,DATA@`,DATA@+;bDATA@+4DATAP+4DATAP*3DATAP`*DATA`*DATA`)ABDATA`P)DATAp) DATAp (=DATA p(BDATA '2DATA0`'DATA0п&A DATAп0&DATA0п@&(DATA0&DATA0%DATA@P%*DATA@%DATA@$DATAP0$YDATAP#DATAP#DATA`P#DATA`#DATA`"5DATAp0")DATAp !)DATA кp!DATAк 0!DATA0к "DATA0 DATA0@ DATA@8'DATA@08DATA@74DATAPP74DATAP64DATAP6DATA``6DATA`6"DATA`5DATApp5 DATAp 05DATA еp4DATAе 4DATA0е@4DATA03DATA03DATA@`3DATA@3DATA@2DATAP2 DATAP02DATAP1DATA`1DATA``1DATA`1DATAp0DATAp 0DATA аp00DATAа ODATA0аODATA0Я@ODATAЯ0NDATA0ЯNDATA0`NDATA0M8DATA@M DATA@pM DATA@0MDATAPLDATAPLDATAP@LDATA`LDATA`KDATA``KDATAp KDATAp J)DATA ЪppJDATAЪ JDATA0ЪIDATA0IDATA00IDATA@HDATA@HDATA@PHDATAPHDATAPGDATAP`GDATA` GDATA`FDATA`FDATAp@FDATAp EDATA ХpEDATAХ PEDATA0ХEDATA0DDATA0`DDATA@DDATA@C DATA@CDATAP C)DATAPB%DATAPo'DATA`Po3DATA`oDATA`nDATAp`n/DATAp nDATA РpmDATAР pmDATA0Р0mDATA0lDATA0lDATAPP#------------------------------------------------------------------------------DATA(# simple 3D vector / matrix class v1.3NDATA#DATA0P# (c) 9.1999, Martin Strubel // onk@section5.deDATA# updated 4.2001 DATA#DATA@P# This module consists of a rather low level command orientedDATA@# and a more OO oriented part for 3D vector/matrix manipulationDATA#DATAL # For documentation, please look at the EXAMPLE code below - execute by:DATA#DATA# > python vect.pyDATAP#DATA#DATA<# permission to use in scientific and free programs grantedDATA$@# In doubt, please contact author.DATA# DATADATADATA0VectorType = 'Vector3'DATAMatrixType = 'Matrix3'DATAFloatType = type(1.0)DATAP DATAdef dot(x, y):?DATA8 "(x,y) - Returns the dot product of vector x and y"DATA40 return (x[0] * y[0] + x[1] * y[1] + x[2] * y[2])aDATADATAdef cross(x, y):DATA80 "(x,y) - Returns the cross product of vector x and y"DATA$ return (x[1] * y[2] - x[2] * y[1],DATA  x[2] * y[0] - x[0] * y[2],DATA 0 x[0] * y[1] - x[1] * y[0])DATADATAdef matrix():DATA ` "() - Returns Unity matrix"DATA< return ((1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0))DATAREEDATA`def matxvec(m, x):DATA< "y = matxvec(m,x) - Returns product Matrix m * vector x"DATA8 vx = m[0][0] * x[0] + m[1][0] * x[1] + m[2][0] * x[2]DATA8 vy = m[0][1] * x[0] + m[1][1] * x[1] + m[2][1] * x[2]DATA8 vz = m[0][2] * x[0] + m[1][2] * x[1] + m[2][2] * x[2]DATAP return (vx, vy, vz)DATADATA,def matfromnormal(z, y = (0.0, 1.0, 0.0)):DATAH0 """(z, y) - returns transformation matrix for local coordinate systemDATA4 where z = local z, with optional 'up' axis y"""DATAp y = norm3(y)DATA  x = cross(y, z)DATA y = cross(z, x)REEDATA return (x, y, z)DATA@DATAdef matxmat(m, n):DATA0 "(m,n) - Returns matrix product of m and n"DATA@  return (matxvec(m, n[0]), matxvec(m, n[1]), matxvec(m, n[2]))DATADATAdef len3(x):DATA(@ "(x) - Returns the length of a vector"DATA import mathDATA8 return math.sqrt(x[0]*x[0] + x[1]*x[1] + x[2]*x[2])DATAPDATAdef norm3(x):DATA, "(x) - Returns the vector x normed to 1.0"DATAp import mathDATA4 r = math.sqrt(x[0]*x[0] + x[1]*x[1] + x[2]*x[2])aDATA$ return (x[0]/r, x[1]/r, x[2]/r)DATA`DATA def add3(x, y):DATA  "(x,y) - Returns vector (x+y)"DATA,p return (x[0]+y[0], x[1]+y[1], x[2]+y[2])DATA0DATAdef sub3(x, y):DATA  "(x,y) - Returns vector (x-y)"DATA80 return ((x[0] - y[0]), (x[1] - y[1]), (x[2] - y[2]))DATADATAdef dist3(x, y):5DATA80 "(x,y) - Returns euclidian distance from Point x to y"DATA return len3(sub3(x, y))DATADATAPdef scale3(s, x):DATA, "(s,x) - Returns the vector x scaled by s"DATA$ return (s*x[0], s*x[1], s*x[2])DATAPDATAdef scalemat(s,m):DATA, "(s,m) - Returns the Matrix m scaled by s"DATA<0 return (scale3(s, m[0]), scale3(s, m[1]), scale3(s,m[2]))DATADATAdef invmatdet(m):DATAH  """n, det = invmat(m) - Inverts matrix without determinant correction.DATA< Inverse matrix n and Determinant det are returned"""DATApDATA  # Matrix: (row vectors)DATA  # 00 10 20DATA  # 01 11 21DATA ` # 02 12 22DATA0DATA wk = [0.0, 0.0, 0.0]DATAxDATA, t = m[1][1] * m[2][2] - m[1][2] * m[2][1]DATA @ wk[0] = tDATA det = t * m[0][0]DATAPDATA, t = m[2][1] * m[0][2] - m[0][1] * m[2][2]DATA  wk[1] = tDATA` det = det + t * m[1][0]DATA DATA, t = m[0][1] * m[1][2] - m[1][1] * m[0][2]DATA  wk[2] = tCDATA0 det = det + t * m[2][0]DATA~DATA~ v0 = (wk[0], wk[1], wk[2])DATA`~ounDATA,~ t = m[2][0] * m[1][2] - m[1][0] * m[2][2]DATA } wk[0] = tDATAp} det = det + t * m[0][1]DATA0} aDATA,| t = m[0][0] * m[2][2] - m[0][2] * m[2][0]DATA | wk[1] = tDATA@| det = det + t * m[1][1]DATA|DATA,{ t = m[1][0] * m[0][2] - m[0][0] * m[1][2]DATA `{ wk[2] = tDATA{ det = det + t * m[2][1]DATAzDATAz v1 = (wk[0], wk[1], wk[2])DATA@zDATA,y t = m[1][0] * m[2][1] - m[1][1] * m[2][0]DATA y wk[0] = tDATAPy det = det + t * m[0][2]DATAyDATA,x t = m[2][0] * m[0][1] - m[0][0] * m[2][1]DATA px wk[1] = tDATA x det = det + t * m[1][2]0 0DATAwDATA,w t = m[0][0] * m[1][1] - m[1][0] * m[0][1]DATA @w wk[2] = tDATAv det = det + t * m[2][2]DATAvDATA`v v2 = (wk[0], wk[1], wk[2])DATAv # det = 3 * determinantDATA u return ((v0,v1,v2), det/3.0)DATAuBDATA@udef invmat(m):DATA0t "(m) - Inverts the 3x3 matrix m, result in n"DATAt n, det = invmatdet(m)CDATAPt d = 1.0/detDATAt return (scale3(d, n[0]),DATAs scale3(d, n[1]),DATA`s scale3(d, n[2]))DATA sDATArdef transmat(m):DATA8`r # can be used to invert orthogonal rotation matricesDATA(r "(m) - Returns transposed matrix of m"DATA(q return ((m[0][0], m[1][0], m[2][0]),DATA$@q (m[0][1], m[1][1], m[2][1]),aDATA$ (m[0][2], m[1][2], m[2][2]))DATAqDATApdef coplanar(verts):DATA4 "checks whether list of 4 vertices is coplanar"DATA v1 = verts[0]EDATA v2 = verts[1]DATA0 a = sub3(v2, v1)DATA v1 = verts[1] DATA v2 = verts[2]DATA` b = sub3(v2, v1)DATA< if dot(cross(a,b), sub3(verts[3] - verts[2])) < 0.0001:0 1DATA  return 1DATA p return 0 DATA0BDATAT################################################################################ADATAP# Matrix / Vector highlevelDATA# (and slower)DATA(# TODO: include better type checks !DATApadiDATA0class Vector:DATAP """Vector class, providing vector operations as addition, multiplication, etc.DATAX Usage: v = Vector(x, y, z) where x, y, z are float values, representing coordinates.DATA0Note: This datatype emulates a float triple."""DATADATA0  def __init__(self, x = 0.0, y = 0.0, z = 0.0):DATA self.v = (x, y, z)DATA self.type = VectorTypeDATA0 def __getitem__(self, i):DATA return self.v[i]DATADATA P def __setitem__(self, i, val):DATA self.v[i] = valDATADATAp def new(self, *args):NDATA, return Vector(args[0], args[1], args[2])DATADATA def __cmp__(self, v):DATA@ if self[0] == v[0] and self[1] == v[1] and self[1] == v[1]:DATA  return 0DATADATA@ def __add__(self, v):DATA$ return self.new(self[0] + v[0],0ADATA  self[1] + v[1],DATA @ self[2] + v[2])DATADATA def __sub__(self, v):DATA$P return self.new(self[0] - v[0],EEDATA  self[1] - v[1],DATA  self[2] - v[2])DATApDATA(/ def __rmul__(self, s): # scaling by sDATA<P/ return self.new(s * self[0], s * self[1], s * self[2])DATA0REEDATA(. def __mul__(self, t): # dot productDATA. if type(t) == FloatType:DATAP. return self.__rmul__(t)DATA . elif t.type == MatrixType:DATAD- return Matrix(self[0] * t[0], self[1] * t[1], self[2] * t[2])DATA @- else: DATA, return dot(self, t)DATA,DATA`, def cross(self, v):CONDATA<+ "(Vector v) - returns the cross product of (self) with v"DATA8+ return self.new(self[1] * v[2] - self[2] * v[1], DATA8+ self[2] * v[0] - self[0] * v[2], DATA4* self[0] * v[1] - self[1] * v[0])DATA`* DATA* def __repr__(self):xDATAD) return "(%.3f, %.3f, %.3f)" % (self.v[0], self.v[1], self.v[2])DATAP) DATA)class Matrix(Vector):DATA@( """Matrix class, basically representing a vector of Vectors.DATAD(Usage: M = Matrix(v1, v2, v3) where vn are Vector class instances.EDATA4'Note: This datatype emulates a 3x3 float array."""DATA`' DATAD& def __init__(self, v1 = Vector(), v2 = Vector(), v3 = Vector()):DATA& self.v = (v1, v2, v3)DATA@& self.type = MatrixTypeDATA&DATA% def new(self, *args):DATA,P% return Matrix(args[0], args[1], args[2])DATA%DATA$ def __repr__(self):DATA\0$ return "Matrix:\n %s\n %s\n %s\n" % (self.v[0], self.v[1], self.v[2])DATA#DATA# def __mul__(self, m):DATAP# if m.type == MatrixType:DATA# M = matxmat(self, m)DATA8" return self.new(Vector(M[0][0], M[0][1], M[0][2]),DATA,0" Vector(M[1][0], M[1][1], M[1][2]),DATA,! Vector(M[2][0], M[2][1], M[2][2]))DATA! if m.type == VectorType:DATA0! v = matxvec(self, m)DATA$  return Vector(v[0], v[1], v[2])DATA DATA@  def inverse(self):DATA(8 """() - returns the matrix inverse"""DATA08 M = invmat(self)DATA87 return self.new(Vector(M[0][0], M[0][1], M[0][2]),DATA8P7 Vector(M[1][0], M[1][1], M[1][2]),DATA86 Vector(M[2][0], M[2][1], M[2][2]))DATA6 DATA`6 def det(self):DATA$6 """() returns the determinant"""DATA5 M, det = invmatdet(self)DATAp5 return detDATA05DATA4 def __rmul__(self, m):DATA4 if type(m) == FloatType:DATA @4 return self.new(m * self[0],DATA 3 m * self[1],DATA 3 m * self[2])DATA`3DATA3 def __div__(self, m):DATA2 if type(m) == FloatType:DATA2 m = 1.0 /mDATA02 return m * selfDATA1 else:DATA 1 return self * m.inverse()DATA`1DATA1 def __rdiv__(self, m):DATA0 return m * self.inverse()DATA0DATA00Ex = Vector(1.0, 0.0, 0.0)DATAOEy = Vector(0.0, 1.0, 0.0)DATAOEz = Vector(0.0, 0.0, 1.0)DATA@ODATANOne = Matrix(Ex, Ey, Ez)DATANorig = (0.0, 0.0, 0.0)DATA`NDATA<M#-------------------------------------------------------DATA M# EXAMPLE:DATA pMdef test():DATA0MDATA L print "********************"DATAL print "VECTOR TEST"DATA @L print "********************"DATALDATAK a = Vector(1.1, 0.0, 0.0)DATA`K b = Vector(0.0, 2.0, 0.0)DATA KDATA,J print "vectors: a = %s, b = %s" % (a, b)DATApJ print "dot:", a * aDATA J print "scalar:", 4.0 * aDATAI print "scalar:", a * 4.0DATAI print "cross:", a.cross(b)DATA0I print "add:", a + bDATAH print "sub:", a - bDATAH print "sub:", b - aDATAPH printDATA H print "********************"DATAG print "MATRIX TEST"DATA `G print "********************"DATA G c = a.cross(b)DATAF m = Matrix(a, b, c)DATAF v = Vector(1.0, 2.0, 3.0)DATA @F E = OneDATAE print "Original", mDATAE print "det", m.det()DATAPE print "add", m + mDATAE print "scalar", 0.5 * mDATAD print "sub", m - 0.5 * mDATA`D print "vec mul", v * mDATAD print "mul vec", m * vDATA C n = m * m DATAC print "mul:", nDATA, C print "matrix div (mul inverse):", n / mDATA(B print "scal div (inverse):", 1.0 / mDATA(o print "mat * inverse", m * m.inverse()DATA4Po print "mat * inverse (/-notation):", m * (1.0 / m)DATAo print "div scal", m / 2.0DATAnDATA0`n# matrices with rang < dimension have det = 0.0DATAn m = Matrix(a, 2.0 * a, c)DATAm print "minor rang", mDATApm print "det:", m.det()DATA0mDATAlif __name__ == '__main__':DATAl test()TXdKYTXrealign.pyJ@`Jk 5 5N*pDATAJD:\Blender\realign.pyDATA`Jq0@FREEDATAq@q`JqDATA@qpqq DATAp/@q`px1|CDATA/@/p/DATA@/0./.DATA0.-@/- DATA--0.P-DATA-p,-,DATAp,+-+n DATA+*p,0+DATA*P*+*DATAP*)**DATA) )P*p)DATA )()(DATA(( )P(DATA(p'('DATAp'&(')'DATA&0&p'& DATA0&%&%DATA%%0&P%#DATA%`$%$DATA`$#%$DATA##`$`##XaDATA#p"#"DATAp"!#"4DATA! !p"p!DATA ! ! DATA ? !P DATA?@? ? DATA@?>?? DATA>>@?`>DATA>p=>= DATAp=<> =DATA<0<p=<DATA0<;<;DATA;:0<@;DATA:P:;:;DATAP:9:: DATA909P:9DATA09898D9DATA8809`8xADATA8787DATA76807DATA6@676DATA@6566DATA5 5@6p5 5DATA 5p454$DATAp43 504DATA3P3p43DATAP3233DATA2 2P3p2DATA 2121DATA10 2@1DATA0P010DATAP0o0o`.DATAonP0 o$@ADATAn nopn&DATA nmnmFREEDATAml n0mDATAl@lmlDATA@lklkDATAkk@lPkDATAkkjDATA0@#Realign ScriptDATAq#DATA q#Aout 2001DATA`p#Xand@wanadoo.frDATA/#DATA.#Choisir la source puis la cible, appuyer sur Alt+P, les axes de cible sont alingns sur ceux de source mais le mesh ne bouge pas.DATA-#l'chelle ne joue pasDATAP-#DATA,#DATAp+#Select Source then Cible, press Alt+p, Cible's axis are realigned with Source's axis but the mesh don't move.DATA0+#The rotation is size freeDATA*#DATA*#Free for use with BlenderDATAp)#DATA(DATAP(DATA'DATA,'from Blender import Object, NMesh, RedrawDATA &import vectDATA%from math import *DATAP%DATA $def applyTransform(mesh,mat):DATA$ for v in mesh.verts:idDATA$`# vec = (v.co[0], v.co[1], v.co[2])DATA " vec = vect.matxvec(mat,vec)DATA8" v.co[0], v.co[1], v.co[2] = vec[0], vec[1], vec[2]DATAp!DATA def matrot(ob):DATAP  vx=ob.mat[0]EEDATA? vy=ob.mat[1]DATA? vz=ob.mat[2]DATA`> isizex=1/ob.size[0]DATA= isizey=1/ob.size[1]DATA = isizez=1/ob.size[2]DATA < matx=vect.scale3(isizex,vx)REEDATA ; maty=vect.scale3(isizey,vy)CDATA @; matz=vect.scale3(isizey,vz)DATA: mat=(matx,maty,matz)DATA : return matDATA9DATA8REEDATA`8DATA7DATA 07oblist =Object.GetSelected()JDATA6lenob=len(oblist)DATA6DATAp5if lenob !=2:DATA(4 raise ValueError,'Select 2 objects'DATA04DATA3cible=oblist[0]DATA3source=oblist[1]DATAp2DATA1DATA@1if source.rot!=cible.rot:DATA0 rotcible=matrot(cible)DATAo rotsource=matrot(source)DATA( o rotsourcet = vect.invmat(rotsource)DATA(pn mat=vect.matxmat(rotcible,rotsourcet)DATAm ncible=cible.nameDATA0m me=NMesh.GetRaw(ncible)DATAl applyTransform(me,mat)DATAk NMesh.PutRaw(me,ncible)DATAPk cible.rot=source.rotDATAjpGLOB M0DNA1xBraSDNANAME*next*prev*first*lasttag1len*name*nextnameleveltag2tag3padxyzwxminxmaxyminymax*newid*libname[24]usflagid*idblock*filedataname[160]totcurvecurblocktypeshowkeypostotelemtypert*data*refkeyelemstr[32]elemsizecurvalblock*ipo*fromtotkeyslurphactkey**scripts*flagactscripttotscript*lineblenflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekdrawzoomholdclipstaclipendnetstanetendlensdrawsizehololenhololen1scriptlink*anim*ibuf*mipmap[10]oklastframelastqualitytpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfiletexcomaptomaptonegblendtype*object*texprojxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfac*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*callback)()versionaipotypedata[16]*ima*cube[6]imat[4][4]stypenotlaycuberesnoisesizeturbulbrightcontrastrfacgfacbfacfiltersizenoisedepthnoisetypeimaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendframesoffsetsfrafie_ima*nor*plugin*coba*envfradur[4][2]modetotexenergydistspotsizespotblendhaintatt1att2bufsizesampshadspotsizebiassofttexactshadhalostep*mtex[8]layspecrspecgspecbmirrmirgmirbambrambbambgambemitangspectraalpharefspeczoffsaddkfacharseed1seed2mode2flarecstarclinecringchasizeflaresizesubsizeflareboostrgbselpr_typeseptexpr_backpr_lamppad1*renfrictionfhreflectfhdistxyfrictdynamodename[255]namenullscaleselcolexpxexpyexpzradrad2smaxrad2*mat*imat*bbelemsdisp**mattotcolloc[3]rot[3]wiresizerendersizethreshvec[3][3]alfas[3][2]h1h2f1f2f3hidevec[4]s[2]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztnurb*bevobj*textoncurve*path*keybev*orcopathlenbevresolwidthext1ext2spacemodespacinglinedistshearfsizexofyof*strfamily[24]*vfontmaxrcttotrctadrcodevartypetotvertipoextrapbitmaskv1v2v3v4punoedcodeuv[4][2]col[4]no[3]transptile*tpage*clutdef_nrweight*dwtotweightreserved1co[3]co[2]effect*mface*dface*tface*mvert*dvert*mcol*msticky*texcomesh*oc*sumohandletotfacesmoothreshsubdivcubemapsizertfpntswtypeutypevtypew*defmax**obname[32]partypepar1par2par3parsubstr[32]*parent*track*action*posenetworkdefbase*lifedloc[3]orig[3]dsize[3]drot[3]quat[4]dquat[4]obmat[4][4]parentinv[4][4]colbitstransflagipoflagtrackflagupflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiardampingsizefacdtdtxactcolpropsensorscontrollersactuatorslbufportbbsize[3]dfrasactdefgameflaggameflag2anisotropicFriction[3]constraintsmistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposuregravityactivityBoxRadiusskytypemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxhemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammasxsycfraefraimagesframaptoframelenblurfacedgeRedgeGedgeBmaximsizexschyschxaspyaspxpartsypartssafetyborderwinposplanesimtypebufflagqualityscemodealphamodedogammaosafrs_secedgeintpostmulpostgammapostaddpostigammabackbuf[160]pic[160]ftype[160]movie[160]*camera*world*setbase*basact*groupcursor[3]*fcam*ed*radiozoomblendximyim*rectspacetypeviewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]viewquat[4]perspviewlocalviewlayactscenelockaroundcamzoomgridnearfarmxmymxomyopr_xminpr_xmaxpr_yminpr_ymaxpr_sizexpr_sizeygridlinesviewbutpr_facxpr_facy*bgpic*localvdverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomrowbutv2d*editipoipokeytotipopinbutofschannelmenunrlockcursenscuractmainbmainbo*lockpointexnrtexfromshowgrouprectxrectycurymodeltypescriptblockpad2*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()oopsvisiflag*imageimanrcurtileleft*texttopviewlinesfont_idlheightpix_per_linetxtscrolltxtbar*py_draw*py_event*py_buttondupflagsavetimetempdir[64]fontdir[64]renderdir[64]textudir[64]plugtexdir[64]plugseqdir[64]pythondir[64]sounddir[64]versionsvertbaseedgebaseareabase*scenestartxendxstartyendysizexsizeyscenenrscreennrfullmainwinwinakt*newvvec*v1*v2*v3*v4*full*headqueue*hq*winqueue*wqwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursor(*headchange)()(*winchange)()(*headdraw)(void)(*windraw)(void)(*headqread)()(*winqread)()spacedatauiblocks*curscreendisplaymodefileflagsname[40]*se1*se2*se3nrdone*stripdatadir[80]orxoryname[80]*newseqstartstartofsendofsstartstillendstillmachinedepthstartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*seqbasepmetastackbuttypestaendlifetimetotpartseednormfacobfacrandfactexfacrandlifeforce[3]dampnablavectsizedefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstep*keysheightnarrowspeedminfactimeoffs*obpremat[4][4]postmat[4][4]vec[3]faclenoalphaoeff[2]iterlastfralimbbaseeff[3]effg[3]effn[3]memslowtotytotxxyconstrainttotdefdef_scrolllimb_scrolldxdy*idlinkfasesubfasemouse_move_redrawimafasedirslidirsli_linesdirsli_sxdirsli_eydirsli_exdirsli_himaslifileselmenuitemimasli_sximasli_eyimasli_eximasli_hdssxdssydsexdseydesxdesydeexdeeyfssxfssyfsexfseydsdhfsdhfesxfesyfeexfeeyinfsxinfsyinfexinfeydnsxdnsydnwdnhfnsxfnsyfnwfnhfole[128]dor[128]file[128]dir[128]*firstdir*firstfiletopdirtotaldirshilitetopfiletotalfilesimage_sliderslider_heightslider_spacetopimatotalimacurimaxcurimay*first_sel_ima*hilite_imatotal_selectedima_redraw*cmapotypedataold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimeranglerangeaxisdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2str[128]*mynewinputstotslinkspad3**slinksvalvalopad5time*actreserved2reserved3reserved4sndnr*soundmakecopycopymadepad[1]*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]butstabutendminvisifacminloc[3]maxloc[3]minrot[3]maxrot[3]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypegoaccellerationmaxspeedmaxrotspeedmaxtiltspeedrotdamptiltdampspeeddamptotportactport*portals*campos*camframe*dynamesh*texmeshtotcamtotfra*sectoroldloc[3]speed[3]oldloc1[3]loc1[3]speed1[3]startloc[3]startrot[3]rotspeed[3]oldimat[4][4]frictrotfrictaxsizefrictfacaeropadf*sensors*contact*collision*floor*oldmeshtotsensactsenstimerdflagstate[4]colloc[3]floorloc[3]links*sample*snd_soundvolumepanningattenuationpitchmin_gainmax_gaindistancechannelspad[7]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*gkeyokeygobjectgkey*activechildbaserollhead[3]tail[3]parmat[4][4]defmat[4][4]bonebasechainbaseres1res2res3chanbase*achan*pchanactnrenforceoffset[3]orient[3]roll[3]*tartoleranceiterationssubtarget[32]zminzmaxTYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBaseMemHeadMemTailvec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDLibraryIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraImageanimImBufMTexObjectTexPluginTexCBDataColorBandEnvMapLampWaveMaterialVFontVFontDataMetaElemMetaBallBoundBoxBezTripleBPointNurbCurvePathIpoCurveMFaceMFaceIntTFaceMDeformWeightBoneMDeformVertMVertMColMStickyMeshOcInfoLatticeLBufbDeformGroupbActionbPoseLifeWorldRadioBaseRenderDataSceneGroupFreeCameraBGpicView3DView2DSpaceIpoSpaceButsSpaceSeqSpaceFiledirentrySpaceOopsSpaceImageSpaceTextUserDefbScreenScrVertScrEdgeScrAreaFileGlobalStripElemStripPluginSeqSequenceEditingEffectBuildEffPartEffParticleWaveEffDeformLimbIkaOopsSpaceImaSelImaDirOneSelectableImabPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbSoundbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorSectorbSamplebSoundListenerSpaceSoundGroupKeyObjectKeyGroupObjectbArmaturebPoseChannelbActionChannelSpaceActionbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbFollowPathConstraintbRotationConstraintTLEN   0Ptdl PPx4@H<0P H l L ,@x(D($p<X d @l8(,@0,HhH,(lDLP< 4@Lh0848l@0pP<`,,,,STRC                                   !  "#$% & '()* +,-$./01234  56! 78 9 : ;<=>?@ A"BC7 &#$DEFGHIJKLM,N$%O&P&QRSTUVWXYZ[\"]'^_`a(b)cdefghijklmnopqrs* tuvwx yz{|} ~ +lmn",+- (b$$$FGRS)#$r,$*,-.$klmnoFG',N/,0:klmn^_',0 N1%2&"]333$   45 ,0ji6 7888$     769&5  ((,:0 ij9" !"#$%1&;;;76'( )*+,-%.*</01234=/01234> 56789 : ;?<=@&A?>?@BA7ClmnDBE5 C ,0 D E FBGAHCIDJEKFL M+NjiOPQRG STUV$ 7W,HX (YIIIZ &(L$[\]^_(`(a,:5JbKc & C d e0Lfghiijklmnopqrstuvwxyz{|}~N     MHH6  M+k,'NNOOO(bP+}BQ(MQ$ ORS N MPlNT $)c"#BU*UUJh(     TUV  !WWW"V# $ %,-&'()! *+@XXX,-V#.*'/ 012345678uYYYV#.9ZZZ [:;<=>$?@ABCDEF G\ \\ V# H'I% 0]]] V#$J9'KL"#+^^^M!NOP7*QRSTU V W X_ YZ[\]^_`abc%` d e fQghijklmnop%qraaaastbbbauav c&ccauavawax`yz{|}~(%        d e&PeeeR f ff%e g  tux y{| } ~h hhh $fe,Qg%Oghhh i   % jjj$%kkk$%lll$. mnnn$hjo ([\]^ p pp q[ ,(`\]^oWr rr$   sNss<      !"t#t$%&'()*+,-./0u1u234 &5 Gv vvZ$678 9 :wZ;< x$9yZ0= z>?$@AB{$ ZCD|ZEF9}ZGHI~ZJZHKLM(NOP$6QRS9Z &T(UV W!NX$YS6Z9[Z &T\]^_` ( Ja$Z@bcd ef$ghi `$(EjZkl $ Qg($ZC(  mngjop $Zqr(sXItuvwx $ZqrRyz{|}K~(O9P X$6Z &(S ~ ($ H   ,EE%ilmnL- ~lmn 0((- EEE$H ,"] ,7  V#fe"#+9Z[ \]^(`(a,ghiijklmnpqrs|}( R  @@@@` Z=giiklm    ikmZ@K , Z@J  +V#Jb'@  &,$6Z`((@b(@(@(ENDB