[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3996] contrib/py/scripts/addons/ io_scene_ms3d: fix: IK constraint influence to pose_bone for export.
Alexander Nussbaumer
alpha-beta-release at gmx.net
Thu Nov 22 19:05:06 CET 2012
Revision: 3996
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3996
Author: beta-tester
Date: 2012-11-22 18:05:05 +0000 (Thu, 22 Nov 2012)
Log Message:
-----------
fix: IK constraint influence to pose_bone for export.
add: export option: record each frame as key frame.
add: import option: to enlarge bones to next child.
Modified Paths:
--------------
contrib/py/scripts/addons/io_scene_ms3d/__init__.py
contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.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/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-11-22 09:49:41 UTC (rev 3995)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-11-22 18:05:05 UTC (rev 3996)
@@ -23,7 +23,7 @@
'description': "Import / Export MilkShape3D MS3D files"\
" (conform with v1.8.4)",
'author': "Alexander Nussbaumer",
- 'version': (0, 5, 0, 5),
+ 'version': (0, 5, 0, 6),
'blender': (2, 6, 3, 0),
'location': "File > Import & File > Export",
#'warning': "",
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-11-22 09:49:41 UTC (rev 3995)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-11-22 18:05:05 UTC (rev 3996)
@@ -474,6 +474,7 @@
frame_start = blender_scene.frame_start
frame_end = blender_scene.frame_end
frame_total = (frame_end - frame_start) + 1
+ frame_step = blender_scene.frame_step
frame_offset = 0
fps = blender_scene.render.fps * blender_scene.render.fps_base
@@ -503,9 +504,6 @@
ms3d_joint = Ms3dJoint()
ms3d_joint.__index = len(ms3d_model._joints)
- ms3d_joint.__bone_mat = blender_bones[blender_bone_name].matrix
- ms3d_joint.__bone_mati = blender_bones[blender_bone_name].matrix.inverted()
-
blender_bone_ms3d = blender_bone_oject.ms3d
blender_bone = blender_bone_oject
@@ -571,22 +569,23 @@
frames = frames.union(frames_rotation)
frames = frames.union(frames_scale)
- frames_sorted = list(
- frames.intersection(
- range(blender_scene.frame_start, blender_scene.frame_end + 1)
- )
- )
+ if not self.options.shrink_to_keys:
+ frames = frames.intersection(range(blender_scene.frame_start, blender_scene.frame_end + 1))
+ frames_sorted = list(frames)
frames_sorted.sort()
- frame_temp = blender_scene.frame_current
-
if self.options.shrink_to_keys and len(frames_sorted) >= 2:
frame_start = frames_sorted[0]
frame_end = frames_sorted[len(frames_sorted)-1]
frame_total = (frame_end - frame_start) + 1
frame_offset = frame_start - 1
+ if self.options.record_each_frame:
+ frames_sorted = range(int(frame_start), int(frame_end + 1), int(frame_step))
+
+ frame_temp = blender_scene.frame_current
+
for current_frame in frames_sorted:
blender_scene.frame_set(current_frame)
@@ -596,8 +595,15 @@
blender_pose_bone = blender_pose_bones[blender_bone_name]
ms3d_joint = blender_to_ms3d_bones[blender_bone_name]
- loc = blender_pose_bone.location
- rot = blender_pose_bone.matrix_basis.to_euler('XZY')
+ m1 = blender_bone.matrix_local.inverted()
+ if blender_pose_bone.parent:
+ m2 = blender_pose_bone.parent.matrix_channel.inverted()
+ else:
+ m2 = Matrix()
+ m3 = blender_pose_bone.matrix.copy()
+ m = ((m1 * m2) * m3)
+ loc = m.to_translation()
+ rot = m.to_euler('XZY')
ms3d_joint.translation_key_frames.append(
Ms3dTranslationKeyframe(
@@ -613,7 +619,7 @@
blender_scene.frame_set(frame_temp)
ms3d_model.animation_fps = fps
- ms3d_model.number_total_frames = frame_total
+ ms3d_model.number_total_frames = int(frame_total)
ms3d_model.current_time = ((blender_scene.frame_current - blender_scene.frame_start) + 1) * time_base
@@ -771,7 +777,7 @@
pass
for keyframe_point in fcurve.keyframe_points:
- frames.add(keyframe_point.co.to_tuple(0)[0] + frame_correction)
+ frames.add(int(keyframe_point.co[0] + frame_correction))
###############################################################################
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py 2012-11-22 09:49:41 UTC (rev 3995)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py 2012-11-22 18:05:05 UTC (rev 3996)
@@ -753,6 +753,22 @@
ms3d_joint.blender_edit_bone = blender_edit_bone
enable_edit_mode(False)
+ if self.options.joint_to_bones:
+ enable_edit_mode(True)
+ for ms3d_joint in ms3d_joints_ordered:
+ blender_edit_bone = blender_armature.edit_bones[ms3d_joint.name]
+ if blender_edit_bone.children:
+ new_length = 0.0
+ for child_bone in blender_edit_bone.children:
+ length = (child_bone.head - blender_edit_bone.head).length
+ if new_length <= 0 or length < new_length:
+ new_length = length
+ if new_length >= 0.01:
+ direction = blender_edit_bone.tail - blender_edit_bone.head
+ direction.normalize()
+ blender_edit_bone.tail = blender_edit_bone.head + (direction * new_length)
+ enable_edit_mode(False)
+
##########################
# post process bones
enable_edit_mode(False)
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_strings.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_strings.py 2012-11-22 09:49:41 UTC (rev 3995)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_strings.py 2012-11-22 18:05:05 UTC (rev 3996)
@@ -232,7 +232,11 @@
'PROP_DESC_NORMALIZE_WEIGHTS' : "normalize weights to 100%, weight' = weight(i) * (weight1 + weight2 + weight3) / 100.0",
'PROP_NAME_SHRINK_TO_KEYS' : "Shrink To Keys",
'PROP_DESC_SHRINK_TO_KEYS' : "shrinks the animation to region from first keyframe to last keyframe",
-
+ 'PROP_NAME_RECORD_EACH_FRAME' : "Bake Each Frame As Key",
+ 'PROP_DESC_RECORD_EACH_FRAME' : "if enabled, to each frame there will be baked a key",
+ 'LABEL_NAME_JOINT_TO_BONES' : "works only with some models!",
+ 'PROP_NAME_JOINT_TO_BONES' : "Joints To Bones",
+ 'PROP_DESC_JOINT_TO_BONES' : "changes the length of the bones",
'PROP_NAME_': "Name",
'PROP_DESC_': "Description",
# ms3d_str['']
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py 2012-11-22 09:49:41 UTC (rev 3995)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py 2012-11-22 18:05:05 UTC (rev 3996)
@@ -218,6 +218,7 @@
ICON_PROCESSING = 'OBJECT_DATAMODE'
ICON_ANIMATION = 'RENDER_ANIMATION'
ICON_ROTATION_MODE = 'BONE_DATA'
+ ICON_ERROR = 'ERROR'
###########################################################################
PROP_DEFAULT_VERBOSE = DEFAULT_VERBOSE
@@ -270,6 +271,8 @@
PROP_DEFAULT_ANIMATION = True
PROP_DEFAULT_NORMALIZE_WEIGHTS = True
PROP_DEFAULT_SHRINK_TO_KEYS = False
+ PROP_DEFAULT_RECORD_EACH_FRAME = False
+ PROP_DEFAULT_JOINT_TO_BONES = False
###########################################################################
PROP_ITEM_ROTATION_MODE_EULER = '0'
@@ -357,6 +360,12 @@
#options={'HIDDEN', },
)
+ prop_joint_to_bones = BoolProperty(
+ name=ms3d_str['PROP_NAME_JOINT_TO_BONES'],
+ description=ms3d_str['PROP_DESC_JOINT_TO_BONES'],
+ default=Ms3dUi.PROP_DEFAULT_JOINT_TO_BONES,
+ )
+
@property
def is_rotation_mode_euler(self):
return (Ms3dUi.PROP_ITEM_ROTATION_MODE_EULER \
@@ -375,6 +384,9 @@
def joint_length(self):
return self.prop_joint_size
+ @property
+ def joint_to_bones(self):
+ return self.prop_joint_to_bones
# draw the option panel
def draw(self, context):
@@ -398,6 +410,9 @@
col = box.column()
row = col.row()
row.prop(self, 'prop_joint_size')
+ box.prop(self, 'prop_joint_to_bones')
+ if (self.prop_joint_to_bones):
+ box.box().label(ms3d_str['LABEL_NAME_JOINT_TO_BONES'], icon=Ms3dUi.ICON_ERROR)
# entrypoint for MS3D -> blender
def execute(self, blender_context):
@@ -487,7 +502,13 @@
default=Ms3dUi.PROP_DEFAULT_SHRINK_TO_KEYS,
)
+ prop_record_each_frame = BoolProperty(
+ name=ms3d_str['PROP_NAME_RECORD_EACH_FRAME'],
+ description=ms3d_str['PROP_DESC_RECORD_EACH_FRAME'],
+ default=Ms3dUi.PROP_DEFAULT_RECORD_EACH_FRAME,
+ )
+
@property
def handle_animation(self):
return (Ms3dUi.PROP_ITEM_OBJECT_ANIMATION in self.prop_objects)
@@ -516,6 +537,10 @@
def shrink_to_keys(self):
return self.prop_shrink_to_keys
+ @property
+ def record_each_frame(self):
+ return self.prop_record_each_frame
+
##EXPORT_ACTIVE_ONLY:
##limit availability to only active mesh object
@classmethod
@@ -549,6 +574,7 @@
icon=Ms3dUi.ICON_ANIMATION)
box.prop(self, 'prop_normalize_weights')
box.prop(self, 'prop_shrink_to_keys')
+ box.prop(self, 'prop_record_each_frame')
"""
box.prop(self, 'prop_objects', icon='MESH_DATA', expand=True)
@@ -1543,7 +1569,6 @@
def poll(cls, context):
return True
-
# entrypoint for option
def execute(self, context):
return self.set_sence_to_metric(context)
More information about the Bf-extensions-cvs
mailing list