Script to align axis


(Xand) #1

old piece of code to rearrange orientation of the axis of mesh without moving the mesh.
i use the vect.py from martin strubel cos i’m bored to rewrite standard vector operations

#Realign Script
#
#Aout 2001
#[email protected]
#
#Choisir la source puis la cible, appuyer sur Alt+P, les axes de cible sont alignés sur ceux de source mais le mesh ne bouge pas.
#l'échelle ne joue pas
#
#
#Select Source then Cible, press Alt+p, Cible's axis are realigned with Source's axis but the mesh don't move.
#The rotation is size free
#
#Free for use with Blender
#



from Blender import Object, NMesh, Redraw
import vect
from math import *

def applyTransform(mesh,mat):
	for v in mesh.verts:
		vec = (v.co[0], v.co[1], v.co[2])
		vec = vect.matxvec(mat,vec)
		v.co[0], v.co[1], v.co[2] = vec[0], vec[1], vec[2]

def matrot(ob):
	vx=ob.mat[0]
	vy=ob.mat[1]
	vz=ob.mat[2]
	isizex=1/ob.size[0]
	isizey=1/ob.size[1]
	isizez=1/ob.size[2]
	matx=vect.scale3(isizex,vx)
	maty=vect.scale3(isizey,vy)
	matz=vect.scale3(isizey,vz)
	mat=(matx,maty,matz)
	return mat




oblist =Object.GetSelected()
lenob=len(oblist)

if lenob !=2:
	raise ValueError,'Select 2 objects'

cible=oblist[0]
source=oblist[1]


if source.rot!=cible.rot:
	rotcible=matrot(cible)
	rotsource=matrot(source)
	rotsourcet = vect.invmat(rotsource)
	mat=vect.matxmat(rotcible,rotsourcet)
	ncible=cible.name
	me=NMesh.GetRaw(ncible)
	applyTransform(me,mat)
	NMesh.PutRaw(me,ncible)
	cible.rot=source.rot


hope it could be useful