from math import * def initmtx(): rs=[] rs.extend([[0.,1.][x==y] for x in range(4) for y in range(4)]) return rs def mulmtx(a,b): rs=initmtx() rs[0]=0 rs[5]=0 rs[10]=0 rs[15]=0 for r in range(4): for c in range(4): for l in range(4): rs[r*4+c]+=a[r*4+l]*b[l*4+c] return rs alpha=30.0 #回転角 doc=MQSystem.getDocument() pos=[] for obj in doc.object: for vert in obj.vertex: if vert.select: pos.append(vert.getPos()) if len(pos)==2: a=initmtx() a[12]=-pos[0].x a[13]=-pos[0].y a[14]=-pos[0].z vx=pos[1].x-pos[0].x vy=pos[1].y-pos[0].y vz=pos[1].z-pos[0].z v=sqrt(vx**2+vy**2+vz**2) rada=acos(vz/v) if v==0: rada=0 radb=0 else: if vx>0: radb=atan(vy/vx) else: if vx<0: radb=pi+atan(vy/vx) else: if vy>=0: radb=pi/2 else: radb=3*pi/2 ca=cos(rada) sa=sin(rada) cb=cos(radb) sb=sin(radb) b=initmtx() b[0]=cb b[1]=-sb b[4]=sb b[5]=cb c=initmtx() c[0]=ca c[2]=sa c[8]=-sa c[10]=ca d=initmtx() rad=alpha/360*pi d[0]=cos(rad) d[1]=sin(rad) d[4]=-sin(rad) d[5]=cos(rad) e=initmtx() e[0]=ca e[2]=-sa e[8]=sa e[10]=ca f=initmtx() f[0]=cb f[1]=sb f[4]=-sb f[5]=cb g=initmtx() g[12]=pos[0].x g[13]=pos[0].y g[14]=pos[0].z h=mulmtx(mulmtx(mulmtx(mulmtx(mulmtx(mulmtx(a,b),c),d),e),f),g) cobj=doc.object[doc.currentObjectIndex] for vert in cobj.vertex: cpos=vert.getPos() x=cpos.x y=cpos.y z=cpos.z cpos.x=x*h[0]+y*h[4]+z*h[8]+h[12] cpos.y=x*h[1]+y*h[5]+z*h[9]+h[13] cpos.z=x*h[2]+y*h[6]+z*h[10]+h[14] vert.setPos(cpos) else: MQSystem.println("2点をセレクト")