[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3601] contrib/py/scripts/addons/ io_scene_ms3d: organized imported data to a group and add an empty as parent.
Alexander Nussbaumer
alpha-beta-release at gmx.net
Mon Jul 9 19:16:33 CEST 2012
Revision: 3601
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3601
Author: beta-tester
Date: 2012-07-09 17:16:33 +0000 (Mon, 09 Jul 2012)
Log Message:
-----------
organized imported data to a group and add an empty as parent.
and start to implement exporter - not finished yet!
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_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
contrib/py/scripts/addons/io_scene_ms3d/ms3d_utils.py
Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-07-09 14:32:43 UTC (rev 3600)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-07-09 17:16:33 UTC (rev 3601)
@@ -23,10 +23,10 @@
'description': "Import / Export MilkShape3D MS3D files"\
" (conform with v1.8.4)",
'author': "Alexander Nussbaumer",
- 'version': (0, 4, 0, 1),
+ 'version': (0, 4, 0, 2),
'blender': (2, 6, 3, 0),
'location': "File > Import & File > Export",
- 'warning': "[2012-07-07] currently only the importer is implemented",
+ 'warning': "[2012-07-09] 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"\
@@ -64,7 +64,6 @@
register_module,
unregister_module,
)
-
from bpy.types import (
INFO_MT_file_export,
INFO_MT_file_import,
@@ -75,13 +74,13 @@
# registration
def register():
register_module(__name__)
- #INFO_MT_file_export.append(Ms3dExportOperator.menu_func)
+ INFO_MT_file_export.append(Ms3dExportOperator.menu_func)
INFO_MT_file_import.append(Ms3dImportOperator.menu_func)
def unregister():
unregister_module(__name__)
- #INFO_MT_file_export.remove(Ms3dExportOperator.menu_func)
+ INFO_MT_file_export.remove(Ms3dExportOperator.menu_func)
INFO_MT_file_import.remove(Ms3dImportOperator.menu_func)
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-07-09 14:32:43 UTC (rev 3600)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-07-09 17:16:33 UTC (rev 3601)
@@ -37,15 +37,12 @@
)
from mathutils import (
Vector,
- Euler,
- Matrix,
)
from os import (
path,
)
from sys import (
exc_info,
- float_info,
)
from time import (
time,
@@ -72,12 +69,25 @@
from io_scene_ms3d.ms3d_spec import (
Ms3dSpec,
Ms3dModel,
+ Ms3dModelEx,
+ Ms3dVertex,
+ Ms3dVertexEx2,
+ Ms3dTriangle,
+ Ms3dGroup,
+ Ms3dMaterial,
+ Ms3dJoint,
+ Ms3dJointEx,
+ Ms3dRotationKeyframe,
+ Ms3dTranslationKeyframe,
+ Ms3dComment,
+ Ms3dCommentEx,
)
from io_scene_ms3d.ms3d_utils import (
select_all,
enable_pose_mode,
enable_edit_mode,
pre_setup_environment,
+ post_setup_environment,
)
from io_scene_ms3d.ms3d_ui import (
Ms3dUi,
@@ -86,7 +96,10 @@
#import blender stuff
-import bpy
+from bpy import (
+ context,
+ ops,
+ )
import bmesh
@@ -104,12 +117,12 @@
def write(self, blender_context):
"""convert bender content to ms3d content and write it to file"""
- t1 = time.time()
+ t1 = time()
t2 = None
try:
# setup environment
- pre_setup_environment(self)
+ pre_setup_environment(self, blender_context)
# create an empty ms3d template
ms3d_model = Ms3dModel()
@@ -117,12 +130,12 @@
# inject blender data to ms3d file
self.from_blender(blender_context, ms3d_model)
- t2 = time.time()
+ t2 = time()
self.file = None
try:
# write ms3d file to disk
- self.file = io.FileIO(self.filepath, "wb")
+ self.file = io.FileIO(self.options.filepath, "wb")
ms3d_model.write(self.file)
self.file.flush()
@@ -130,24 +143,37 @@
if self.file is not None:
self.file.close()
- # finalize/restore environment
- post_setup_environment(self, False)
+ # if option is set, this time will enlargs the io time
+ if (self.options.prop_verbose):
+ ms3d_model.print_internal()
+ post_setup_environment(self, blender_context)
+ # restore active object
+ context.scene.objects.active = self.active_object
+
+ if ((not context.scene.objects.active)
+ and (context.selected_objects)):
+ context.scene.objects.active \
+ = context.selected_objects[0]
+
+ # restore pre operator undo state
+ context.user_preferences.edit.use_global_undo = self.undo
+
except Exception:
- type, value, traceback = sys.exc_info()
+ type, value, traceback = exc_info()
print("write - exception in try block\n type: '{0}'\n"
" value: '{1}'".format(type, value, traceback))
if t2 is None:
- t2 = time.time()
+ t2 = time()
raise
else:
pass
- t3 = time.time()
- print(ms3d_str['SUMMARY_IMPORT'].format(
+ t3 = time()
+ print(ms3d_str['SUMMARY_EXPORT'].format(
(t3 - t1), (t2 - t1), (t3 - t2)))
return {"FINISHED"}
@@ -155,25 +181,163 @@
###########################################################################
def from_blender(self, blender_context, ms3d_model):
- """ known limitations:
- - bones unsupported yet
- - joints unsupported yet
- - very bad performance
+ blender_mesh_objects = self.create_geometry(blender_context, ms3d_model)
+ self.create_animation(blender_context, ms3d_model, blender_mesh_objects)
- notes:
- - interpreating a blender-mesh-objects as ms3d-group
- - only one material allowed per group in ms3d,
- maybe sub-split a mesh in to material groups???"""
+ ###########################################################################
+ 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
+
+ for blender_object in source:
+ if blender_object and blender_object.type == 'MESH' \
+ and blender_object.is_visible(blender_context.scene):
+ blender_mesh_objects.append(blender_object)
+
+ blender_scene = blender_context.scene
+
+ blender_to_ms3d_vertices = {}
+ blender_to_ms3d_triangles = {}
+ blender_to_ms3d_groups = {}
+ blender_to_ms3d_materials = {}
+ for blender_mesh_object in blender_mesh_objects:
+ ##########################
+ # 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)
+ # assign temporary mesh as new object data
+ blender_mesh_object.data = blender_mesh_temp
+
+ # convert to tris
+ enable_edit_mode(True)
+ select_all(True)
+ if ops.mesh.quads_convert_to_tris.poll():
+ ops.mesh.quads_convert_to_tris()
+ enable_edit_mode(False)
+
+ enable_edit_mode(True)
+ bm = bmesh.from_edit_mesh(blender_mesh_temp)
+
+ layer_texture = bm.faces.layers.tex.get(
+ ms3d_str['OBJECT_LAYER_TEXTURE'])
+ if layer_texture is None:
+ layer_texture = bm.faces.layers.tex.new(
+ ms3d_str['OBJECT_LAYER_TEXTURE'])
+
+ layer_smoothing_group = bm.faces.layers.int.get(
+ ms3d_str['OBJECT_LAYER_SMOOTHING_GROUP'])
+ if layer_smoothing_group is None:
+ layer_smoothing_group = bm.faces.layers.int.new(
+ ms3d_str['OBJECT_LAYER_SMOOTHING_GROUP'])
+
+ layer_group = bm.faces.layers.int.get(
+ ms3d_str['OBJECT_LAYER_GROUP'])
+ if layer_group is None:
+ layer_group = bm.faces.layers.int.new(
+ ms3d_str['OBJECT_LAYER_GROUP'])
+
+ 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'])
+
+ 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 \
+ * (bmv.co + blender_mesh_object.location))[:]
+ ms3d_model._vertices.append(ms3d_vertex)
+ blender_to_ms3d_vertices[bmv] = ms3d_vertex
+
+ for bmf in bm.faces:
+ item = blender_to_ms3d_triangles.get(bmf)
+ if item is None:
+ index = len(ms3d_model._triangles)
+ ms3d_triangle = Ms3dTriangle()
+ ms3d_triangle.__index = index
+ bmv0 = bmf.verts[0]
+ bmv1 = bmf.verts[1]
+ bmv2 = bmf.verts[2]
+ ms3d_triangle._vertex_indices = (
+ blender_to_ms3d_vertices[bmv0].__index,
+ blender_to_ms3d_vertices[bmv1].__index,
+ blender_to_ms3d_vertices[bmv2].__index,
+ )
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list