[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3931] contrib/py/scripts/addons/ io_scene_ms3d: add: importer - added bone weights

Alexander Nussbaumer alpha-beta-release at gmx.net
Mon Nov 5 19:07:56 CET 2012


Revision: 3931
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3931
Author:   beta-tester
Date:     2012-11-05 18:07:54 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
add: importer - added bone weights

100% of the planned features are implemented. importer is now final.

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_ui.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_utils.py

Modified: contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-05 05:59:33 UTC (rev 3930)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-05 18:07:54 UTC (rev 3931)
@@ -161,8 +161,8 @@
                     .flags: 0% (value only)
                     .vertex_ex
                         Ms3dVertexEx
-                            .bone_ids: 0%
-                            .weights: 0%
+                            .bone_ids: 100%
+                            .weights: 100%
                             .extra: 0%
             .triangles
                 Ms3dTriangle

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-05 05:59:33 UTC (rev 3930)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-05 18:07:54 UTC (rev 3931)
@@ -23,10 +23,10 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 8, 2),
+        'version': (0, 4, 8, 3),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        'warning': "[2012-11-04] exporter is working, but is incomplete",
+        'warning': "[2012-11-05] 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-05 05:59:33 UTC (rev 3930)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-11-05 18:07:54 UTC (rev 3931)
@@ -79,6 +79,7 @@
             enable_edit_mode,
             pre_setup_environment,
             post_setup_environment,
+            get_edge_split_modifier_add_if,
             )
     from io_scene_ms3d.ms3d_ui import (
             Ms3dUi,
@@ -255,9 +256,6 @@
                 ms3d_model.name + ".m")
         blender_mesh.ms3d.name = ms3d_model.name
 
-        blender_mesh.show_edge_seams = True
-        blender_mesh.show_edge_sharp = True
-
         ms3d_comment = ms3d_model.comment_object
         if ms3d_comment is not None:
             blender_mesh.ms3d.comment = ms3d_comment.comment
@@ -278,11 +276,7 @@
         ##########################
         # blender stuff:
         # create edge split modifire, to make sharp edges visible
-        blender_modifier = blender_mesh_object.modifiers.new(
-                "ms3d_smoothing_groups", type='EDGE_SPLIT')
-        blender_modifier.show_expanded = False
-        blender_modifier.use_edge_angle = False
-        blender_modifier.use_edge_sharp = True
+        blender_modifier = get_edge_split_modifier_add_if(blender_mesh_object)
 
         ##########################
         # blender stuff:
@@ -620,22 +614,57 @@
         for ms3d_vertex_index, ms3d_vertex in enumerate(ms3d_model.vertices):
             # prepare for later use for blender vertex group
             if ms3d_vertex.bone_id != Ms3dSpec.NONE_VERTEX_BONE_ID:
-                blender_vertex_group = ms3d_to_blender_vertex_groups.get(
-                        ms3d_vertex.bone_id)
-                if blender_vertex_group is None:
-                    ms3d_to_blender_vertex_groups[ms3d_vertex.bone_id] \
-                            = blender_vertex_group = []
-                blender_vertex_group.append(ms3d_vertex_index)
+                if ms3d_vertex.vertex_ex_object \
+                        and ( \
+                        ms3d_vertex.vertex_ex_object.bone_ids[0] != Ms3dSpec.NONE_VERTEX_BONE_ID \
+                        or ms3d_vertex.vertex_ex_object.bone_ids[1] != Ms3dSpec.NONE_VERTEX_BONE_ID \
+                        or ms3d_vertex.vertex_ex_object.bone_ids[2] != Ms3dSpec.NONE_VERTEX_BONE_ID \
+                        ):
+                    ms3d_vertex_group_ids_weights = []
+                    ms3d_vertex_group_ids_weights.appent(
+                            (ms3d_vertex.bone_id,
+                            (ms3d_vertex.vertex_ex_object.weight[0] % 100) / 100.0))
+                    if ms3d_vertex.vertex_ex_object.bone_ids[0] != Ms3dSpec.NONE_VERTEX_BONE_ID:
+                        ms3d_vertex_group_ids_weights.appent(
+                                (ms3d_vertex.vertex_ex_object.bone_ids[0],
+                                (ms3d_vertex.vertex_ex_object.weight[1] % 100) / 100.0))
+                    if ms3d_vertex.vertex_ex_object.bone_ids[1] != Ms3dSpec.NONE_VERTEX_BONE_ID:
+                        ms3d_vertex_group_ids_weights.appent(
+                                (ms3d_vertex.vertex_ex_object.bone_ids[1],
+                                (ms3d_vertex.vertex_ex_object.weight[2] % 100) / 100.0))
+                    if ms3d_vertex.vertex_ex_object.bone_ids[2] != Ms3dSpec.NONE_VERTEX_BONE_ID:
+                        ms3d_vertex_group_ids_weights.appent(
+                                (ms3d_vertex.vertex_ex_object.bone_ids[2],
+                                1.0 -
+                                ((ms3d_vertex.vertex_ex_object.weight[0] % 100)
+                                + (ms3d_vertex.vertex_ex_object.weight[1] % 100)
+                                + (ms3d_vertex.vertex_ex_object.weight[2] % 100)) / 100.0
+                                ))
+                else:
+                    ms3d_vertex_group_ids_weights = [(ms3d_vertex.bone_id, 1.0), ]
 
+                for ms3d_vertex_group_id_weight in ms3d_vertex_group_ids_weights:
+                    ms3d_vertex_group_id = ms3d_vertex_group_id_weight[0]
+                    blender_vertex_weight = ms3d_vertex_group_id_weight[1]
+                    blender_vertex_group = ms3d_to_blender_vertex_groups.get(
+                            ms3d_vertex_group_id)
+                    if blender_vertex_group is None:
+                        ms3d_to_blender_vertex_groups[ms3d_vertex_group_id] \
+                                = blender_vertex_group = []
+                    blender_vertex_group.append((ms3d_vertex_index, blender_vertex_weight))
+
         ##########################
         # blender stuff:
         # create all vertex groups to be used for bones
-        for ms3d_bone_id, blender_vertex_index_list \
+        for ms3d_bone_id, blender_vertex_index_weight_list \
                 in ms3d_to_blender_vertex_groups.items():
             ms3d_name = ms3d_model.joints[ms3d_bone_id].name
             blender_vertex_group = blender_mesh_object.vertex_groups.new(
                     ms3d_name)
-            blender_vertex_group.add(blender_vertex_index_list, 1.0, 'REPLACE')
+            for blender_vertex_id_weight in blender_vertex_index_weight_list:
+                blender_vertex_index = blender_vertex_id_weight[0]
+                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')

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py	2012-11-05 05:59:33 UTC (rev 3930)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_ui.py	2012-11-05 18:07:54 UTC (rev 3931)
@@ -58,6 +58,7 @@
             )
     from io_scene_ms3d.ms3d_utils import (
             enable_edit_mode,
+            get_edge_split_modifier_add_if,
             )
     #from io_scene_ms3d.ms3d_import import ( Ms3dImporter, )
     #from io_scene_ms3d.ms3d_export import ( Ms3dExporter, )
@@ -683,15 +684,7 @@
                 layer_smoothing_group = bm.faces.layers.int.new(
                         ms3d_str['OBJECT_LAYER_SMOOTHING_GROUP'])
                 blender_mesh_object = context.object
-                blender_modifier = blender_mesh_object.modifiers.get(
-                        ms3d_str['OBJECT_MODIFIER_SMOOTHING_GROUP'])
-                if blender_modifier is None:
-                    blender_modifier = blender_mesh_object.modifiers.new(
-                            ms3d_str['OBJECT_MODIFIER_SMOOTHING_GROUP'],
-                            type='EDGE_SPLIT')
-                    blender_modifier.show_expanded = False
-                    blender_modifier.use_edge_angle = False
-                    blender_modifier.use_edge_sharp = True
+                get_edge_split_modifier_add_if(blender_mesh_object)
             blender_face_list = []
             for bmf in bm.faces:
                 if not bmf.smooth:

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_utils.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_utils.py	2012-11-05 05:59:33 UTC (rev 3930)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_utils.py	2012-11-05 18:07:54 UTC (rev 3931)
@@ -46,8 +46,13 @@
 # if it's there, reload everything
 if ('bpy' in locals()):
     import imp
+    if 'io_scene_ms3d.ms3d_strings' in locals():
+        imp.reload(io_scene_ms3d.ms3d_strings)
     pass
 else:
+    from io_scene_ms3d.ms3d_strings import (
+            ms3d_str,
+            )
     pass
 
 
@@ -168,11 +173,29 @@
     # restore pre operator undo state
     blender_context.user_preferences.edit.use_global_undo = porter.undo
 
+
 ###############################################################################
+def get_edge_split_modifier_add_if(blender_mesh_object):
+    blender_modifier = blender_mesh_object.modifiers.get(
+            ms3d_str['OBJECT_MODIFIER_SMOOTHING_GROUP'])
 
+    if blender_modifier is None:
+        blender_modifier = blender_mesh_object.modifiers.new(
+                ms3d_str['OBJECT_MODIFIER_SMOOTHING_GROUP'],
+                type='EDGE_SPLIT')
+        blender_modifier.show_expanded = False
+        blender_modifier.use_edge_angle = False
+        blender_modifier.use_edge_sharp = True
 
+        blender_mesh_object.data.show_edge_seams = True

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list