[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3913] contrib/py/scripts/addons/ io_scene_ms3d: fix: import bones; add: import animation

Alexander Nussbaumer alpha-beta-release at gmx.net
Thu Nov 1 17:52:16 CET 2012


Revision: 3913
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3913
Author:   beta-tester
Date:     2012-11-01 16:52:11 +0000 (Thu, 01 Nov 2012)
Log Message:
-----------
fix: import bones; add: import animation

Modified Paths:
--------------
    contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
    contrib/py/scripts/addons/io_scene_ms3d/__init__.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_strings.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py

Modified: contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-01 09:28:42 UTC (rev 3912)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-01 16:52:11 UTC (rev 3913)
@@ -209,8 +209,8 @@
                     .parent_name: 100%
                     .rotation: 100%
                     .position: 100%
-                    .rotation_keyframes: 0%
-                    .translation_keyframes: 0%
+                    .rotation_keyframes: 100%
+                    .translation_keyframes: 100%
                     .joint_ex
                         Ms3DJointEx
                             .color: 100% (value only)

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-01 09:28:42 UTC (rev 3912)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-01 16:52:11 UTC (rev 3913)
@@ -23,10 +23,10 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 0, 5),
+        'version': (0, 4, 0, 6),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        'warning': "[2012-10-23] exporter is only partial implemented",
+        'warning': "[2012-11-01] exporter is only partial implemented",
         'wiki_url': "http://wiki.blender.org/index.php/Extensions:2.6/Py/"\
                 "Scripts/Import-Export/MilkShape3D_MS3D",
         'tracker_url': "http://projects.blender.org/tracker/index.php"\

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-11-01 09:28:42 UTC (rev 3912)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-11-01 16:52:11 UTC (rev 3913)
@@ -214,9 +214,12 @@
     ###########################################################################
     def to_blender(self, blender_context, ms3d_model):
         blender_mesh_object = self.create_geometry(blender_context, ms3d_model)
-        blender_armature_object = self.create_animation(blender_context, ms3d_model, blender_mesh_object)
+        blender_armature_object = self.create_animation(
+                blender_context, ms3d_model, blender_mesh_object)
 
-        self.organize_objects(blender_context, ms3d_model, [blender_mesh_object, blender_armature_object])
+        self.organize_objects(
+                blender_context, ms3d_model,
+                [blender_mesh_object, blender_armature_object])
 
 
     ###########################################################################
@@ -230,8 +233,10 @@
 
         blender_scene = blender_context.scene
 
-        blender_group = blender_context.blend_data.groups.new(ms3d_model.name + ".g")
-        blender_empty_object = blender_context.blend_data.objects.new(ms3d_model.name + ".e", None)
+        blender_group = blender_context.blend_data.groups.new(
+                ms3d_model.name + ".g")
+        blender_empty_object = blender_context.blend_data.objects.new(
+                ms3d_model.name + ".e", None)
         blender_empty_object.location = blender_scene.cursor_location
         blender_scene.objects.link(blender_empty_object)
         blender_group.objects.link(blender_empty_object)
@@ -247,7 +252,8 @@
         ##########################
         # blender stuff:
         # create a blender Mesh
-        blender_mesh = blender_context.blend_data.meshes.new(ms3d_model.name + ".m")
+        blender_mesh = blender_context.blend_data.meshes.new(
+                ms3d_model.name + ".m")
         blender_mesh.ms3d.name = ms3d_model.name
         ms3d_comment = ms3d_model.comment_object
         if ms3d_comment is not None:
@@ -355,7 +361,8 @@
         ms3d_to_blender_material = {}
         for ms3d_material_index, ms3d_material in enumerate(
                 ms3d_model.materials):
-            blender_material = blender_context.blend_data.materials.new(ms3d_material.name)
+            blender_material = blender_context.blend_data.materials.new(
+                    ms3d_material.name)
 
             # custom datas
             blender_material.ms3d.name = ms3d_material.name
@@ -591,7 +598,8 @@
 
         ##########################
         # create new blender_armature_object
-        blender_armature = blender_context.blend_data.armatures.new(ms3d_armature_name)
+        blender_armature = blender_context.blend_data.armatures.new(
+                ms3d_armature_name)
         blender_armature.ms3d.name = ms3d_model.name
         blender_armature.draw_type = 'STICK'
         blender_armature.show_axes = True
@@ -639,16 +647,16 @@
             item = ms3d_joint_by_name.get(ms3d_joint.name)
             if item is None:
                 ms3d_joint.__children = []
-                ms3d_joint.__matrix_local = Matrix()
-                ms3d_joint.__matrix_global = Matrix()
                 ms3d_joint_by_name[ms3d_joint.name] = ms3d_joint
 
-            matrix_local = (Matrix.Rotation(ms3d_joint.rotation[2], 4, 'Z')
+            matrix_local_rot = (Matrix.Rotation(ms3d_joint.rotation[2], 4, 'Z')
                     * Matrix.Rotation(ms3d_joint.rotation[1], 4, 'Y')
                     ) * Matrix.Rotation(ms3d_joint.rotation[0], 4, 'X')
             matrix_local = Matrix.Translation(Vector(ms3d_joint.position)
-                    ) * matrix_local
+                    ) * matrix_local_rot
 
+            ms3d_joint.__matrix_local_rot = matrix_local_rot
+            ms3d_joint.__matrix_global_rot = matrix_local_rot
             ms3d_joint.__matrix_local = matrix_local
             ms3d_joint.__matrix_global = matrix_local
 
@@ -661,6 +669,10 @@
                     matrix_global = ms3d_joint_parent.__matrix_global \
                             * matrix_local
                     ms3d_joint.__matrix_global = matrix_global
+                    
+                    matrix_global_rot = ms3d_joint_parent.__matrix_global_rot \
+                            * matrix_local_rot
+                    ms3d_joint.__matrix_global_rot = matrix_global_rot
 
         ##########################
         # ms3d_joint to blender_edit_bone
@@ -681,34 +693,19 @@
                     = self.matrix_scaled_coordination_system \
                     * ms3d_joint_vector
 
-            number_children = len(ms3d_joint.__children)
-            if number_children > 0:
-                vector_midpoint = Vector()
-                for item_child in ms3d_joint.__children:
-                    ms3d_joint_child_vector \
-                            = ms3d_joint_by_name[item_child.name].__matrix_global \
-                            * Vector()
-                    vector_midpoint += ms3d_joint_child_vector \
-                            - ms3d_joint_vector
-                vector_midpoint /= number_children
-                vector_midpoint.normalize()
-                blender_edit_bone.tail = blender_edit_bone.head \
-                        + self.matrix_scaled_coordination_system \
-                        * vector_midpoint
-            else:
-                vector_tail_end = Vector()
-                if ms3d_joint.parent_name:
-                    ms3d_joint_parent_vector \
-                            = ms3d_joint_by_name[ms3d_joint.parent_name].__matrix_global \
-                            * Vector()
-                    vector_tail_end = ms3d_joint_vector \
-                            - ms3d_joint_parent_vector
-                else:
-                    #dummy tail
-                    vector_tail_end = ms3d_joint.__matrix_global * Vector()
-                vector_tail_end.normalize()
-                blender_edit_bone.tail = blender_edit_bone.head \
-                        + self.matrix_scaled_coordination_system * vector_tail_end
+            if ms3d_joint.parent_name:
+                ms3d_joint_parent_vector \
+                        = ms3d_joint_by_name[ms3d_joint.parent_name].__matrix_global \
+                        * Vector()
+                        
+            vector_tail_end_up = ms3d_joint.__matrix_global_rot * Vector((0,1,0))
+            vector_tail_end_dir = ms3d_joint.__matrix_global_rot * Vector((0,0,1))
+            vector_tail_end_up.normalize()
+            vector_tail_end_dir.normalize()
+            blender_edit_bone.tail = blender_edit_bone.head \
+                    + self.matrix_scaled_coordination_system * vector_tail_end_dir
+            blender_edit_bone.align_roll(
+                    self.matrix_scaled_coordination_system * vector_tail_end_up)
 
             if ms3d_joint.parent_name:
                 ms3d_joint_parent = ms3d_joint_by_name[ms3d_joint.parent_name]
@@ -721,16 +718,7 @@
 
         ##########################
         # post process bones
-        enable_edit_mode(True)
-        select_all(True)
-        if ops.armature.calculate_roll.poll():
-            ops.armature.calculate_roll(type='Y')
-        select_all(False)
         enable_edit_mode(False)
-
-        ##########################
-        # post process bones
-        enable_edit_mode(False)
         for ms3d_joint_name, ms3d_joint in ms3d_joint_by_name.items():
             blender_bone = blender_armature.bones.get(
                     ms3d_joint.blender_bone_name)
@@ -763,9 +751,7 @@
         blender_armature_object.animation_data.action = blender_action
 
         ##########################
-        # this part is not correct implemented !
-        # currently i have absolute no idea how to fix.
-        # maybe somebody else can fix it.
+        # this part is incomplete ! (some animations are not correct)
         for ms3d_joint_name, ms3d_joint  in ms3d_joint_by_name.items():
             blender_pose_bone = blender_armature_object.pose.bones.get(
                     ms3d_joint.blender_bone_name)
@@ -784,8 +770,8 @@
                         Vector(translation_key_frames.position))
                 v = (matrix_local) * Vector()
                 fcurve_location_x.keyframe_points.insert(frame, v[0])
-                fcurve_location_y.keyframe_points.insert(frame, v[1])
-                fcurve_location_z.keyframe_points.insert(frame, v[2])

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list