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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'archipack/archipack_thumbs.py')
-rw-r--r--archipack/archipack_thumbs.py183
1 files changed, 183 insertions, 0 deletions
diff --git a/archipack/archipack_thumbs.py b/archipack/archipack_thumbs.py
new file mode 100644
index 00000000..5b14e91b
--- /dev/null
+++ b/archipack/archipack_thumbs.py
@@ -0,0 +1,183 @@
+# -*- coding:utf-8 -*-
+
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110- 1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# ----------------------------------------------------------
+# Author: Stephen Leger (s-leger)
+# Inspired by Asset-Flinguer
+# ----------------------------------------------------------
+import sys
+from mathutils import Vector
+import bpy
+
+
+def log(s):
+ print("[log]" + s)
+
+
+def generateThumb(context, cls, preset):
+ log("### RENDER THUMB ############################")
+ log("Start generating: " + cls)
+
+ # engine settings
+ context.scene.render.engine = 'CYCLES'
+ render = context.scene.cycles
+ render.progressive = 'PATH'
+ render.samples = 24
+ render.use_square_samples = True
+ render.preview_samples = 24
+ render.aa_samples = 24
+ render.transparent_max_bounces = 8
+ render.transparent_min_bounces = 8
+ render.transmission_bounces = 8
+ render.max_bounces = 8
+ render.min_bounces = 6
+ render.caustics_refractive = False
+ render.caustics_reflective = False
+ render.use_transparent_shadows = True
+ render.diffuse_bounces = 1
+ render.glossy_bounces = 4
+ bpy.ops.object.select_all(action="SELECT")
+ bpy.ops.object.delete()
+ # create object, loading preset
+ getattr(bpy.ops.archipack, cls)('INVOKE_DEFAULT', filepath=preset, auto_manipulate=False)
+
+ o = context.active_object
+ size = o.dimensions
+ x, y, z = o.bound_box[0]
+ min_x = x
+ min_y = y
+ min_z = z
+ x, y, z = o.bound_box[6]
+ max_x = x
+ max_y = y
+ max_z = z
+ center = Vector((
+ min_x + 0.5 * (max_x - min_x),
+ min_y + 0.5 * (max_y - min_y),
+ min_z + 0.5 * (max_z - min_z)))
+
+ # oposite / tan (0.5 * fov) where fov is 49.134 deg
+ dist = max(size) / 0.32
+ loc = center + dist * Vector((0.5, -1, 0.5)).normalized()
+
+ log("Prepare camera")
+ bpy.ops.object.camera_add(view_align=True,
+ enter_editmode=False,
+ location=loc,
+ rotation=(1.150952, 0.0, 0.462509))
+ cam = context.active_object
+ cam.data.lens = 50
+ cam.select = True
+ context.scene.camera = cam
+
+ bpy.ops.object.select_all(action="DESELECT")
+ o.select = True
+ bpy.ops.view3d.camera_to_view_selected()
+
+ log("Prepare scene")
+ # add plane
+ bpy.ops.mesh.primitive_plane_add(
+ radius=1000,
+ view_align=False,
+ enter_editmode=False,
+ location=(0, 0, 0)
+ )
+ p = context.active_object
+ m = bpy.data.materials.new("Plane")
+ m.use_nodes = True
+ m.node_tree.nodes[1].inputs[0].default_value = (1, 1, 1, 1)
+ p.data.materials.append(m)
+
+ # add 3 lights
+ bpy.ops.object.lamp_add(
+ type='POINT',
+ radius=1,
+ view_align=False,
+ location=(3.69736, -7, 6.0))
+ l = context.active_object
+ l.data.use_nodes = True
+ tree = l.data.node_tree
+ nodes = l.data.node_tree.nodes
+ emit = nodes["Emission"]
+ emit.inputs[1].default_value = 2000.0
+
+ bpy.ops.object.lamp_add(
+ type='POINT',
+ radius=1,
+ view_align=False,
+ location=(9.414563179016113, 5.446230888366699, 5.903861999511719))
+ l = context.active_object
+ l.data.use_nodes = True
+ tree = l.data.node_tree
+ nodes = l.data.node_tree.nodes
+ emit = nodes["Emission"]
+ falloff = nodes.new(type="ShaderNodeLightFalloff")
+ falloff.inputs[0].default_value = 5
+ tree.links.new(falloff.outputs[2], emit.inputs[1])
+
+ bpy.ops.object.lamp_add(
+ type='POINT',
+ radius=1,
+ view_align=False,
+ location=(-7.847615718841553, 1.03135085105896, 5.903861999511719))
+ l = context.active_object
+ l.data.use_nodes = True
+ tree = l.data.node_tree
+ nodes = l.data.node_tree.nodes
+ emit = nodes["Emission"]
+ falloff = nodes.new(type="ShaderNodeLightFalloff")
+ falloff.inputs[0].default_value = 5
+ tree.links.new(falloff.outputs[2], emit.inputs[1])
+
+ # Set output filename.
+ render = context.scene.render
+ render.filepath = preset[:-3] + ".png"
+ render.use_file_extension = True
+ render.use_overwrite = True
+ render.use_compositing = False
+ render.use_sequencer = False
+ render.resolution_x = 150
+ render.resolution_y = 100
+ render.resolution_percentage = 100
+ # render.image_settings.file_format = 'PNG'
+ # render.image_settings.color_mode = 'RGBA'
+ # render.image_settings.color_depth = '8'
+
+ # Configure output size.
+ log("Render")
+
+ # Render thumbnail
+ bpy.ops.render.render(write_still=True)
+
+ log("### COMPLETED ############################")
+
+
+preset = ""
+
+for arg in sys.argv:
+ if arg.startswith("cls:"):
+ cls = arg[4:]
+ if arg.startswith("preset:"):
+ preset = arg[7:]
+
+
+generateThumb(bpy.context, cls, preset)