[Bf-blender-cvs] [4478ddc] asset-experiments: Add group preview generation too.

Bastien Montagne noreply at git.blender.org
Sat Dec 20 16:47:59 CET 2014


Commit: 4478ddc3d9779c724a4e802eea90914e7c4aa932
Author: Bastien Montagne
Date:   Sat Dec 20 16:47:41 2014 +0100
Branches: asset-experiments
https://developer.blender.org/rB4478ddc3d9779c724a4e802eea90914e7c4aa932

Add group preview generation too.

===================================================================

M	release/scripts/modules/bl_previews_utils/bl_previews_render.py

===================================================================

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 8bc8f25..37fa9ff 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -73,6 +73,7 @@ def do_previews_bi(do_objects, do_groups):
     render_image = None
 
     objects_ignored = {render_camera, render_lamp}
+    groups_ignored = {}
 
     render_world.use_sky_blend = True
     render_world.horizon_color = 0.9, 0.9, 0.9
@@ -156,6 +157,47 @@ def do_previews_bi(do_objects, do_groups):
         for ob, is_rendered in zip(bpy.data.objects, prev_shown):
             ob.hide_render = is_rendered
 
+    if do_groups:
+        for grp in bpy.data.groups:
+            if grp in groups_ignored:
+                continue
+            bpy.ops.object.group_instance_add(group=grp.name)
+            grp_ob = next((ob for ob in render_scene.objects if ob.dupli_group and ob.dupli_group.name == grp.name))
+            bbox = (Vector((1e9, 1e9, 1e9)), Vector((-1e9, -1e9, -1e9)))
+            render_scene.update()
+            for ob in grp.objects:
+                object_merge_bbox(bbox, ob, render_camera)
+            # Our bbox has been generated in camera local space, bring it back in world one
+            bbox[0][:] = render_camera.matrix_world * bbox[0]
+            bbox[1][:] = render_camera.matrix_world * bbox[1]
+            cos = (
+                bbox[0].x, bbox[0].y, bbox[0].z,
+                bbox[0].x, bbox[0].y, bbox[1].z,
+                bbox[0].x, bbox[1].y, bbox[0].z,
+                bbox[0].x, bbox[1].y, bbox[1].z,
+                bbox[1].x, bbox[0].y, bbox[0].z,
+                bbox[1].x, bbox[0].y, bbox[1].z,
+                bbox[1].x, bbox[1].y, bbox[0].z,
+                bbox[1].x, bbox[1].y, bbox[1].z,
+            )
+            loc, ortho_scale = render_camera.camera_fit_coordinates(render_scene, cos)
+            render_camera.location = loc
+            loc, ortho_scale = render_lamp.camera_fit_coordinates(render_scene, cos)
+            render_lamp.location = loc
+            render_scene.update()
+
+            bpy.ops.render.render(write_still=True)
+
+            if render_image is None:
+                render_image = bpy.data.images.load(render_scene.render.filepath)
+            else:
+                render_image.reload()
+            pix = tuple(int(r * 255) + int(g * 255) * 256 + int(b * 255) * 256**2 + int(a * 255) * 256**3 for r, g, b, a in zip(*[iter(render_image.pixels)] * 4))  # XXX To be done properly!!!!!!
+            grp.preview.image_size = (128, 128)
+            grp.preview.image_pixels = pix
+
+            render_scene.objects.unlink(grp_ob)
+
     bpy.context.screen.scene = prev_scene
     render_scene.world = None
     render_scene.camera = None
@@ -180,6 +222,10 @@ def do_clear_previews(do_objects, do_groups):
         for ob in bpy.data.objects:
             ob.preview.image_size = (0, 0)
 
+    if do_groups:
+        for grp in bpy.data.groups:
+            grp.preview.image_size = (0, 0)
+
     print("Saving %s..." % bpy.data.filepath)
     bpy.ops.wm.save_mainfile()




More information about the Bf-blender-cvs mailing list