[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3961] contrib/py/scripts/addons/ io_scene_ms3d: fix: importer - bring joints in the correct order of its dependencies ( only in case that they are not already ordered)

Alexander Nussbaumer alpha-beta-release at gmx.net
Tue Nov 13 22:33:28 CET 2012


Revision: 3961
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3961
Author:   beta-tester
Date:     2012-11-13 21:33:26 +0000 (Tue, 13 Nov 2012)
Log Message:
-----------
fix: importer - bring joints in the correct order of its dependencies (only in case that they are not already ordered)

Modified Paths:
--------------
    contrib/py/scripts/addons/io_scene_ms3d/__init__.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-13 15:13:00 UTC (rev 3960)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-13 21:33:26 UTC (rev 3961)
@@ -23,10 +23,10 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 8, 5),
+        'version': (0, 4, 8, 6),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        'warning': "[2012-11-08] exporter is working, but is incomplete",
+        'warning': "[2012-11-13] exporter is working, but is incomplete",
         '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-13 15:13:00 UTC (rev 3960)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-11-13 21:33:26 UTC (rev 3961)
@@ -571,6 +571,41 @@
         return blender_mesh_object
 
     ###########################################################################
+    def build_ms3d_joint_dependency_order(self, ms3d_joints):
+        ms3d_joints_children = {"": {}}
+        for ms3d_joint in ms3d_joints:
+            if ms3d_joint.parent_name:
+                ms3d_joint_children = ms3d_joints_children.get(ms3d_joint.parent_name)
+                if ms3d_joint_children is None:
+                    ms3d_joint_children = ms3d_joints_children[ms3d_joint.parent_name] = {}
+            else:
+                ms3d_joint_children = ms3d_joints_children[""]
+
+            ms3d_joint_children[ms3d_joint.name] = ms3d_joint
+
+        ms3d_joints_ordered = []
+        self.traverse_dependencies(
+                ms3d_joints_ordered,
+                ms3d_joints_children,
+                "")
+        return ms3d_joints_ordered
+
+
+    ###########################################################################
+    def traverse_dependencies(self, ms3d_joints_ordered, ms3d_joints_children, key):
+        ms3d_joint_children = ms3d_joints_children.get(key)
+        if ms3d_joint_children:
+            for item in ms3d_joint_children.items():
+                ms3d_joint_name = item[0]
+                ms3d_joint = item[1]
+                ms3d_joints_ordered.append(ms3d_joint)
+                self.traverse_dependencies(
+                        ms3d_joints_ordered,
+                        ms3d_joints_children,
+                        ms3d_joint_name)
+
+
+    ###########################################################################
     def create_animation(self, blender_context, ms3d_model, blender_mesh_object):
         ##########################
         # setup scene
@@ -609,6 +644,15 @@
         blender_armature_object.show_x_ray = True
 
         ##########################
+        # create new modifier
+        blender_modifier = blender_mesh_object.modifiers.new(
+                ms3d_armature_name, type='ARMATURE')
+        blender_modifier.show_expanded = False
+        blender_modifier.use_vertex_groups = True
+        blender_modifier.use_bone_envelopes = False
+        blender_modifier.object = blender_armature_object
+
+        ##########################
         # prepare for vertex groups
         ms3d_to_blender_vertex_groups = {}
         for ms3d_vertex_index, ms3d_vertex in enumerate(ms3d_model.vertices):
@@ -666,17 +710,14 @@
                 blender_vertex_weight = blender_vertex_id_weight[1]
                 blender_vertex_group.add((blender_vertex_index, ), blender_vertex_weight, 'ADD')
 
-        blender_modifier = blender_mesh_object.modifiers.new(
-                ms3d_armature_name, type='ARMATURE')
-        blender_modifier.show_expanded = False
-        blender_modifier.use_vertex_groups = True
-        blender_modifier.use_bone_envelopes = False
-        blender_modifier.object = blender_armature_object
+        ##########################
+        # bring joints in the correct order
+        ms3d_joints_ordered = self.build_ms3d_joint_dependency_order(ms3d_model.joints)
 
         ##########################
         # prepare joint data for later use
         ms3d_joint_by_name = {}
-        for ms3d_joint in ms3d_model.joints:
+        for ms3d_joint in ms3d_joints_ordered:
             item = ms3d_joint_by_name.get(ms3d_joint.name)
             if item is None:
                 ms3d_joint.__children = []
@@ -711,7 +752,7 @@
         # ms3d_joint to blender_edit_bone
         blender_scene.objects.active = blender_armature_object
         enable_edit_mode(True)
-        for ms3d_joint in ms3d_model.joints:
+        for ms3d_joint in ms3d_joints_ordered:
             blender_edit_bone = blender_armature.edit_bones.new(ms3d_joint.name)
             blender_edit_bone.use_connect = False
             blender_edit_bone.use_inherit_rotation = True
@@ -726,11 +767,6 @@
                     = self.matrix_scaled_coordination_system \
                     * ms3d_joint_vector
 
-            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()



More information about the Bf-extensions-cvs mailing list