[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3917] contrib/py/scripts/addons/ io_scene_ms3d: fix: exporter - is now able to export active mesh object

Alexander Nussbaumer alpha-beta-release at gmx.net
Sat Nov 3 11:10:48 CET 2012


Revision: 3917
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3917
Author:   beta-tester
Date:     2012-11-03 10:10:43 +0000 (Sat, 03 Nov 2012)
Log Message:
-----------
fix: exporter - is now able to export active mesh object

the exporter takes only ms3d-properties and ignores the blender-properties until i found a proper way to convert blender-props to ms3d-props automatically.

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
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py
    contrib/py/scripts/addons/io_scene_ms3d/ms3d_spec.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-02 13:29:59 UTC (rev 3916)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-11-03 10:10:43 UTC (rev 3917)
@@ -73,9 +73,10 @@
 
 known issues:
   importer issues:
-    - does not import keyframes
+    -/-
 
   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 the first existing UV texture coordinates,
@@ -83,13 +84,10 @@
     - does not export bones
     - does not export joints
     - does not export keyframes
-    - does not export comments (will never be supported - blender doesn't
-            have similar stuff)
 
 
 todo:
-- add support for bones and joints in exporter
-- add support for keyframes
+- add support for bones and joints and keyframes in exporter
 
 ###############################################################################
     exporter:
@@ -110,7 +108,7 @@
                     .vertex_indices: 100%
                     .s: 100%
                     .t: 100%
-                    .group_index: 20% (not tested yet: TODO: auto generate groups from blender data, by materials)
+                    .group_index: 100%
                     .smoothing_group: 100%
                     .flags: 0%
                     .vertex_normals: 80% (not tested yet)
@@ -118,28 +116,28 @@
                 Ms3dGroup
                     .name: 100%
                     .triangle_indices: 100%
-                    .material_index: 0% (TODO: auto generate groups from blender data, by materials)
+                    .material_index: 100%
                     .comment: 100%
                     .flags: 100%
             .materials
                 Ms3dMaterial
-                    name: 0%
-                    ambient: 0%
-                    diffuse: 0%
-                    specular: 0%
-                    emissive: 0%
-                    shininess: 0%
-                    transparency: 0%
-                    mode: 0%
-                    texture: 0%
-                    alphamap: 0%
-                    comment: 0%
-            .comment: 0%
+                    name: 100% (only ms3d-properties)
+                    ambient: 100% (only ms3d-properties)
+                    diffuse: 100% (only ms3d-properties)
+                    specular: 100% (only ms3d-properties)
+                    emissive: 100% (only ms3d-properties)
+                    shininess: 100% (only ms3d-properties)
+                    transparency: 100% (only ms3d-properties)
+                    mode: 100% (only ms3d-properties)
+                    texture: 100% (only ms3d-properties)
+                    alphamap: 100% (only ms3d-properties)
+                    comment: 100% (only ms3d-properties)
+            .comment: 100% (only ms3d-properties)
             .model_ex
                 Ms3dModelEx
-                    .joint_size: 0%
-                    .transparency_mode: 0%
-                    .alpha_ref: 0%
+                    .joint_size: 100% (only ms3d-properties)
+                    .transparency_mode: 100% (only ms3d-properties)
+                    .alpha_ref: 100% (only ms3d-properties)
             .joints
                 Ms3dJoint
                     .name: 0%

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-02 13:29:59 UTC (rev 3916)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-11-03 10:10:43 UTC (rev 3917)
@@ -23,10 +23,10 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 0, 6),
+        'version': (0, 4, 0, 7),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        'warning': "[2012-11-01] exporter is only partial implemented",
+        'warning': "[2012-11-03] exporter 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_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-02 13:29:59 UTC (rev 3916)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-11-03 10:10:43 UTC (rev 3917)
@@ -191,15 +191,20 @@
         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 = []
 
-        if self.options.prop_selected:
-            source = blender_context.selected_objects
-        else:
-            source = blender_context.blend_data.objects
+        ##EXPORT_ACTIVE_ONLY:
+        ##if self.options.prop_selected:
+        ##    source = blender_context.selected_objects
+        ##else:
+        ##    source = blender_context.blend_data.objects
+        ##
+        ## temporary, handle only the active object, for easy handling
+        source = (blender_context.active_object, )
+        ##
 
         for blender_object in source:
             if blender_object and blender_object.type == 'MESH' \
@@ -212,13 +217,17 @@
         blender_to_ms3d_triangles = {}
         blender_to_ms3d_groups = {}
         blender_to_ms3d_materials = {}
+
         for blender_mesh_object in blender_mesh_objects:
             blender_mesh = blender_mesh_object.data
 
             ##########################
             # prepare ms3d groups if available
+            # works only for exporting active object
+            ##EXPORT_ACTIVE_ONLY:
             for ms3d_local_group_index, blender_ms3d_group in enumerate(blender_mesh.ms3d.groups):
                 ms3d_group = Ms3dGroup()
+                ms3d_group.__index = len(ms3d_model._groups)
                 ms3d_group.name = blender_ms3d_group.name
                 ms3d_group.flags = Ms3dUi.flags_to_ms3d(blender_ms3d_group.flags)
                 if blender_ms3d_group.comment:
@@ -226,7 +235,6 @@
                     ms3d_group._comment_object.comment = blender_ms3d_group.comment
                     ms3d_group._comment_object.index = len(ms3d_model._groups)
                 ms3d_group.material_index = None # to mark as not setted
-                ms3d_group.__index = len(ms3d_model._groups)
                 ms3d_model._groups.append(ms3d_group)
                 blender_to_ms3d_groups[blender_ms3d_group.id] = ms3d_group
 
@@ -333,22 +341,33 @@
                             1.0 - bmf.loops[1][layer_uv].uv.y,
                             1.0 - bmf.loops[2][layer_uv].uv.y,
                             )
-                    
+
                     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_group = blender_to_ms3d_groups.get(bmf[layer_group])
+
+                    ##EXPORT_ACTIVE_ONLY:
                     if ms3d_group is not None:
-                        ms3d_triangle.group_index = ms3d_group.__index
-                        ms3d_group._triangle_indices.append(ms3d_triangle.__index)
                         if ms3d_group.material_index is None:
-                            ms3d_material = self.get_ms3d_material_add_if(blender_mesh, ms3d_model, blender_to_ms3d_materials, bmf.material_index)
                             if ms3d_material is None:
                                 ms3d_group.material_index = Ms3dSpec.DEFAULT_GROUP_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)
+                    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)
 
-                        #if ms3d_group.material_index != 
+                    if ms3d_group is not None:
+                        ms3d_group._triangle_indices.append(ms3d_triangle.__index)
+                        ms3d_triangle.group_index = ms3d_group.__index
+
                     blender_to_ms3d_triangles[bmf] = ms3d_triangle
 
             if bm is not None:
@@ -367,7 +386,7 @@
                 blender_context.blend_data.meshes.remove(blender_mesh_temp)
 
             # DEBUG:
-            print("DEBUG: blender_mesh_object: {}".format(blender_mesh_object))
+            #print("DEBUG: blender_mesh_object: {}".format(blender_mesh_object))
 
         return blender_mesh_objects
 
@@ -385,38 +404,68 @@
 
 
     ###########################################################################
-    def get_ms3d_group_add_if(self, blender_ms3d_group, ms3d_model, blender_to_ms3d_groups):
+    def get_ms3d_group_no_material_add_if(self, ms3d_model):
+        markerName = "No.Mat.Group."
+        markerComment = "no material group"
+
+        for ms3d_group in ms3d_model._groups:
+            if ms3d_group.material_index == Ms3dSpec.DEFAULT_GROUP_MATERIAL_INDEX \
+                    and ms3d_group.name == markerName \
+                    and ms3d_group._comment_object \
+                    and ms3d_group._comment_object.comment == markerComment:
+                return ms3d_group
+
         ms3d_group = Ms3dGroup()
         ms3d_group.__index = len(ms3d_model._groups)
-        
-        ms3d_group.name = blender_ms3d_group.name

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list