[Bf-blender-cvs] [7b84fa5] asset-experiments: Various minor cleanup & fixes from review.
Bastien Montagne
noreply at git.blender.org
Fri Jun 19 13:20:12 CEST 2015
Commit: 7b84fa592790430b73419b96c867f85fba8108f3
Author: Bastien Montagne
Date: Fri Jun 19 13:01:39 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB7b84fa592790430b73419b96c867f85fba8108f3
Various minor cleanup & fixes from review.
===================================================================
M release/scripts/modules/bl_previews_utils/bl_previews_render.py
M release/scripts/startup/bl_operators/file.py
M release/scripts/startup/bl_ui/space_filebrowser.py
M source/blender/blenlib/BLI_fileops.h
M source/blender/blenlib/intern/BLI_filelist.c
M source/blender/editors/space_file/filelist.c
===================================================================
diff --git a/release/scripts/modules/bl_previews_utils/bl_previews_render.py b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
index 673f182..801dbbf 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -152,9 +152,12 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
)
def render_context_delete(render_context):
- # Do not crash here, too much things can go wrong...
+ # We use try/except blocks here to avoid crash, too much things can go wrong, and we want to leave the current
+ # .blend as clean as possible!
+ success = True
+
+ scene = bpy.data.scenes[render_context.scene]
try:
- scene = bpy.data.scenes[render_context.scene]
if render_context.backup_scene is None:
scene.world = None
scene.camera = None
@@ -166,40 +169,63 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
scene = None
else:
rna_backup_restore(scene, render_context.backup_scene)
- if render_context.world is not None:
+ except Exception as e:
+ print("ERROR:", e)
+ success = False
+
+ if render_context.world is not None:
+ try:
world = bpy.data.worlds[render_context.world]
if render_context.backup_world is None:
if scene is not None:
scene.world = None
+ world.user_clear()
bpy.data.worlds.remove(world)
else:
rna_backup_restore(world, render_context.backup_world)
- if render_context.camera:
+ except Exception as e:
+ print("ERROR:", e)
+ success = False
+
+ if render_context.camera:
+ try:
camera = bpy.data.objects[render_context.camera]
if render_context.backup_camera is None:
if scene is not None:
scene.camera = None
+ camera.user_clear()
bpy.data.objects.remove(camera)
bpy.data.cameras.remove(bpy.data.cameras[render_context.camera_data])
else:
rna_backup_restore(camera, render_context.backup_camera)
rna_backup_restore(bpy.data.cameras[render_context.camera_data], render_context.backup_camera_data)
- if render_context.lamp:
+ except Exception as e:
+ print("ERROR:", e)
+ success = False
+
+ if render_context.lamp:
+ try:
lamp = bpy.data.objects[render_context.lamp]
if render_context.backup_lamp is None:
+ lamp.user_clear()
bpy.data.objects.remove(lamp)
bpy.data.lamps.remove(bpy.data.lamps[render_context.lamp_data])
else:
rna_backup_restore(lamp, render_context.backup_lamp)
rna_backup_restore(bpy.data.lamps[render_context.lamp_data], render_context.backup_lamp_data)
+ except Exception as e:
+ print("ERROR:", e)
+ success = False
+
+ try:
+ image = bpy.data.images[render_context.image]
+ image.user_clear()
+ bpy.data.images.remove(image)
except Exception as e:
print("ERROR:", e)
- return False
+ success = False
- image = bpy.data.images[render_context.image]
- image.user_clear()
- bpy.data.images.remove(image)
- return True
+ return success
def objects_render_engine_guess(obs):
for obname in obs:
diff --git a/release/scripts/startup/bl_operators/file.py b/release/scripts/startup/bl_operators/file.py
index f27df20..a6a6982 100644
--- a/release/scripts/startup/bl_operators/file.py
+++ b/release/scripts/startup/bl_operators/file.py
@@ -36,24 +36,55 @@ class WM_OT_previews_batch_generate(Operator):
# -----------
# File props.
- files = CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'})
+ files = CollectionProperty(
+ type=bpy.types.OperatorFileListElement,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
- directory = StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'})
+ directory = StringProperty(
+ maxlen=1024,
+ subtype='FILE_PATH',
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
# Show only images/videos, and directories!
- filter_blender = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
- filter_folder = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
+ filter_blender = BoolProperty(
+ default=True,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
+ filter_folder = BoolProperty(
+ default=True,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
# -----------
# Own props.
- use_scenes = BoolProperty(default=True, name="Scenes", description="Generate scenes' previews")
- use_groups = BoolProperty(default=True, name="Groups", description="Generate groups' previews")
- use_objects = BoolProperty(default=True, name="Objects", description="Generate objects' previews")
- use_intern_data = BoolProperty(default=True, name="Mat/Tex/...",
- description="Generate 'internal' previews (materials, textures, images, etc.)")
-
- use_trusted = BoolProperty(default=False, name="Trusted Blend Files",
- description="Enable python evaluation for selected files")
+ use_scenes = BoolProperty(
+ default=True,
+ name="Scenes",
+ description="Generate scenes' previews",
+ )
+ use_groups = BoolProperty(
+ default=True,
+ name="Groups",
+ description="Generate groups' previews",
+ )
+ use_objects = BoolProperty(
+ default=True,
+ name="Objects",
+ description="Generate objects' previews",
+ )
+ use_intern_data = BoolProperty(
+ default=True,
+ name="Mat/Tex/...",
+ description="Generate 'internal' previews (materials, textures, images, etc.)",
+ )
+
+ use_trusted = BoolProperty(
+ default=False,
+ name="Trusted Blend Files",
+ description="Enable python evaluation for selected files",
+ )
def invoke(self, context, event):
context.window_manager.fileselect_add(self)
@@ -72,30 +103,30 @@ class WM_OT_previews_batch_generate(Operator):
context.window_manager.progress_update(0)
for i, fn in enumerate(self.files):
blen_path = os.path.join(self.directory, fn.name)
- cmmd = [
+ cmd = [
bpy.app.binary_path,
"--background",
"--factory-startup",
"-noaudio",
]
if self.use_trusted:
- cmmd.append("--enable-autoexec")
- cmmd += [
+ cmd.append("--enable-autoexec")
+ cmd.extend([
blen_path,
"--python",
os.path.join(os.path.dirname(preview_render.__file__), "bl_previews_render.py"),
"--",
- ]
+ ])
if not self.use_scenes:
- cmmd.append('--no_scenes')
+ cmd.append('--no_scenes')
if not self.use_groups:
- cmmd.append('--no_groups')
+ cmd.append('--no_groups')
if not self.use_objects:
- cmmd.append('--no_objects')
+ cmd.append('--no_objects')
if not self.use_intern_data:
- cmmd.append('--no_data_intern')
- if subprocess.call(cmmd):
- self.report({'ERROR'}, "Previews generation process failed for file '%s'!" % blend_path)
+ cmd.append('--no_data_intern')
+ if subprocess.call(cmd):
+ self.report({'ERROR'}, "Previews generation process failed for file '%s'!" % blen_path)
context.window_manager.progress_end()
return {'CANCELLED'}
context.window_manager.progress_update(i + 1)
@@ -112,24 +143,54 @@ class WM_OT_previews_batch_clear(Operator):
# -----------
# File props.
- files = CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'})
+ files = CollectionProperty(
+ type=bpy.types.OperatorFileListElement,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
- directory = StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'})
+ directory = StringProperty(
+ maxlen=1024,
+ subtype='FILE_PATH',
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
# Show only images/videos, and directories!
- filter_blender = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
- filter_folder = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
+ filter_blender = BoolProperty(
+ default=True,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
+ filter_folder = BoolProperty(
+ default=True,
+ options={'HIDDEN', 'SKIP_SAVE'},
+ )
# -----------
# Own props.
- use_scenes = BoolProperty(default=True, name="Scenes", description="Clear scenes' previews")
- use_groups = BoolProperty(default=True, name="Groups", description="Clear groups' previews")
- use_objects = BoolProperty(default=True, name="Objects", description="Clear objects' previews")
- use_intern_data = BoolProperty(default=True, name="Mat/Tex/...",
- description="Clear 'internal' previews (materials, textures, images, e
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list