Fix [#21886] OBJ export crashes if attempted while in edit mode
authorMatt Ebb <matt@mke3.net>
Mon, 5 Apr 2010 06:45:44 +0000 (06:45 +0000)
committerMatt Ebb <matt@mke3.net>
Mon, 5 Apr 2010 06:45:44 +0000 (06:45 +0000)
Didn't crash for me, but did export incorrectly since editmode changes weren't flushed.
Fixed this by setting all exporters to go back to object mode before exporting.

Also cleaned up some naming in exporter creator strings, it's "Blender" not "Blender3D".

release/scripts/io/export_3ds.py
release/scripts/io/export_fbx.py
release/scripts/io/export_obj.py
release/scripts/io/export_ply.py
release/scripts/io/export_x3d.py
release/scripts/ui/space_info.py

index b65332c931f1e72bb14859fe80657b8950bcdfc1..d46cc712e9adbddaef12bfe0b2a99c79c58ea86f 100644 (file)
@@ -942,6 +942,8 @@ def save_3ds(filename, context):
     sce = context.scene
 #      sce= bpy.data.scenes.active
 
+    bpy.ops.object.mode_set(mode='OBJECT')
+
     # Initialize the main chunk (primary):
     primary = _3ds_chunk(PRIMARY)
     # Add version chunk:
index a69addf72f5b8b75750d7828ec0510d97b900ef3..9dd3a68f4da665f8ed65170a1220df75bf57c057 100644 (file)
@@ -344,6 +344,8 @@ def write(filename, batch_objects = None, \
         BATCH_OWN_DIR =                                False
     ):
 
+    bpy.ops.object.mode_set(mode='OBJECT')
+
     # ----------------- Batch support!
     if BATCH_ENABLE:
         if os == None: BATCH_OWN_DIR = False
@@ -388,7 +390,6 @@ def write(filename, batch_objects = None, \
         orig_sce = context.scene
 #              orig_sce = bpy.data.scenes.active
 
-
         new_fbxpath = fbxpath # own dir option modifies, we need to keep an original
         for data in data_seq: # scene or group
             newname = BATCH_FILE_PREFIX + bpy.utils.clean_name(data.name)
@@ -651,7 +652,7 @@ def write(filename, batch_objects = None, \
 }''' % (curtime))
 
     file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime)
-    file.write('\nCreator: "Blender3D version %s"' % bpy.app.version_string)
+    file.write('\nCreator: "Blender version %s"' % bpy.app.version_string)
 
 
     pose_items = [] # list of (fbxName, matrix) to write pose data for, easier to collect allong the way
index 6ea00a74435b281ef0007a544133ceaf090c4ea2..c10a698c9d36de53bcfe145345feb999e4c172dc 100644 (file)
@@ -88,7 +88,7 @@ def write_mtl(scene, filename, copy_images, mtl_dict):
 
     file = open(filename, "w")
     # XXX
-#      file.write('# Blender3D MTL File: %s\n' % Blender.Get('filename').split('\\')[-1].split('/')[-1])
+#      file.write('# Blender MTL File: %s\n' % Blender.Get('filename').split('\\')[-1].split('/')[-1])
     file.write('# Material Count: %i\n' % len(mtl_dict))
     # Write material/image combinations we have used.
     for key, (mtl_mat_name, mat, img) in mtl_dict.items():
@@ -361,8 +361,8 @@ def write(filename, objects, scene,
     file = open(filename, "w")
 
     # Write Header
-    file.write('# Blender3D v%s OBJ File: %s\n' % (bpy.app.version_string, bpy.data.filename.split('/')[-1].split('\\')[-1] ))
-    file.write('# www.blender3d.org\n')
+    file.write('# Blender v%s OBJ File: %s\n' % (bpy.app.version_string, bpy.data.filename.split('/')[-1].split('\\')[-1] ))
+    file.write('# www.blender.org\n')
 
     # Tell the obj file what material file to use.
     if EXPORT_MTL:
@@ -816,14 +816,15 @@ def do_export(filename, context,
               EXPORT_KEEP_VERT_ORDER = False,
               EXPORT_POLYGROUPS = False,
               EXPORT_CURVE_AS_NURBS = True):
-    #  Window.EditMode(0)
-    #  Window.WaitCursor(1)
-
+    
     base_name, ext = splitExt(filename)
     context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension
 
     orig_scene = context.scene
 
+    # Exit edit mode before exporting, so current object states are exported properly.
+    bpy.ops.object.mode_set(mode='OBJECT')
+
 #      if EXPORT_ALL_SCENES:
 #              export_scenes = bpy.data.scenes
 #      else:
index f3c6541f47600fbfbe1830f136270b6bd062a2fe..23a3eb8b9eeb06c37e87854b5e07c818dcb2ae51 100644 (file)
@@ -99,6 +99,7 @@ def write(filename, scene, ob, \
 
     Window.WaitCursor(1)
     """
+    bpy.ops.object.mode_set(mode='OBJECT')
 
     #mesh = BPyMesh.getMeshFromObject(ob, None, EXPORT_APPLY_MODIFIERS, False, scn) # XXX
     if EXPORT_APPLY_MODIFIERS:
@@ -202,7 +203,7 @@ def write(filename, scene, ob, \
 
     file.write('ply\n')
     file.write('format ascii 1.0\n')
-    file.write('comment Created by Blender3D %s - www.blender.org, source file: %s\n' % (bpy.app.version_string, bpy.data.filename.split('/')[-1].split('\\')[-1]))
+    file.write('comment Created by Blender %s - www.blender.org, source file: %s\n' % (bpy.app.version_string, bpy.data.filename.split('/')[-1].split('\\')[-1]))
 
     file.write('element vertex %d\n' % len(ply_verts))
 
index f1ab8cd3de7bf217561e042cab0b443a6bc4eef1..dccc5808bc5b4c29074126d89d016670f0a1fece 100644 (file)
@@ -1155,8 +1155,9 @@ def x3d_export(filename,
 
 
     scene = context.scene
-    # scene = Blender.Scene.GetCurrent()
     world = scene.world
+    
+    bpy.ops.object.mode_set(mode='OBJECT')
 
     # XXX these are global textures while .Get() returned only scene's?
     alltextures = bpy.data.textures
index e1dccc0c9f0d635460c874c5d4649796b3015bfd..0683a3cb7630de26b9456dc9b12a8ed50372078b 100644 (file)
@@ -349,7 +349,7 @@ class HELP_OT_blender_eshop(HelpOperator):
     '''Buy official Blender resources and merchandise online'''
     bl_idname = "help.blender_eshop"
     bl_label = "Blender e-Shop"
-    _url = 'http://www.blender3d.org/e-shop'
+    _url = 'http://www.blender.org/e-shop'
 
 
 class HELP_OT_developer_community(HelpOperator):