[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3932] contrib/py/scripts/addons/ io_scene_ms3d: add: exporter - bone ids and weights

Alexander Nussbaumer alpha-beta-release at gmx.net
Mon Nov 5 23:10:36 CET 2012


Revision: 3932
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3932
Author:   beta-tester
Date:     2012-11-05 22:10:31 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
add: exporter - bone ids and weights

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-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-05 22:10:31 UTC (rev 3932)
@@ -95,13 +95,13 @@
             .vertices
                 Ms3dVertex
                     .vertex: 100%
-                    .bone_id: 0%
-                    .reference_count: 0%
+                    .bone_id: 100%
+                    .reference_count: 100%
                     .flags: 0%
                     .vertex_ex
                         Ms3dVertexEx
-                            .bone_ids: 0%
-                            .weights: 0%
+                            .bone_ids: 100%
+                            .weights: 100%
                             .extra: 0%
             .triangles
                 Ms3dTriangle
@@ -111,7 +111,7 @@
                     .group_index: 100%
                     .smoothing_group: 100%
                     .flags: 0%
-                    .vertex_normals: 80% (not tested yet)
+                    .vertex_normals: 100%
             .groups
                 Ms3dGroup
                     .name: 100%

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-05 22:10:31 UTC (rev 3932)
@@ -23,7 +23,7 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 8, 3),
+        'version': (0, 4, 8, 4),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
         'warning': "[2012-11-05] exporter is working, but is incomplete",

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-05 22:10:31 UTC (rev 3932)
@@ -188,12 +188,6 @@
 
     ###########################################################################
     def from_blender(self, blender_context, ms3d_model):
-        blender_mesh_objects = self.create_geometry(blender_context, ms3d_model)
-        self.create_animation(blender_context, ms3d_model, blender_mesh_objects)
-
-
-    ###########################################################################
-    def create_geometry(self, blender_context, ms3d_model):
         blender_mesh_objects = []
 
         ##EXPORT_ACTIVE_ONLY:
@@ -211,6 +205,14 @@
                     and blender_object.is_visible(blender_context.scene):
                 blender_mesh_objects.append(blender_object)
 
+        blender_to_ms3d_bones = {}
+
+        self.create_animation(blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones)
+        self.create_geometry(blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones)
+
+
+    ###########################################################################
+    def create_geometry(self, blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones):
         blender_scene = blender_context.scene
 
         blender_to_ms3d_vertices = {}
@@ -291,6 +293,8 @@
                 else:
                     layer_uv = bm.loops.layers.uv.new(ms3d_str['OBJECT_LAYER_UV'])
 
+            layer_deform = bm.verts.layers.deform.active
+
             ##########################
             # handle vertices
             for bmv in bm.verts:
@@ -301,6 +305,34 @@
                     ms3d_vertex.__index = index
                     ms3d_vertex._vertex = (self.matrix_scaled_coordination_system \
                             * (bmv.co + blender_mesh_object.location))[:]
+
+                    if layer_deform:
+                        blender_vertex_group_ids = bmv[layer_deform]
+                        if blender_vertex_group_ids:
+                            temp_weight = 0
+                            count = 0
+                            for blender_index, blender_weight in blender_vertex_group_ids.items():
+                                ms3d_joint = blender_to_ms3d_bones.get(
+                                        blender_mesh_object.vertex_groups[blender_index].name)
+                                if ms3d_joint:
+                                    if count == 0:
+                                        ms3d_vertex.bone_id = ms3d_joint.__index
+                                        temp_weight = blender_weight
+                                    elif count == 1:
+                                        ms3d_vertex._vertex_ex_object.bone_ids[0] = ms3d_joint.__index
+                                        ms3d_vertex._vertex_ex_object.weights[0] = temp_weight * 100
+                                        ms3d_vertex._vertex_ex_object.weights[1] = blender_weight * 100
+                                    elif count == 2:
+                                        ms3d_vertex._vertex_ex_object.bone_ids[1] = ms3d_joint.__index
+                                        ms3d_vertex._vertex_ex_object.weights[2] = blender_weight * 100
+                                    #elif count == 3:
+                                    #    ms3d_vertex._vertex_ex_object.bone_ids[2] = ms3d_joint.__index
+
+                                # only first three weights will be supported
+                                count+= 1
+                                if count > 3:
+                                    break
+
                     ms3d_model._vertices.append(ms3d_vertex)
                     blender_to_ms3d_vertices[bmv] = ms3d_vertex
 
@@ -345,24 +377,25 @@
                     ms3d_triangle.smoothing_group = bmf[layer_smoothing_group]
                     ms3d_model._triangles.append(ms3d_triangle)
 
-                    ms3d_material = self.get_ms3d_material_add_if(blender_mesh, ms3d_model, blender_to_ms3d_materials, bmf.material_index)
+                    ms3d_material = self.get_ms3d_material_add_if(blender_mesh, ms3d_model,
+                            blender_to_ms3d_materials, bmf.material_index)
                     ms3d_group = blender_to_ms3d_groups.get(bmf[layer_group])
 
                     ##EXPORT_ACTIVE_ONLY:
                     if ms3d_group is not None:
-                        if ms3d_group.material_index is None:
-                            if ms3d_material is None:
-                                ms3d_group.material_index = Ms3dSpec.DEFAULT_GROUP_MATERIAL_INDEX
+                        if ms3d_material is None:
+                            ms3d_group.material_index = Ms3dSpec.DEFAULT_GROUP_MATERIAL_INDEX
+                        else:
+                            if ms3d_group.material_index is None:
+                                ms3d_group.material_index = ms3d_material.__index
                             else:
-                                ms3d_group.material_index = ms3d_material.__index
-                        else:
-                            if ms3d_material.__index != ms3d_group.material_index:
-                                ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
+                                if ms3d_group.material_index != ms3d_material.__index:
+                                    ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
                     else:
                         if ms3d_material is not None:
                             ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
                         else:
-                            ms3d_group = self.get_ms3d_group_no_material_add_if(ms3d_model)
+                            ms3d_group = self.get_ms3d_group_default_material_add_if(ms3d_model)
 
                     if ms3d_group is not None:
                         ms3d_group._triangle_indices.append(ms3d_triangle.__index)
@@ -388,25 +421,67 @@
             # DEBUG:
             #print("DEBUG: blender_mesh_object: {}".format(blender_mesh_object))
 
-        return blender_mesh_objects
 
-
     ###########################################################################
-    def create_animation(self, blender_context, ms3d_model, blender_mesh_objects):
+    def create_animation(self, blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones):
         ##########################
         # setup scene
         blender_scene = blender_context.scene
         ms3d_model.animation_fps = blender_scene.render.fps * blender_scene.render.fps_base
         ms3d_model.number_total_frames = (blender_scene.frame_end - blender_scene.frame_start) + 1
-        ms3d_model.current_time = (blender_scene.frame_current - blender_scene.frame_start) / (blender_scene.render.fps * blender_scene.render.fps_base)
+        ms3d_model.current_time = (blender_scene.frame_current - blender_scene.frame_start)\
+                / (blender_scene.render.fps * blender_scene.render.fps_base)
 
-        pass
+        #return
+        ### not ready yet
+        for blender_mesh_object in blender_mesh_objects:
+            blender_bones = None
+            for blender_modifier in blender_mesh_object.modifiers:
+                if blender_modifier.type == 'ARMATURE' and blender_modifier.object.pose:
+                    blender_bones = blender_modifier.object.pose.bones
+                    break
 
+            for blender_bone_oject in blender_bones:
+                ms3d_joint = Ms3dJoint()
+                ms3d_joint.__index = len(ms3d_model._joints)
 
+                blender_ms3d_joint = blender_bone_oject.bone.ms3d
+                blender_bone = blender_bone_oject
+
+                if blender_ms3d_joint.name:
+                    ms3d_joint.name = blender_ms3d_joint.name
+                else:
+                    ms3d_joint.name = blender_bone.name
+
+                if blender_bone.parent:
+                    if blender_ms3d_joint.name:
+                        ms3d_joint.parent_name = blender_bone.parent.bone.ms3d.name
+                    else:

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list