Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/modules/bl_previews_utils/bl_previews_render.py')
-rw-r--r--release/scripts/modules/bl_previews_utils/bl_previews_render.py52
1 files changed, 36 insertions, 16 deletions
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 627a6ab2d3d..674c1c00ab1 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -26,7 +26,7 @@ import os
import sys
import bpy
-from mathutils import Vector, Euler
+from mathutils import Vector, Euler, Matrix
INTERN_PREVIEW_TYPES = {'MATERIAL', 'LAMP', 'WORLD', 'TEXTURE', 'IMAGE'}
@@ -246,13 +246,14 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
return 'CYCLES'
return 'BLENDER_RENDER'
- def object_bbox_merge(bbox, ob, ob_space):
+ def object_bbox_merge(bbox, ob, ob_space, offset_matrix):
if ob.bound_box:
ob_bbox = ob.bound_box
else:
ob_bbox = ((-ob.scale.x, -ob.scale.y, -ob.scale.z), (ob.scale.x, ob.scale.y, ob.scale.z))
- for v in ob.bound_box:
- v = ob_space.matrix_world.inverted() * ob.matrix_world * Vector(v)
+ for v in ob_bbox:
+ v = offset_matrix * Vector(v) if offset_matrix is not None else Vector(v)
+ v = ob_space.matrix_world.inverted() * ob.matrix_world * v
if bbox[0].x > v.x:
bbox[0].x = v.x
if bbox[0].y > v.y:
@@ -266,11 +267,11 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
if bbox[1].z < v.z:
bbox[1].z = v.z
- def objects_bbox_calc(camera, objects):
+ def objects_bbox_calc(camera, objects, offset_matrix):
bbox = (Vector((1e9, 1e9, 1e9)), Vector((-1e9, -1e9, -1e9)))
for obname in objects:
ob = bpy.data.objects[obname, None]
- object_bbox_merge(bbox, ob, camera)
+ object_bbox_merge(bbox, ob, camera, offset_matrix)
# Our bbox has been generated in camera local space, bring it back in world one
bbox[0][:] = camera.matrix_world * bbox[0]
bbox[1][:] = camera.matrix_world * bbox[1]
@@ -286,12 +287,12 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
)
return cos
- def preview_render_do(render_context, item_container, item_name, objects):
+ def preview_render_do(render_context, item_container, item_name, objects, offset_matrix=None):
scene = bpy.data.scenes[render_context.scene, None]
if objects is not None:
camera = bpy.data.objects[render_context.camera, None]
lamp = bpy.data.objects[render_context.lamp, None] if render_context.lamp is not None else None
- cos = objects_bbox_calc(camera, objects)
+ cos = objects_bbox_calc(camera, objects, offset_matrix)
loc, ortho_scale = camera.camera_fit_coords(scene, cos)
camera.location = loc
if lamp:
@@ -322,7 +323,7 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
prev_scenename = bpy.context.screen.scene.name
if do_objects:
- prev_shown = tuple(ob.hide_render for ob in ids_nolib(bpy.data.objects))
+ prev_shown = {ob.name: ob.hide_render for ob in ids_nolib(bpy.data.objects)}
for ob in ids_nolib(bpy.data.objects):
if ob in objects_ignored:
continue
@@ -368,8 +369,10 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
scene.objects.unlink(ob)
ob.hide_render = True
- for ob, is_rendered in zip(tuple(ids_nolib(bpy.data.objects)), prev_shown):
- ob.hide_render = is_rendered
+ for ob in ids_nolib(bpy.data.objects):
+ is_rendered = prev_shown.get(ob.name, ...)
+ if is_rendered is not ...:
+ ob.hide_render = is_rendered
if do_groups:
for grp in ids_nolib(bpy.data.groups):
@@ -391,7 +394,9 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
grp_obname = grp_ob.name
scene.update()
- preview_render_do(render_context, 'groups', grp.name, objects)
+ offset_matrix = Matrix.Translation(grp.dupli_offset).inverted()
+
+ preview_render_do(render_context, 'groups', grp.name, objects, offset_matrix)
scene = bpy.data.scenes[render_context.scene, None]
scene.objects.unlink(bpy.data.objects[grp_obname, None])
@@ -466,14 +471,26 @@ def main():
argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
parser = argparse.ArgumentParser(description="Use Blender to generate previews for currently open Blender file's items.")
- parser.add_argument('--clear', default=False, action="store_true", help="Clear previews instead of generating them.")
- parser.add_argument('--no_scenes', default=True, action="store_false", help="Do not generate/clear previews for scene IDs.")
- parser.add_argument('--no_groups', default=True, action="store_false", help="Do not generate/clear previews for group IDs.")
- parser.add_argument('--no_objects', default=True, action="store_false", help="Do not generate/clear previews for object IDs.")
+ parser.add_argument('--clear', default=False, action="store_true",
+ help="Clear previews instead of generating them.")
+ parser.add_argument('--no_backups', default=False, action="store_true",
+ help="Do not generate a backup .blend1 file when saving processed ones.")
+ parser.add_argument('--no_scenes', default=True, action="store_false",
+ help="Do not generate/clear previews for scene IDs.")
+ parser.add_argument('--no_groups', default=True, action="store_false",
+ help="Do not generate/clear previews for group IDs.")
+ parser.add_argument('--no_objects', default=True, action="store_false",
+ help="Do not generate/clear previews for object IDs.")
parser.add_argument('--no_data_intern', default=True, action="store_false",
help="Do not generate/clear previews for mat/tex/image/etc. IDs (those handled by core Blender code).")
args = parser.parse_args(argv)
+ orig_save_version = bpy.context.user_preferences.filepaths.save_version
+ if args.no_backups:
+ bpy.context.user_preferences.filepaths.save_version = 0
+ elif orig_save_version < 1:
+ bpy.context.user_preferences.filepaths.save_version = 1
+
if args.clear:
print("clear!")
do_clear_previews(do_objects=args.no_objects, do_groups=args.no_groups, do_scenes=args.no_scenes,
@@ -483,6 +500,9 @@ def main():
do_previews(do_objects=args.no_objects, do_groups=args.no_groups, do_scenes=args.no_scenes,
do_data_intern=args.no_data_intern)
+ # Not really necessary, but better be consistent.
+ bpy.context.user_preferences.filepaths.save_version = orig_save_version
+
if __name__ == "__main__":
print("\n\n *** Running {} *** \n".format(__file__))