[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3994] contrib/py/scripts/addons/ io_scene_ms3d: fixed blender crashed during export meshes with some special models.
Alexander Nussbaumer
alpha-beta-release at gmx.net
Wed Nov 21 20:28:07 CET 2012
Revision: 3994
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3994
Author: beta-tester
Date: 2012-11-21 19:28:06 +0000 (Wed, 21 Nov 2012)
Log Message:
-----------
fixed blender crashed during export meshes with some special models.
- to prevent crash, i changed exporter from
bm = bmesh.from_edit_mesh(mesh)
to
bm = bmesh.new()
bm.from_mesh(mesh)
did something relevant changed from r52225 (was ok) to r52344 (crashes) ???
- added export option to shrink animation to only the region of keyframes (usable when exporting nls-track strips)
- changed (re-)initialization of add-on (F8-key)
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=52225
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=52344
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_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-11-21 02:45:43 UTC (rev 3993)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-11-21 19:28:06 UTC (rev 3994)
@@ -23,7 +23,7 @@
'description': "Import / Export MilkShape3D MS3D files"\
" (conform with v1.8.4)",
'author': "Alexander Nussbaumer",
- 'version': (0, 5, 0, 4),
+ 'version': (0, 5, 0, 5),
'blender': (2, 6, 3, 0),
'location': "File > Import & File > Export",
#'warning': "",
@@ -48,7 +48,7 @@
# To support reload properly, try to access a package var,
# if it's there, reload everything
-if ('bpy' in locals()):
+if 'bpy' in locals():
import imp
if 'io_scene_ms3d.ms3d_ui' in locals():
imp.reload(io_scene_ms3d.ms3d_ui)
@@ -73,12 +73,23 @@
###############################################################################
# registration
def register():
+ ####################
+ # F8 - key
+ import imp
+ imp.reload(ms3d_ui)
+ # F8 - key
+ ####################
+
+ ms3d_ui.register()
+
register_module(__name__)
INFO_MT_file_export.append(Ms3dExportOperator.menu_func)
INFO_MT_file_import.append(Ms3dImportOperator.menu_func)
def unregister():
+ ms3d_ui.unregister()
+
unregister_module(__name__)
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-11-21 02:45:43 UTC (rev 3993)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-11-21 19:28:06 UTC (rev 3994)
@@ -55,50 +55,50 @@
# To support reload properly, try to access a package var,
# if it's there, reload everything
-if ('bpy' in locals()):
- import imp
- if 'io_scene_ms3d.ms3d_strings' in locals():
- imp.reload(io_scene_ms3d.ms3d_strings)
- if 'io_scene_ms3d.ms3d_spec' in locals():
- imp.reload(io_scene_ms3d.ms3d_spec)
- if 'io_scene_ms3d.ms3d_utils' in locals():
- imp.reload(io_scene_ms3d.ms3d_utils)
- if 'io_scene_ms3d.ms3d_ui' in locals():
- imp.reload(io_scene_ms3d.ms3d_ui)
- pass
-else:
- from io_scene_ms3d.ms3d_strings import (
- ms3d_str,
- )
- 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,
- rotation_matrix,
- matrix_difference,
- )
- from io_scene_ms3d.ms3d_ui import (
- Ms3dUi,
- )
- pass
+#if ('bpy' in locals()):
+# import imp
+# if 'io_scene_ms3d.ms3d_strings' in locals():
+# imp.reload(io_scene_ms3d.ms3d_strings)
+# if 'io_scene_ms3d.ms3d_spec' in locals():
+# imp.reload(io_scene_ms3d.ms3d_spec)
+# if 'io_scene_ms3d.ms3d_utils' in locals():
+# imp.reload(io_scene_ms3d.ms3d_utils)
+# if 'io_scene_ms3d.ms3d_ui' in locals():
+# imp.reload(io_scene_ms3d.ms3d_ui)
+# pass
+#else:
+from io_scene_ms3d.ms3d_strings import (
+ ms3d_str,
+ )
+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,
+ rotation_matrix,
+ matrix_difference,
+ )
+from io_scene_ms3d.ms3d_ui import (
+ Ms3dUi,
+ )
+# pass
#import blender stuff
@@ -261,17 +261,13 @@
# create a complete copy of mesh and bend object data
# to be able to apply operations to it.
- # get a temporary mesh with applied modifiers
- 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()
+ # temporary, create a full copy of the model
+ blender_mesh_temp = blender_mesh_object.data.copy()
+ blender_mesh_object_temp = blender_mesh_object.copy()
+ blender_mesh_object_temp.data = blender_mesh_temp
+ blender_scene.objects.link(blender_mesh_object_temp)
+ blender_scene.objects.active = blender_mesh_object_temp
- # assign temporary mesh as new object data
- blender_mesh_object.data = blender_mesh_temp
-
# convert to tris
enable_edit_mode(True)
select_all(True)
@@ -280,7 +276,8 @@
enable_edit_mode(False)
enable_edit_mode(True)
- bm = bmesh.from_edit_mesh(blender_mesh_temp)
+ bm = bmesh.new()
+ bm.from_mesh(blender_mesh_temp)
layer_texture = bm.faces.layers.tex.get(
ms3d_str['OBJECT_LAYER_TEXTURE'])
@@ -318,7 +315,7 @@
ms3d_vertex = Ms3dVertex()
ms3d_vertex.__index = index
- loc = (bmv.co + blender_mesh_object.location)
+ loc = (bmv.co + blender_mesh_object_temp.location)
ms3d_vertex._vertex = self.geometry_correction(loc)
if layer_deform:
@@ -329,7 +326,7 @@
weights = []
for blender_index, blender_weight in blender_vertex_group_ids.items():
ms3d_joint = blender_to_ms3d_bones.get(
- blender_mesh_object.vertex_groups[blender_index].name)
+ blender_mesh_object_temp.vertex_groups[blender_index].name)
if ms3d_joint:
if count == 0:
ms3d_vertex.bone_id = ms3d_joint.__index
@@ -457,26 +454,31 @@
enable_edit_mode(False)
##########################
- # restore original object data
- blender_mesh_object.data = blender_mesh
-
- ##########################
# remove the temporary data
+ blender_scene.objects.unlink(blender_mesh_object_temp)
+ if blender_mesh_object_temp is not None:
+ blender_mesh_object_temp.user_clear()
+ blender_context.blend_data.objects.remove(blender_mesh_object_temp)
if blender_mesh_temp is not None:
blender_mesh_temp.user_clear()
blender_context.blend_data.meshes.remove(blender_mesh_temp)
+
###########################################################################
def create_animation(self, blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones):
##########################
# setup scene
blender_scene = blender_context.scene
- ms3d_model.animation_fps = blender_scene.render.fps * blender_scene.render.fps_base
- ms3d_model.number_total_frames = (blender_scene.frame_end - blender_scene.frame_start) + 1
- ms3d_model.current_time = ((blender_scene.frame_current - blender_scene.frame_start) + 1)\
- / (blender_scene.render.fps * blender_scene.render.fps_base)
+ frame_start = blender_scene.frame_start
+ frame_end = blender_scene.frame_end
+ frame_total = (frame_end - frame_start) + 1
+ frame_offset = 0
+
+ fps = blender_scene.render.fps * blender_scene.render.fps_base
+ time_base = 1.0 / fps
+
base_bone_correction = Matrix.Rotation(pi / 2, 4, 'Z')
for blender_mesh_object in blender_mesh_objects:
@@ -494,12 +496,16 @@
##########################
# bones
- blender_bones_ordered = self.build_blender_bone_dependency_order(blender_bones)
+ blender_bones_ordered = []
+ self.build_blender_bone_dependency_order(blender_bones, blender_bones_ordered)
for blender_bone_name in blender_bones_ordered:
blender_bone_oject = blender_bones[blender_bone_name]
ms3d_joint = Ms3dJoint()
ms3d_joint.__index = len(ms3d_model._joints)
+ ms3d_joint.__bone_mat = blender_bones[blender_bone_name].matrix
+ ms3d_joint.__bone_mati = blender_bones[blender_bone_name].matrix.inverted()
+
blender_bone_ms3d = blender_bone_oject.ms3d
blender_bone = blender_bone_oject
@@ -570,15 +576,21 @@
range(blender_scene.frame_start, blender_scene.frame_end + 1)
)
)
+
frames_sorted.sort()
- time_base = 1.0 / (blender_scene.render.fps / blender_scene.render.fps_base)
+ frame_temp = blender_scene.frame_current
- frame_temp = blender_scene.frame_current
+ if self.options.shrink_to_keys and len(frames_sorted) >= 2:
+ frame_start = frames_sorted[0]
+ frame_end = frames_sorted[len(frames_sorted)-1]
+ frame_total = (frame_end - frame_start) + 1
+ frame_offset = frame_start - 1
+
for current_frame in frames_sorted:
blender_scene.frame_set(current_frame)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list