OSDN Git Service

implement bone motion import(import_anim_vmd).
authorousttrue <ousttrue@gmail.com>
Sun, 16 May 2010 08:51:37 +0000 (17:51 +0900)
committerousttrue <ousttrue@gmail.com>
Sun, 16 May 2010 08:51:37 +0000 (17:51 +0900)
swig/blender24/vmd_import.py
swig/blender25/import_anim_vmd.py

index 17badd9..a4cffeb 100644 (file)
@@ -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:
index eb43ee5..d24d9fa 100644 (file)
@@ -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: