[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