Amaranth Addon
[blender-addons-contrib.git] / amaranth / node_editor / templates / vignette.py
1 #  This program is free software; you can redistribute it and/or
2 #  modify it under the terms of the GNU General Public License
3 #  as published by the Free Software Foundation; either version 2
4 #  of the License, or (at your option) any later version.
5 #
6 #  This program is distributed in the hope that it will be useful,
7 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #  GNU General Public License for more details.
10 #
11 #  You should have received a copy of the GNU General Public License
12 #  along with this program; if not, write to the Free Software Foundation,
13 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14
15 import bpy
16 from mathutils import Vector
17
18
19 class AMTH_NODE_OT_AddTemplateVignette(bpy.types.Operator):
20     bl_idname = "node.template_add_vignette"
21     bl_label = "Add Vignette"
22     bl_description = "Add a vignette effect"
23     bl_options = {"REGISTER", "UNDO"}
24
25     @classmethod
26     def poll(cls, context):
27         space = context.space_data
28         return space.type == "NODE_EDITOR" \
29             and space.node_tree is not None \
30             and space.tree_type == "CompositorNodeTree"
31
32     # used as reference the setup scene script from master nazgul
33     def _setupNodes(self, context):
34         scene = context.scene
35         space = context.space_data
36         tree = scene.node_tree
37         has_act = True if tree.nodes.active else False
38
39         bpy.ops.node.select_all(action="DESELECT")
40
41         ellipse = tree.nodes.new(type="CompositorNodeEllipseMask")
42         ellipse.width = 0.8
43         ellipse.height = 0.4
44         blur = tree.nodes.new(type="CompositorNodeBlur")
45         blur.use_relative = True
46         blur.factor_x = 30
47         blur.factor_y = 50
48         ramp = tree.nodes.new(type="CompositorNodeValToRGB")
49         ramp.color_ramp.interpolation = "B_SPLINE"
50         ramp.color_ramp.elements[1].color = (0.6, 0.6, 0.6, 1)
51
52         overlay = tree.nodes.new(type="CompositorNodeMixRGB")
53         overlay.blend_type = "OVERLAY"
54         overlay.inputs[0].default_value = 0.8
55         overlay.inputs[1].default_value = (0.5, 0.5, 0.5, 1)
56
57         tree.links.new(ellipse.outputs["Mask"], blur.inputs["Image"])
58         tree.links.new(blur.outputs["Image"], ramp.inputs[0])
59         tree.links.new(ramp.outputs["Image"], overlay.inputs[2])
60         if has_act:
61             tree.links.new(tree.nodes.active.outputs[0], overlay.inputs[1])
62
63         if has_act:
64             overlay.location = tree.nodes.active.location
65             overlay.location += Vector((350.0, 0.0))
66         else:
67             overlay.location += Vector(
68                 (space.cursor_location[0], space.cursor_location[1]))
69
70         ellipse.location = overlay.location
71         ellipse.location += Vector((-715.0, -400))
72         ellipse.inputs[0].hide = True
73         ellipse.inputs[1].hide = True
74
75         blur.location = ellipse.location
76         blur.location += Vector((300.0, 0.0))
77         blur.inputs["Size"].hide = True
78
79         ramp.location = blur.location
80         ramp.location += Vector((175.0, 0))
81         ramp.outputs["Alpha"].hide = True
82
83         for node in (ellipse, blur, ramp, overlay):
84             node.select = True
85             node.show_preview = False
86
87         bpy.ops.node.join()
88
89         frame = ellipse.parent
90         frame.label = "Vignette"
91         frame.use_custom_color = True
92         frame.color = (0.1, 0.1, 0.1)
93
94         overlay.parent = None
95         overlay.label = "Vignette Overlay"
96
97     def execute(self, context):
98         self._setupNodes(context)
99
100         return {"FINISHED"}