[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