|
|
@@ -1,158 +0,0 @@
|
|
1
|
|
-######################################################################################################
|
|
2
|
|
-# A simple add-on to allows the user to precisly place the border render region (Ctrl+B in cam view) #
|
|
3
|
|
-# using numerical input, witch can be animated #
|
|
4
|
|
-# Actualy uncommented (see further version) #
|
|
5
|
|
-# Author: Lapineige #
|
|
6
|
|
-# License: GPL v3 #
|
|
7
|
|
-######################################################################################################
|
|
8
|
|
-
|
|
9
|
|
-
|
|
10
|
|
-############# Add-on description (used by Blender)
|
|
11
|
|
-
|
|
12
|
|
-bl_info = {
|
|
13
|
|
- "name": "Precise Render Border Adjust",
|
|
14
|
|
- "description": 'Allows to modify and animate the "Border Render" region with numerical input.',
|
|
15
|
|
- "author": "Lapineige",
|
|
16
|
|
- "version": (1, 3),
|
|
17
|
|
- "blender": (2, 71, 0),
|
|
18
|
|
- "location": "Properties > Render > Precise Render Border Adjust (panel)",
|
|
19
|
|
- "warning": "", # used for warning icon and text in addons panel
|
|
20
|
|
- "wiki_url": "http://le-terrier-de-lapineige.over-blog.com/2014/07/precise-render-border-adjust-mon-add-on-pour-positionner-precisement-le-border-render.html",
|
|
21
|
|
- "tracker_url": "http://blenderclan.tuxfamily.org/html/modules/newbb/viewtopic.php?topic_id=42159",
|
|
22
|
|
- "category": "Render"}
|
|
23
|
|
-
|
|
24
|
|
-##############
|
|
25
|
|
-
|
|
26
|
|
-import bpy
|
|
27
|
|
-
|
|
28
|
|
-bpy.types.Scene.x_min_pixels = bpy.props.IntProperty(min=0, description="Minimum X value (in pixel) for the render border")
|
|
29
|
|
-bpy.types.Scene.x_max_pixels = bpy.props.IntProperty(min=0, description="Maximum X value (in pixel) for the render border")
|
|
30
|
|
-bpy.types.Scene.y_min_pixels = bpy.props.IntProperty(min=0, description="Minimum Y value (in pixel) for the render border")
|
|
31
|
|
-bpy.types.Scene.y_max_pixels = bpy.props.IntProperty(min=0, description="Maximum Y value (in pixel) for the render border")
|
|
32
|
|
-
|
|
33
|
|
-
|
|
34
|
|
-class PreciseRenderBorderAdjust(bpy.types.Panel):
|
|
35
|
|
- """Creates the tools in a Panel, in the scene context of the properties editor"""
|
|
36
|
|
- bl_label = "Precise Render Border Adjust"
|
|
37
|
|
- bl_idname = "Precise_Render_Border_Adjust"
|
|
38
|
|
- bl_space_type = 'PROPERTIES'
|
|
39
|
|
- bl_region_type = 'WINDOW'
|
|
40
|
|
- bl_context = "render"
|
|
41
|
|
-
|
|
42
|
|
- def draw(self, context):
|
|
43
|
|
- layout = self.layout
|
|
44
|
|
-
|
|
45
|
|
- scene = context.scene
|
|
46
|
|
-
|
|
47
|
|
- if not scene.render.use_border:
|
|
48
|
|
- sub = layout.split(percentage=0.7)
|
|
49
|
|
- sub.label(icon="ERROR", text="Border Render not activated:")
|
|
50
|
|
- sub.prop(scene.render, "use_border")
|
|
51
|
|
-
|
|
52
|
|
- sub = layout.column()
|
|
53
|
|
- row = sub.row()
|
|
54
|
|
- row.label(text="")
|
|
55
|
|
- row.prop(scene.render, "border_max_y", text="Max", slider=True)
|
|
56
|
|
- row.label(text="")
|
|
57
|
|
- row = sub.row(align=True)
|
|
58
|
|
- row.prop(scene.render, "border_min_x", text="Min", slider=True)
|
|
59
|
|
- row.prop(scene.render, "border_max_x", text="Max", slider=True)
|
|
60
|
|
- row = sub.row()
|
|
61
|
|
- row.label(text="")
|
|
62
|
|
- row.prop(scene.render, "border_min_y", text="Min", slider=True)
|
|
63
|
|
- row.label(text="")
|
|
64
|
|
-
|
|
65
|
|
- row = layout.row()
|
|
66
|
|
- row.label(text="Convert values to pixels:")
|
|
67
|
|
- row.operator("render.bordertopixels", text="Border -> Pixels")
|
|
68
|
|
-
|
|
69
|
|
- layout.label(text="Pixels position X:")
|
|
70
|
|
- row = layout.row(align=True)
|
|
71
|
|
- row.prop(scene, "x_min_pixels", text="Min")
|
|
72
|
|
- row.prop(scene, "x_max_pixels", text="Max")
|
|
73
|
|
- layout.label(text="Pixels position Y:")
|
|
74
|
|
- row = layout.row(align=True)
|
|
75
|
|
- row.prop(scene, "y_min_pixels", text="Min")
|
|
76
|
|
- row.prop(scene, "y_max_pixels", text="Max")
|
|
77
|
|
-
|
|
78
|
|
- layout.label(icon="INFO", text="Don't forget to apply pixels values")
|
|
79
|
|
- row = layout.row()
|
|
80
|
|
- row.operator("render.pixelstoborder", text="Pixels -> Border")
|
|
81
|
|
-
|
|
82
|
|
-class PixelsToBorder(bpy.types.Operator):
|
|
83
|
|
- """ Convert the pixel value into the proportion needed by the Blender native property """
|
|
84
|
|
- bl_idname = "render.pixelstoborder"
|
|
85
|
|
- bl_label = "Convert Pixels to Border proportion"
|
|
86
|
|
-
|
|
87
|
|
- @classmethod
|
|
88
|
|
- def poll(cls, context):
|
|
89
|
|
- return True
|
|
90
|
|
-
|
|
91
|
|
- def execute(self, context):
|
|
92
|
|
- C = bpy.context
|
|
93
|
|
-
|
|
94
|
|
- X = C.scene.render.resolution_x
|
|
95
|
|
- Y = C.scene.render.resolution_y
|
|
96
|
|
-
|
|
97
|
|
- C.scene.render.border_min_x = C.scene.x_min_pixels / X
|
|
98
|
|
- C.scene.render.border_max_x = C.scene.x_max_pixels / X
|
|
99
|
|
- C.scene.render.border_min_y = C.scene.y_min_pixels / Y
|
|
100
|
|
- C.scene.render.border_max_y = C.scene.y_max_pixels / Y
|
|
101
|
|
-
|
|
102
|
|
- if C.scene.x_min_pixels > X:
|
|
103
|
|
- C.scene.x_min_pixels = X
|
|
104
|
|
- if C.scene.x_max_pixels > X:
|
|
105
|
|
- C.scene.x_max_pixels = X
|
|
106
|
|
- if C.scene.y_min_pixels > Y:
|
|
107
|
|
- C.scene.y_min_pixels = Y
|
|
108
|
|
- if C.scene.y_max_pixels > Y:
|
|
109
|
|
- C.scene.y_max_pixels = Y
|
|
110
|
|
-
|
|
111
|
|
- return {'FINISHED'}
|
|
112
|
|
-
|
|
113
|
|
-class BorderToPixels(bpy.types.Operator):
|
|
114
|
|
- """ Convert the Blender native property value to pixels"""
|
|
115
|
|
- bl_idname = "render.bordertopixels"
|
|
116
|
|
- bl_label = "Convert border values to pixels"
|
|
117
|
|
-
|
|
118
|
|
- @classmethod
|
|
119
|
|
- def poll(cls, context):
|
|
120
|
|
- return True
|
|
121
|
|
-
|
|
122
|
|
- def execute(self, context):
|
|
123
|
|
- C = bpy.context
|
|
124
|
|
-
|
|
125
|
|
- X = C.scene.render.resolution_x
|
|
126
|
|
- Y = C.scene.render.resolution_y
|
|
127
|
|
-
|
|
128
|
|
- C.scene.x_min_pixels = int(C.scene.render.border_min_x * X)
|
|
129
|
|
- C.scene.x_max_pixels = int(C.scene.render.border_max_x * X)
|
|
130
|
|
- C.scene.y_min_pixels = int(C.scene.render.border_min_y * Y)
|
|
131
|
|
- C.scene.y_max_pixels = int(C.scene.render.border_max_y * Y)
|
|
132
|
|
-
|
|
133
|
|
- return {'FINISHED'}
|
|
134
|
|
-
|
|
135
|
|
-def register():
|
|
136
|
|
- bpy.utils.register_class(PreciseRenderBorderAdjust)
|
|
137
|
|
- bpy.utils.register_class(PixelsToBorder)
|
|
138
|
|
- bpy.utils.register_class(BorderToPixels)
|
|
139
|
|
-
|
|
140
|
|
-
|
|
141
|
|
-def unregister():
|
|
142
|
|
- bpy.utils.unregister_class(PreciseRenderBorderAdjust)
|
|
143
|
|
- bpy.utils.unregister_class(PixelsToBorder)
|
|
144
|
|
- bpy.utils.unregister_class(BorderToPixels)
|
|
145
|
|
-
|
|
146
|
|
-
|
|
147
|
|
-if __name__ == "__main__":
|
|
148
|
|
- C = bpy.context
|
|
149
|
|
-
|
|
150
|
|
- X = C.scene.render.resolution_x
|
|
151
|
|
- Y = C.scene.render.resolution_y
|
|
152
|
|
-
|
|
153
|
|
- C.scene.x_min_pixels = 0
|
|
154
|
|
- C.scene.x_max_pixels = X
|
|
155
|
|
- C.scene.y_min_pixels = 0
|
|
156
|
|
- C.scene.y_max_pixels = Y
|
|
157
|
|
-
|
|
158
|
|
- register()
|