From 02f6ac3b41048c7d9d68c186af74530529a9ffcb Mon Sep 17 00:00:00 2001 From: ousttrue Date: Sun, 16 May 2010 17:51:37 +0900 Subject: [PATCH] implement bone motion import(import_anim_vmd). --- swig/blender24/vmd_import.py | 25 ++++++++++----------- swig/blender25/import_anim_vmd.py | 46 +++++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/swig/blender24/vmd_import.py b/swig/blender24/vmd_import.py index 17badd9..a4cffeb 100644 --- a/swig/blender24/vmd_import.py +++ b/swig/blender24/vmd_import.py @@ -19,7 +19,8 @@ This script imports a vmd file into Blender. 0.3 2010/03/05 use english name 0.4 2010/04/05 fix slerp 0.5 2010/04/16 add progress -0.6 20100506 C extension. +0.6 2010/05/06 C extension. +0.7 2010/05/16 modify C extension interface. ''' import Blender import os @@ -57,7 +58,13 @@ class ProgressBar(object): message="%s: %s" % (self.base, message) if message.__class__ is unicode: message=message.encode(INTERNAL_ENCODING) - Blender.Window.DrawProgressBar(self.progress, message) + try: + # ? + Blender.Window.DrawProgressBar(self.progress, message) + except AttributeError, error: + #print error + #print type(self.progress), self.progress, type(message), message + pass def finish(self): self.progress=1.0 @@ -116,7 +123,7 @@ def import_motion_key(l, o, progressCount): last_frame=0 for n in l.boneKeys: keyFrames=l.getBoneKeyFrameList(n) - boneName=englishmap.getEnglishBoneName(n.decode('cp932')) + boneName=englishmap.getEnglishBoneName(n).encode(INTERNAL_ENCODING) try: poseBone=pose.bones[boneName] bone=armature.bones[boneName] @@ -124,21 +131,11 @@ def import_motion_key(l, o, progressCount): armRotate=bone.matrix['ARMATURESPACE'].rotationPart() # quat armRotateQuaternion=armRotate.toQuat() - if armRotateQuaternion.w<0: - armRotateQuaternion.w=-armRotateQuaternion.w - armRotateQuaternion.x=-armRotateQuaternion.x - armRotateQuaternion.y=-armRotateQuaternion.y - armRotateQuaternion.z=-armRotateQuaternion.z # inv armRotateInv=Blender.Mathutils.Matrix(armRotate).transpose() # quat armRotateInvQuaternion=armRotateInv.toQuat() - if armRotateInvQuaternion.w<0: - armRotateInvQuaternion.w=-armRotateInvQuaternion.w - armRotateInvQuaternion.x=-armRotateInvQuaternion.x - armRotateInvQuaternion.y=-armRotateInvQuaternion.y - armRotateInvQuaternion.z=-armRotateInvQuaternion.z reverseFlag=False lastQ=None @@ -222,7 +219,7 @@ def import_shape_key(l, mesh, progressCount): keyFrames=l.getMorphKeyFrameList(n) if n=='base': continue - name=englishmap.getEnglishSkinName(n.decode('cp932')) + name=englishmap.getEnglishSkinName(n).encode(INTERNAL_ENCODING) try: curve=IPO_CURVE_get_or_create(ipo, name) except NameError, msg: diff --git a/swig/blender25/import_anim_vmd.py b/swig/blender25/import_anim_vmd.py index eb43ee5..d24d9fa 100644 --- a/swig/blender25/import_anim_vmd.py +++ b/swig/blender25/import_anim_vmd.py @@ -2,11 +2,13 @@ __author__= ['ousttrue'] __url__ = ("") -__version__= '20100515 0.1:' +__version__= '20100515 0.2:' __bpydoc__= '''\ vmd Importer This script imports a vmd into Blender for editing. +0.1 2010/05/15 first implement. +0.2 2010/05/16 implement bone motion. ''' import bpy @@ -31,7 +33,8 @@ def clampDegree(d): def multQuat(l, r): - q=mathutils.Quaternion((0, 0, 0), l.w*r.w-(l.x*r.x+l.y*r.y+l.z*r.z)) + q=mathutils.Quaternion() + q.w=l.w*r.w-(l.x*r.x+l.y*r.y+l.z*r.z) q.x=l.w*r.x+r.w*l.x+l.y*r.z-l.z*r.y q.y=l.w*r.y+r.w*l.y+l.z*r.x-l.x*r.z q.z=l.w*r.z+r.w*l.z+l.x*r.y-l.y*r.x @@ -40,7 +43,8 @@ def multQuat(l, r): def import_motion_key(l, o): print('import_motion_key: %s' % o.name) - + + armature = o.data pose = o.pose not_in_map={} @@ -51,31 +55,31 @@ def import_motion_key(l, o): keyFrames=l.getBoneKeyFrameList(n) boneName=englishmap.getEnglishBoneName(n) try: - poseBone=pose.bones[boneName] bone=armature.bones[boneName] # rot armRotate=bone.matrix_local.rotation_part() # quat armRotateQuaternion=armRotate.to_quat() - if armRotateQuaternion.w<0: - armRotateQuaternion.w=-armRotateQuaternion.w - armRotateQuaternion.x=-armRotateQuaternion.x - armRotateQuaternion.y=-armRotateQuaternion.y - armRotateQuaternion.z=-armRotateQuaternion.z + #if armRotateQuaternion.w<0: + # armRotateQuaternion.w=-armRotateQuaternion.w + # armRotateQuaternion.x=-armRotateQuaternion.x + # armRotateQuaternion.y=-armRotateQuaternion.y + # armRotateQuaternion.z=-armRotateQuaternion.z # inv armRotateInv=mathutils.Matrix(armRotate).transpose() # quat armRotateInvQuaternion=armRotateInv.to_quat() - if armRotateInvQuaternion.w<0: - armRotateInvQuaternion.w=-armRotateInvQuaternion.w - armRotateInvQuaternion.x=-armRotateInvQuaternion.x - armRotateInvQuaternion.y=-armRotateInvQuaternion.y - armRotateInvQuaternion.z=-armRotateInvQuaternion.z + #if armRotateInvQuaternion.w<0: + # armRotateInvQuaternion.w=-armRotateInvQuaternion.w + # armRotateInvQuaternion.x=-armRotateInvQuaternion.x + # armRotateInvQuaternion.y=-armRotateInvQuaternion.y + # armRotateInvQuaternion.z=-armRotateInvQuaternion.z reverseFlag=False lastQ=None + poseBone=pose.bones[boneName] for i in range(len(keyFrames.list)): key=keyFrames.getKey(i) #################### @@ -88,12 +92,14 @@ def import_motion_key(l, o): # convert left-handed y-up to right-handed z-up if reverseFlag: # reverse quaternion for slerp - q=mathutils.Quaternion((0, 0, 0), -key.q.w) + q=mathutils.Quaternion() + q.w=-key.q.w q.x=key.q.x q.y=key.q.z q.z=key.q.y else: - q=mathutils.Quaternion((0, 0, 0), key.q.w) + q=mathutils.Quaternion() + q.w=key.q.w q.x=-key.q.x q.y=-key.q.z q.z=-key.q.y @@ -109,10 +115,12 @@ def import_motion_key(l, o): (float(key.pos.x), float(key.pos.z), float(key.pos.y))) # insert - poseBone.keyframe_insert('rotation_quaternion', -1, keyFrames.getFrame(i)) - poseBone.keyframe_insert('location', -1, keyFrames.getFrame(i)) - last_frame=max(last_frame, keyFrames.getFrame(i)) + poseBone.keyframe_insert( + 'location', -1, keyFrames.getFrame(i)) + poseBone.keyframe_insert( + 'rotation_quaternion', -1, keyFrames.getFrame(i)) + last_frame=max(last_frame, keyFrames.getFrame(i)) counter+=1 except KeyError as msg: -- 2.11.0