[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3974] contrib/py/scripts/addons/ io_scene_ms3d: finished exporter - all possible ms3d features are fully implemented

Alexander Nussbaumer alpha-beta-release at gmx.net
Fri Nov 16 01:05:36 CET 2012


Revision: 3974
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3974
Author:   beta-tester
Date:     2012-11-16 00:05:33 +0000 (Fri, 16 Nov 2012)
Log Message:
-----------
finished exporter - all possible ms3d features are fully implemented

v0.5.0.0: importer 100%, exporter 100%

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_export.py

Modified: contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-15 19:28:54 UTC (rev 3973)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-16 00:05:33 UTC (rev 3974)
@@ -77,16 +77,16 @@
 
   exporter issues:
     - does only export active mesh object
-    - does only export the first existing material, if more than one material
-            is used per mesh
+    - does only export ms3d material
     - does only export the first existing UV texture coordinates,
             if more than one UV texture is used per mesh
-    - does not export keyframes
 
 
 todo:
-- add support for bones and joints and keyframes in exporter
+    - automatic material convertion at export
+    - export options to ms3d joints/animation/extra parts optional
 
+
 ###############################################################################
     exporter:
         Ms3dModel
@@ -142,8 +142,8 @@
                     .parent_name: 100%
                     .rotation: 100%
                     .position: 100%
-                    .rotation_keyframes: 0% (TODO)
-                    .translation_keyframes: 0% (TODO)
+                    .rotation_keyframes: 100%
+                    .translation_keyframes: 100%
                     .joint_ex
                         Ms3DJointEx
                             .color: 100%

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-15 19:28:54 UTC (rev 3973)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-16 00:05:33 UTC (rev 3974)
@@ -23,10 +23,10 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 9, 1),
+        'version': (0, 5, 0, 0),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        #'warning': "[2012-11-14] exporter is working (without animation)",
+        #'warning': "",
         '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_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-15 19:28:54 UTC (rev 3973)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-16 00:05:33 UTC (rev 3974)
@@ -439,30 +439,35 @@
 
         for blender_mesh_object in blender_mesh_objects:
             blender_bones = None
+            blender_action = None
             for blender_modifier in blender_mesh_object.modifiers:
                 if blender_modifier.type == 'ARMATURE' and blender_modifier.object.pose:
                     blender_bones = blender_modifier.object.data.bones
+                    blender_action = blender_modifier.object.animation_data.action
+                    blender_pose_bones = blender_modifier.object.pose.bones
                     break
 
+            ##########################
+            # bones
             blender_bones_ordered = self.build_blender_bone_dependency_order(blender_bones)
             for blender_bone_name in blender_bones_ordered:
                 blender_bone_oject = blender_bones[blender_bone_name]
                 ms3d_joint = Ms3dJoint()
                 ms3d_joint.__index = len(ms3d_model._joints)
 
-                blender_ms3d_joint = blender_bone_oject.ms3d
+                blender_bone_ms3d = blender_bone_oject.ms3d
                 blender_bone = blender_bone_oject
 
-                ms3d_joint.flags = Ms3dUi.flags_to_ms3d(blender_ms3d_joint.flags)
-                if blender_ms3d_joint.comment:
+                ms3d_joint.flags = Ms3dUi.flags_to_ms3d(blender_bone_ms3d.flags)
+                if blender_bone_ms3d.comment:
                     ms3d_joint._comment_object = Ms3dCommentEx()
-                    ms3d_joint._comment_object.comment = blender_ms3d_joint.comment
+                    ms3d_joint._comment_object.comment = blender_bone_ms3d.comment
                     ms3d_joint._comment_object.index = ms3d_joint.__index
 
-                ms3d_joint.joint_ex_object._color = blender_ms3d_joint.color[:]
+                ms3d_joint.joint_ex_object._color = blender_bone_ms3d.color[:]
 
-                if blender_ms3d_joint.name:
-                    ms3d_joint.name = blender_ms3d_joint.name
+                if blender_bone_ms3d.name:
+                    ms3d_joint.name = blender_bone_ms3d.name
                 else:
                     ms3d_joint.name = blender_bone.name
 
@@ -485,7 +490,47 @@
                 ms3d_model._joints.append(ms3d_joint)
                 blender_to_ms3d_bones[blender_bone.name] = ms3d_joint
 
+            ##########################
+            # animation
+            frames = None
+            frames_loc = set()
+            frames_rot = set()
 
+            for fcurve in blender_action.fcurves:
+                if fcurve.data_path.endswith(".location"):
+                    frames = frames_loc
+                elif fcurve.data_path.endswith(".rotation_euler") or fcurve.data_path.endswith(".rotation_quaternion"):
+                    frames = frames_rot
+
+                for keyframe_point in fcurve.keyframe_points:
+                    frames.add(keyframe_point.co.to_tuple(0)[0])
+
+            frames = set(frames_loc)
+            frames = frames.union(frames_rot)
+
+            frames_sorted = list(frames.intersection(range(blender_scene.frame_start, blender_scene.frame_end + 1)))
+            frames_sorted.sort()
+
+            time_base = 1.0 / (blender_scene.render.fps / blender_scene.render.fps_base)
+
+            frame_temp = blender_scene.frame_current
+            for current_frame in frames_sorted:
+                blender_scene.frame_set(current_frame)
+
+                current_time = current_frame * time_base
+                for blender_bone_name in blender_bones_ordered:
+                    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')
+
+                    ms3d_joint.translation_key_frames.append(Ms3dTranslationKeyframe(current_time, self.joint_correction(loc)))
+                    ms3d_joint.rotation_key_frames.append(Ms3dRotationKeyframe(current_time, self.joint_correction(rot)))
+
+            blender_scene.frame_set(frame_temp)
+
+
     ###########################################################################
     def get_ms3d_group_default_material_add_if(self, ms3d_model):
         markerName = "MaterialGroupDefault"



More information about the Bf-extensions-cvs mailing list