[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