def __init__(self, ob ):
if ob.location.x != 0 or ob.location.y != 0 or ob.location.z != 0:
Report.warnings.append('ERROR: Mesh (%s): is offset from Armature - zero transform is required' %ob.name)
if ob.scale.x != 1 or ob.scale.y != 1 or ob.scale.z != 1:
Report.warnings.append('ERROR: Mesh (%s): has been scaled - scale(1,1,1) is required' %ob.name)
self.object = ob
self.bones = []
mats = {}
self.arm = arm = findArmature( ob )
arm.hide = False
self._restore_layers = list(arm.layers)
#arm.layers = [True]*20 # can not have anything hidden - REQUIRED?
for pbone in arm.pose.bones:
mybone = Bone( arm.data.bones[pbone.name], pbone, self )
self.bones.append( mybone )
if arm.name not in Report.armatures:
Report.armatures.append( arm.name )
## bad idea - allowing rotation of armature, means vertices must also be rotated,
## also a bug with applying the rotation, the Z rotation is lost
#x,y,z = arm.matrix_local.copy().inverted().to_euler()
#e = mathutils.Euler( (x,z,y) )
#self.object_space_transformation = e.to_matrix().to_4x4()
x,y,z = arm.matrix_local.to_euler()
if x != 0 or y != 0 or z != 0:
Report.warnings.append('ERROR: Armature: %s is rotated - (rotation is ignored)' %arm.name)
## setup bones for Ogre format ##
for b in self.bones:
b.rebuild_tree()
## walk bones, convert them ##
self.roots = []
ep = 0.0001
for b in self.bones:
if not b.parent:
b.compute_rest()
loc,rot,scl = b.ogre_rest_matrix.decompose()
#if loc.x or loc.y or loc.z:
# Report.warnings.append('ERROR: root bone has non-zero transform (location offset)')
#if rot.w > ep or rot.x > ep or rot.y > ep or rot.z < 1.0-ep:
# Report.warnings.append('ERROR: root bone has non-zero transform (rotation offset)')
self.roots.append( b )
评论列表
文章目录