Axis orientation copier

this script will the copy the axis orientation of the axis of the active object to all the mesh object selected.
the mesh of the object still remain unchanged.

the script is placed in the ‘Object’ submenu. you just need to place it in the script folder of your ./blender.

it’s usefull to align the axis of a mesh with the axis of his skeleton.
it’s an upgrade of the previous script realign_axis.

further improvment : taking care of child objects.

#!BPY

""" Registration info for Blender menus: <- these words are ignored
Name: 'Axis Orientation Copy'
Blender: 233
Group: 'Object'
Tip: 'Copy the axis orientation of the active object to all selected mesh object'
"""


#
#----------------------------------------------
# A Vanpoucke (xand)
#from the previous script realignaxis
#----------------------------------------------
# Communiquer les problemes et erreurs sur:
#   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
# Copyright (C) 2003, 2004: Jean-Michel Soler
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------

from Blender import *
from Blender import Mathutils
from Blender.Mathutils import *


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




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

if lenob<2:
    Draw.PupMenu("Select at least 2 objects")
else :    
    source=oblist[0]
    nsource=source.name
    texte="Copy axis orientation from : " + nsource + " ?%t|OK"
    result=Draw.PupMenu(texte)


    for cible in oblist[1:]:
        if cible.getType()=='Mesh':
            if source.rot!=cible.rot:
                rotcible=cible.mat.toEuler().toMatrix()
                rotsource=source.mat.toEuler().toMatrix()
                rotsourcet = CopyMat(rotsource)
                rotsourcet.invert()
                mat=rotcible*rotsourcet
                ncible=cible.name
                me=NMesh.GetRaw(ncible)
                applyTransform(me,mat)
                NMesh.PutRaw(me,ncible)
                cible.makeDisplayList()
                cible.rot=source.rot