[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3604] contrib/py/scripts/addons/ io_scene_ms3d: exporter exports vertices, faces, groups - currently still under construction

Alexander Nussbaumer alpha-beta-release at gmx.net
Mon Jul 9 23:13:07 CEST 2012


Revision: 3604
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3604
Author:   beta-tester
Date:     2012-07-09 21:13:06 +0000 (Mon, 09 Jul 2012)
Log Message:
-----------
exporter exports vertices, faces, groups - currently still under construction

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-07-09 20:37:47 UTC (rev 3603)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt	2012-07-09 21:13:06 UTC (rev 3604)
@@ -91,8 +91,68 @@
 - add support for bones and joints in exporter
 - add support for keyframes
 
-changelog:
-
+###############################################################################
+    exporter:
+        Ms3dModel
+            .vertices
+                Ms3dVertex
+                    .vertex: 100%
+                    .bone_id: 0%
+                    .reference_count: 0%
+                    .flags: 0%
+                    .vertex_ex
+                        Ms3dVertexEx
+                            .bone_ids: 0%
+                            .weights: 0%
+                            .extra: 0%
+            .triangles
+                Ms3dTriangle
+                    .vertex_indices: 100%
+                    .s: 100%
+                    .t: 100%
+                    .group_index: 20% (not tested yet: TODO: auto generate groups from blender data, by materials)
+                    .smoothing_group: 100%
+                    .flags: 0%
+                    .vertex_normals: 80% (not tested yet)
+            .groups
+                Ms3dGroup
+                    .name: 100%
+                    .triangle_indices: 100%
+                    .material_index: 0% (TODO: auto generate groups from blender data, by materials)
+                    .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%
+            .model_ex
+                Ms3dModelEx
+                    .joint_size: 0%
+                    .transparency_mode: 0%
+                    .alpha_ref: 0%
+            .joints
+                Ms3dJoint
+                    .name: 0%
+                    .parent_name: 0%
+                    .rotation: 0%
+                    .position: 0%
+                    .rotation_keyframes: 0%
+                    .translation_keyframes: 0%
+                    .joint_ex
+                        Ms3DJointEx
+                            .color: 0%
+                    .comment: 0%
+###############################################################################
     importer:
         Ms3dModel
             .vertices
@@ -100,7 +160,7 @@
                     .vertex: 100%
                     .bone_id: 100%
                     .reference_count: 0% (100% will be calculated on export)
-                    .flags: 100% (value only)
+                    .flags: 0% (value only)
                     .vertex_ex
                         Ms3dVertexEx
                             .bone_ids: 0%
@@ -155,3 +215,4 @@
                         Ms3DJointEx
                             .color: 100% (value only)
                     .comment: 100%
+###############################################################################

Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-07-09 20:37:47 UTC (rev 3603)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py	2012-07-09 21:13:06 UTC (rev 3604)
@@ -23,7 +23,7 @@
         'description': "Import / Export MilkShape3D MS3D files"\
                 " (conform with v1.8.4)",
         'author': "Alexander Nussbaumer",
-        'version': (0, 4, 0, 2),
+        '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",

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-07-09 20:37:47 UTC (rev 3603)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py	2012-07-09 21:13:06 UTC (rev 3604)
@@ -205,18 +205,37 @@
         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
+            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_model._groups.append(ms3d_group)
+                blender_to_ms3d_groups[blender_ms3d_group.id] = ms3d_group
+
+            ##########################
             # i have to use BMesh, because there are several custom data stored.
             # BMesh doesn't support quads_convert_to_tris()
             # so, i use that very ugly way:
             # create a complete copy of mesh and bend object data
             # to be able to apply operations to it.
-            blender_mesh_backup = blender_mesh_object.data
 
             # get a temporary mesh with applied modifiers
-            blender_mesh_temp = blender_mesh_object.to_mesh(blender_scene,
-                    self.options.prop_apply_modifier,
-                    self.options.prop_apply_modifier_mode)
+            if self.options.prop_apply_modifier:
+                blender_mesh_temp = blender_mesh_object.to_mesh(blender_scene,
+                        self.options.prop_apply_modifier,
+                        self.options.prop_apply_modifier_mode)
+            else:
+                blender_mesh_temp = blender_mesh_object.data.copy()
+
             # assign temporary mesh as new object data
             blender_mesh_object.data = blender_mesh_temp
 
@@ -250,19 +269,26 @@
 
             layer_uv = bm.loops.layers.uv.get(ms3d_str['OBJECT_LAYER_UV'])
             if layer_uv is None:
-                layer_uv = bm.loops.layers.uv.new(ms3d_str['OBJECT_LAYER_UV'])
+                if bm.loops.layers.uv:
+                    layer_uv = bm.loops.layers.uv[0]
+                else:
+                    layer_uv = bm.loops.layers.uv.new(ms3d_str['OBJECT_LAYER_UV'])
 
+            ##########################
+            # handle vertices
             for bmv in bm.verts:
                 item = blender_to_ms3d_vertices.get(bmv)
                 if item is None:
                     index = len(ms3d_model._vertices)
                     ms3d_vertex = Ms3dVertex()
                     ms3d_vertex.__index = index
-                    ms3d_vertex._vertex = (self.matrix_coordination_system \
+                    ms3d_vertex._vertex = (self.matrix_scaled_coordination_system \
                             * (bmv.co + blender_mesh_object.location))[:]
                     ms3d_model._vertices.append(ms3d_vertex)
                     blender_to_ms3d_vertices[bmv] = ms3d_vertex
 
+            ##########################
+            # faces
             for bmf in bm.faces:
                 item = blender_to_ms3d_triangles.get(bmf)
                 if item is None:
@@ -284,16 +310,21 @@
                             )
                     ms3d_triangle._s = (
                             bmf.loops[0][layer_uv].uv.x,
-                            bmf.loops[0][layer_uv].uv.x,
-                            bmf.loops[0][layer_uv].uv.x,
+                            bmf.loops[1][layer_uv].uv.x,
+                            bmf.loops[2][layer_uv].uv.x,
                             )
                     ms3d_triangle._t = (
                             1.0 - bmf.loops[0][layer_uv].uv.y,
-                            1.0 - bmf.loops[0][layer_uv].uv.y,
-                            1.0 - bmf.loops[0][layer_uv].uv.y,
+                            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
+
                     blender_to_ms3d_triangles[bmf] = ms3d_triangle
 
             if bm is not None:
@@ -303,7 +334,7 @@
 
             ##########################
             # restore original object data
-            blender_mesh_object.data = blender_mesh_backup
+            blender_mesh_object.data = blender_mesh
 
             ##########################
             # remove the temporary data

Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-07-09 20:37:47 UTC (rev 3603)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2012-07-09 21:13:06 UTC (rev 3604)
@@ -426,7 +426,7 @@
                         = blender_material.texture_slots.add()
                 blender_texture_slot_diffuse.texture = blender_texture_diffuse
                 blender_texture_slot_diffuse.texture_coords = 'UV'
-                blender_texture_slot_diffuse.uv_layer = layer_texture.name
+                blender_texture_slot_diffuse.uv_layer = layer_uv.name
                 blender_texture_slot_diffuse.use_map_color_diffuse = True
                 blender_texture_slot_diffuse.use_map_alpha = False
             else:
@@ -445,7 +445,7 @@
                         = blender_material.texture_slots.add()

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list