[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3618] contrib/py/scripts/addons/ io_scene_ms3d: implementation of exporter in progress...

Alexander Nussbaumer alpha-beta-release at gmx.net
Wed Jul 11 21:46:09 CEST 2012


Revision: 3618
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3618
Author:   beta-tester
Date:     2012-07-11 19:46:09 +0000 (Wed, 11 Jul 2012)
Log Message:
-----------
implementation of exporter in progress...

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

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-07-11 13:59:22 UTC (rev 3617)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-07-11 19:46:09 UTC (rev 3618)
@@ -26,7 +26,7 @@
         'version': (0, 4, 0, 3),
         'blender': (2, 6, 3, 0),
         'location': "File > Import & File > Export",
-        'warning': "[2012-07-09] currently only the importer is implemented",
+        'warning': "[2012-07-10] currently only the importer is implemented",
         '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-07-11 13:59:22 UTC (rev 3617)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-07-11 19:46:09 UTC (rev 3618)
@@ -159,6 +159,13 @@
             # restore pre operator undo state
             context.user_preferences.edit.use_global_undo = self.undo
 
+            is_valid, statistics = ms3d_model.is_valid()
+            print()
+            print("##########################################################")
+            print("Blender -> MS3D : [{0}]".format(self.filepath_splitted[1]))
+            print(statistics)
+            print("##########################################################")
+
         except Exception:
             type, value, traceback = exc_info()
             print("write - exception in try block\n  type: '{0}'\n"
@@ -184,6 +191,7 @@
         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 = []
@@ -211,13 +219,14 @@
             # prepare ms3d groups if available
             for ms3d_local_group_index, blender_ms3d_group in enumerate(blender_mesh.ms3d.groups):
                 ms3d_group = Ms3dGroup()
-                ms3d_group.__index = ms3d_local_group_index
                 ms3d_group.name = blender_ms3d_group.name
                 ms3d_group.flags = Ms3dUi.flags_to_ms3d(blender_ms3d_group.flags)
                 if blender_ms3d_group.comment:
                     ms3d_group._comment_object = Ms3dCommentEx()
                     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
 
@@ -288,7 +297,7 @@
                     blender_to_ms3d_vertices[bmv] = ms3d_vertex
 
             ##########################
-            # faces
+            # handle faces / tris
             for bmf in bm.faces:
                 item = blender_to_ms3d_triangles.get(bmf)
                 if item is None:
@@ -298,10 +307,16 @@
                     bmv0 = bmf.verts[0]
                     bmv1 = bmf.verts[1]
                     bmv2 = bmf.verts[2]
+                    ms3d_vertex0 = blender_to_ms3d_vertices[bmv0]
+                    ms3d_vertex1 = blender_to_ms3d_vertices[bmv1]
+                    ms3d_vertex2 = blender_to_ms3d_vertices[bmv2]
+                    ms3d_vertex0.reference_count += 1
+                    ms3d_vertex1.reference_count += 1
+                    ms3d_vertex2.reference_count += 1
                     ms3d_triangle._vertex_indices = (
-                            blender_to_ms3d_vertices[bmv0].__index,
-                            blender_to_ms3d_vertices[bmv1].__index,
-                            blender_to_ms3d_vertices[bmv2].__index,
+                            ms3d_vertex0.__index,
+                            ms3d_vertex1.__index,
+                            ms3d_vertex2.__index,
                             )
                     ms3d_triangle._vertex_normals = (
                             (self.matrix_coordination_system * bmv0.normal)[:],
@@ -318,13 +333,21 @@
                             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_group = blender_to_ms3d_groups.get(bmf[layer_group])
                     if ms3d_group is not None:
                         ms3d_triangle.group_index = ms3d_group.__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
 
+                        #if ms3d_group.material_index != 
                     blender_to_ms3d_triangles[bmf] = ms3d_triangle
 
             if bm is not None:
@@ -361,6 +384,61 @@
 
 
     ###########################################################################
+    def get_ms3d_group_add_if(self, blender_ms3d_group, ms3d_model, blender_to_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)
+        ms3d_group.material_index = None # to mark as not setted
+        if blender_ms3d_group.comment:
+            ms3d_group._comment_object = Ms3dCommentEx()
+            ms3d_group._comment_object.comment = blender_ms3d_group.comment
+            ms3d_group._comment_object.index = ms3d_group.__index
+        
+        ms3d_model._groups.append(ms3d_group)
+        
+        blender_to_ms3d_groups[blender_ms3d_group.id] = ms3d_group
+        
+        return ms3d_group
+    
+    
+    ###########################################################################
+    def get_ms3d_material_add_if(self, blender_mesh, ms3d_model, blender_to_ms3d_materials, blender_index):
+        if blender_index < 0 or blender_index >= len(blender_mesh.materials):
+            return None
+            
+        blender_material = blender_mesh.materials[blender_index]
+        ms3d_material = blender_to_ms3d_materials.get(blender_material)
+        if ms3d_material is None:
+            ms3d_material = Ms3dMaterial()
+            ms3d_material.__index = len(ms3d_model.materials)
+            
+            blender_ms3d_material = blender_material.ms3d
+            
+            ms3d_material.name = blender_ms3d_material.name
+            ms3d_material._ambient = blender_ms3d_material.ambient
+            ms3d_material._diffuse = blender_ms3d_material.diffuse
+            ms3d_material._specular = blender_ms3d_material.specular
+            ms3d_material._emissive = blender_ms3d_material.emissive
+            ms3d_material.shininess = blender_ms3d_material.shininess
+            ms3d_material.transparency = blender_ms3d_material.transparency
+            ms3d_material.mode = Ms3dUi.texture_mode_to_ms3d(blender_ms3d_material.mode)
+            ms3d_material.texture = blender_ms3d_material.texture
+            ms3d_material.alphamap = blender_ms3d_material.alphamap
+            if blender_ms3d_material.comment:
+                ms3d_material._comment_object = Ms3dCommentEx()
+                ms3d_material._comment_object.comment = blender_ms3d_material.comment
+                ms3d_material._comment_object.index = ms3d_material.__index
+                
+            ms3d_model.materials.append(ms3d_material)
+        
+            blender_to_ms3d_materials[blender_material] = ms3d_material
+            
+        return ms3d_material
+
+        
+    ###########################################################################
     def old_from_blender(self, blender_context, ms3d_model):
         blender = blender_context.blend_data
 

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_spec.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_spec.py	2012-07-11 13:59:22 UTC (rev 3617)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_spec.py	2012-07-11 19:46:09 UTC (rev 3618)
@@ -585,6 +585,9 @@
 ###############################################################################
 class Ms3dMaterial:
     """ Ms3dMaterial """
+    """
+    __slots__ was taking out,
+    to be able to inject additional attributes during runtime
     __slots__ = (
             'name',
             'shininess',
@@ -598,7 +601,8 @@
             '_emissive',
             '_comment_object', # Ms3dComment
             )
-
+    """
+    
     def __init__(
             self,
             default_name="",



More information about the Bf-extensions-cvs mailing list