From c75f170adb9ab2195aaa98122ed02d9332b1b72a Mon Sep 17 00:00:00 2001 From: Campbell Barton <ideasman42@gmail.com> Date: Thu, 21 Mar 2013 14:55:28 +0000 Subject: [PATCH] use object.update_from_editmode() for scripts which read object data. --- io_mesh_ply/export_ply.py | 1 + io_mesh_stl/blender_utils.py | 3 +++ io_mesh_uv_layout/__init__.py | 7 +------ io_scene_3ds/export_3ds.py | 5 ++--- io_scene_obj/export_obj.py | 1 + io_scene_vrml2/export_vrml2.py | 8 +------- io_scene_x3d/export_x3d.py | 6 ++++-- 7 files changed, 13 insertions(+), 18 deletions(-) diff --git a/io_mesh_ply/export_ply.py b/io_mesh_ply/export_ply.py index aef2ed898..644b890fd 100644 --- a/io_mesh_ply/export_ply.py +++ b/io_mesh_ply/export_ply.py @@ -208,6 +208,7 @@ def save(operator, raise Exception("Error, could not get mesh data from active object") mesh.transform(obj.matrix_world) + mesh.calc_normals() ret = save_mesh(filepath, mesh, use_normals=use_normals, diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py index 5589da4e5..9c3488eb1 100644 --- a/io_mesh_stl/blender_utils.py +++ b/io_mesh_stl/blender_utils.py @@ -55,6 +55,9 @@ def faces_from_mesh(ob, use_mesh_modifiers=False, triangulate=True): Split the quad into two triangles """ + # get the editmode data + ob.update_from_editmode() + # get the modifiers try: mesh = ob.to_mesh(bpy.context.scene, use_mesh_modifiers, "PREVIEW") diff --git a/io_mesh_uv_layout/__init__.py b/io_mesh_uv_layout/__init__.py index dc6c05d53..07e9e5879 100644 --- a/io_mesh_uv_layout/__init__.py +++ b/io_mesh_uv_layout/__init__.py @@ -172,9 +172,7 @@ class ExportUVLayout(bpy.types.Operator): def execute(self, context): obj = context.active_object - is_editmode = (obj.mode == 'EDIT') - if is_editmode: - bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + obj.update_from_editmode() mode = self.mode @@ -204,9 +202,6 @@ class ExportUVLayout(bpy.types.Operator): if self.modified: bpy.data.meshes.remove(mesh) - if is_editmode: - bpy.ops.object.mode_set(mode='EDIT', toggle=False) - file.close() return {'FINISHED'} diff --git a/io_scene_3ds/export_3ds.py b/io_scene_3ds/export_3ds.py index e7f624ac7..1bab73116 100644 --- a/io_scene_3ds/export_3ds.py +++ b/io_scene_3ds/export_3ds.py @@ -997,9 +997,6 @@ def save(operator, if global_matrix is None: global_matrix = mathutils.Matrix() - if bpy.ops.object.mode_set.poll(): - bpy.ops.object.mode_set(mode='OBJECT') - # Initialize the main chunk (primary): primary = _3ds_chunk(PRIMARY) # Add version chunk: @@ -1028,6 +1025,8 @@ def save(operator, objects = (ob for ob in scene.objects if ob.is_visible(scene)) for ob in objects: + ob.update_from_editmode() + # get derived objects free, derived = create_derived_objects(scene, ob) diff --git a/io_scene_obj/export_obj.py b/io_scene_obj/export_obj.py index 90d693168..681e45343 100644 --- a/io_scene_obj/export_obj.py +++ b/io_scene_obj/export_obj.py @@ -678,6 +678,7 @@ def _write(context, filepath, scene = context.scene # Exit edit mode before exporting, so current object states are exported properly. + # use this over obj.update_from_editmode() because of animation export. if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set(mode='OBJECT') diff --git a/io_scene_vrml2/export_vrml2.py b/io_scene_vrml2/export_vrml2.py index 29b76ddb9..78d1e45b0 100644 --- a/io_scene_vrml2/export_vrml2.py +++ b/io_scene_vrml2/export_vrml2.py @@ -177,16 +177,10 @@ def save_object(fw, global_matrix, assert(obj.type == 'MESH') if use_mesh_modifiers: - is_editmode = (obj.mode == 'EDIT') - if is_editmode: - bpy.ops.object.editmode_toggle() - + obj.update_from_editmode() me = obj.to_mesh(scene, True, 'PREVIEW', calc_tessface=False) bm = bmesh.new() bm.from_mesh(me) - - if is_editmode: - bpy.ops.object.editmode_toggle() else: me = obj.data if obj.mode == 'EDIT': diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py index 0b3250441..8e2c62db0 100644 --- a/io_scene_x3d/export_x3d.py +++ b/io_scene_x3d/export_x3d.py @@ -1582,8 +1582,10 @@ def save(operator, context, filepath="", bpy.path.ensure_ext(filepath, '.x3dz' if use_compress else '.x3d') - if bpy.ops.object.mode_set.poll(): - bpy.ops.object.mode_set(mode='OBJECT') + edit_object = context.edit_object + if edit_object: + edit_object.update_from_editmode() + del edit_object if use_compress: file = gzip_open_utf8(filepath, 'w') -- GitLab