瀏覽代碼

Delete RENDER-BORDER.PY

0000OOOO0000 5 年之前
父節點
當前提交
ecdd56bc79
沒有帳戶連結到提交者的電子郵件

+ 0
- 307
◯ᴥᗱᗴᗝИNᗱᗴᙁ⚭ⵙ⚭ᙁᗱᗴИNᗝᗱᗴᴥ◯/2.90/SCRIPTS/ADDONS/RENDER-BORDER.PY 查看文件

@@ -1,307 +0,0 @@
1
-# ##### BEGIN GPL LICENSE BLOCK #####
2
-#
3
-#  This program is free software; you can redistribute it and/or
4
-#  modify it under the terms of the GNU General Public License
5
-#  as published by the Free Software Foundation; either version 2
6
-#  of the License, or (at your option) any later version.
7
-#
8
-#  This program is distributed in the hope that it will be useful,
9
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
10
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
-#  GNU General Public License for more details.
12
-#
13
-#  You should have received a copy of the GNU General Public License
14
-#  along with this program; if not, write to the Free Software Foundation,
15
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
-#
17
-# ##### END GPL LICENSE BLOCK #####
18
-
19
-bl_info = {
20
-    "name": "Render Border",
21
-    "description": "Render Border",
22
-    "author": "Christian Brinkmann, David Boho",
23
-    "version": (0, 0, 5),
24
-    "blender": (2, 80, 0),
25
-    "tracker_url": "https://github.com/p2or/blender-renderborder",
26
-    "location": "Camera > Properties > Data > Render Border",
27
-    "category": "Render"
28
-}
29
-
30
-import bpy
31
-from bpy.app.handlers import persistent
32
-
33
-
34
-def round_pixels(pixel_float):
35
-    return round(pixel_float, 2)
36
-
37
-def calc_normalized(pixels_int, pixel_max):
38
-    return pixels_int / pixel_max if pixel_max else 0.0
39
-
40
-def calc_pixels(normalized_float, pixel_max):
41
-    return normalized_float * pixel_max
42
-
43
-def calc_width(res_x, min_x, max_x):
44
-    return res_x * max_x - res_x * min_x
45
-
46
-def calc_height(res_y, min_y, max_y):
47
-    return res_y * max_y - res_y * min_y  
48
-
49
-def calc_centerX(res_x, min_x, width):
50
-    return res_x * min_x + width / 2
51
-
52
-def calc_centerY(res_y, min_y, height):
53
-    return res_y * min_y + height / 2
54
-
55
-
56
-# ------------------------------------------------------------------------
57
-#   Properties
58
-# ------------------------------------------------------------------------
59
-
60
-class RenderBorder(bpy.types.PropertyGroup):
61
-    
62
-    # static member
63
-    _rd = None
64
-    _resX = _resY = _minX = _maxX = _minY = _maxY = 0 
65
-    _width = _height = _centerX = _centerY = 0
66
-                       
67
-    def set_centerX(self, value):
68
-        diffX = calc_normalized((value - self._centerX), self._resX)
69
-        self._rd.border_min_x += diffX
70
-        self._rd.border_max_x += diffX
71
-        RenderBorder._minX = calc_pixels(self._rd.border_min_x, self._resX)
72
-        RenderBorder._maxX = calc_pixels(self._rd.border_max_x, self._resX)
73
-        RenderBorder._width = calc_width(self._resX, self._rd.border_min_x, self._rd.border_max_x)
74
-        RenderBorder._centerX = value
75
-    
76
-    def set_centerY(self, value):
77
-        diffY = calc_normalized((value - self._centerY), self._resY)
78
-        self._rd.border_min_y += diffY
79
-        self._rd.border_max_y += diffY
80
-        RenderBorder._minY = calc_pixels(self._rd.border_min_y, self._resY)
81
-        RenderBorder._maxY = calc_pixels(self._rd.border_max_y, self._resY)
82
-        RenderBorder._height = calc_height(self._resY, self._rd.border_min_y, self._rd.border_max_y)
83
-        RenderBorder._centerY = value
84
-    
85
-    def set_minX(self, value):
86
-        self._rd.border_min_x = calc_normalized(value, self._resX)
87
-        RenderBorder._minX = round_pixels(calc_pixels(self._rd.border_min_x, self._resX))
88
-        RenderBorder._width = calc_width(self._resX, self._rd.border_min_x, self._rd.border_max_x)
89
-        RenderBorder._centerX = calc_centerX(self._resX, self._rd.border_min_x, self._width)
90
-    
91
-    def set_maxX(self, value):
92
-        self._rd.border_max_x = calc_normalized(value, self._resX)
93
-        RenderBorder._maxX = round_pixels(calc_pixels(self._rd.border_max_x, self._resX))
94
-        RenderBorder._width = calc_width(self._resX, self._rd.border_min_x, self._rd.border_max_x)
95
-        RenderBorder._centerX = calc_centerX(self._resX, self._rd.border_min_x, self._width)
96
-
97
-    def set_minY(self, value):
98
-        self._rd.border_min_y = calc_normalized(value, self._resY)
99
-        RenderBorder._minY = round_pixels(calc_pixels(self._rd.border_min_y, self._resY))
100
-        RenderBorder._height = calc_height(self._resY, self._rd.border_min_y, self._rd.border_max_y)
101
-        RenderBorder._centerY = calc_centerY(self._resY, self._rd.border_min_y, self._height)
102
-        
103
-    def set_maxY(self, value):
104
-        self._rd.border_max_y = calc_normalized(value, self._resY)
105
-        RenderBorder._maxY = round_pixels(calc_pixels(self._rd.border_max_y, self._resY))
106
-        RenderBorder._height = calc_height(self._resY, self._rd.border_min_y, self._rd.border_max_y)
107
-        RenderBorder._centerY = calc_centerY(self._resY, self._rd.border_min_y, self._height)
108
-    
109
-    def set_useBorder(self, value):
110
-        self._rd.use_border = value
111
-           
112
-    def get_centerX(self):
113
-        return RenderBorder._centerX
114
-    
115
-    def get_centerY(self):
116
-        return RenderBorder._centerY
117
-        
118
-    def get_minX(self):
119
-        return RenderBorder._minX
120
-    
121
-    def get_maxX(self):
122
-        return RenderBorder._maxX
123
-    
124
-    def get_minY(self):
125
-        return RenderBorder._minY
126
-    
127
-    def get_maxY(self):
128
-        return RenderBorder._maxY
129
-
130
-    def get_width(self):
131
-        return abs(round_pixels(RenderBorder._width))
132
-    
133
-    def get_height(self):
134
-        return abs(round_pixels(RenderBorder._height))
135
-        
136
-    def get_useBorder(self):
137
-        bpy.ops.rborder.init_border()
138
-        return self._rd.use_border
139
-
140
-    center_x : bpy.props.IntProperty(
141
-        name = "Center X",
142
-        description =   ("Horizontal center of the render border box"),
143
-        min = 0, default = 0, get=get_centerX, set=set_centerX )
144
-    
145
-    center_y : bpy.props.IntProperty(
146
-        name = "Center Y",
147
-        description =   ("Vertical center of the render border box"),
148
-        min = 0, default = 0, get=get_centerY, set=set_centerY )
149
-
150
-    width : bpy.props.IntProperty(
151
-        name = "Width",
152
-        description =   ("Width of render border box"),
153
-        min = 0, default = 0, get=get_width)
154
-
155
-    height : bpy.props.IntProperty(
156
-        name = "Height",
157
-        description =   ("Height of render border box"),
158
-        min = 0, default = 0, get=get_height)
159
-                   
160
-    min_x : bpy.props.IntProperty(
161
-        description =   ("Pixel distance between the left edge "
162
-                        "of the camera border and the left "
163
-                        "side of the render border box"),
164
-        name = "Min X", min = 0, default = 0, get=get_minX, set=set_minX )
165
-    
166
-    max_x : bpy.props.IntProperty(
167
-        description =   ("Pixel distance between the right edge "
168
-                        "of the camera border and the right "
169
-                        "side of the render border box"),
170
-        name = "Max X",min = 0, default = 0, get=get_maxX, set=set_maxX )
171
-        
172
-    min_y : bpy.props.IntProperty(
173
-        description =   ("Pixel distance between the bottom edge "
174
-                        "of the camera border and the bottom "
175
-                        "edge of the render border box"),
176
-        name = "Min Y", min = 0, default = 0, get=get_minY, set=set_minY )
177
-   
178
-    max_y : bpy.props.IntProperty(
179
-        description =   ("Pixel distance between the top edge "
180
-                        "of the camera border and the top "
181
-                        "edge of the render border box"),
182
-        name = "Max Y", min = 0, default = 0, get=get_maxY, set=set_maxY )
183
-    
184
-    use_rborder : bpy.props.BoolProperty(
185
-        name = "Use render border", description = "Use render border", 
186
-        get=get_useBorder, set=set_useBorder)
187
-
188
-
189
-# ------------------------------------------------------------------------
190
-# Operators
191
-# ------------------------------------------------------------------------
192
-
193
-class RBORDER_OT_init_border(bpy.types.Operator):
194
-    bl_idname = "rborder.init_border"
195
-    bl_label = "Init Render Border"
196
-    bl_options = {'INTERNAL'}
197
-  
198
-    def execute(self, context):
199
-        scn = context.scene
200
-        RenderBorder._rd = scn.render
201
-        RenderBorder._resX = scn.render.resolution_x
202
-        RenderBorder._resY = scn.render.resolution_y
203
-        
204
-        rbx = scn.renderborder
205
-        rbx.min_x = round_pixels(calc_pixels(scn.render.border_min_x, scn.render.resolution_x))
206
-        rbx.min_y = round_pixels(calc_pixels(scn.render.border_min_y, scn.render.resolution_y))
207
-        rbx.max_x = round_pixels(calc_pixels(scn.render.border_max_x, scn.render.resolution_x))
208
-        rbx.max_y = round_pixels(calc_pixels(scn.render.border_max_y, scn.render.resolution_y))
209
-        return {'FINISHED'}
210
-
211
-
212
-class RBORDER_OT_reset_border(bpy.types.Operator):
213
-    bl_idname = "rborder.reset_border"
214
-    bl_label = "Reset Render Border"
215
-    bl_description = "Fit render border to the current camera resolution"
216
-    bl_options = {'REGISTER', 'UNDO'}
217
-    
218
-    def execute(self, context):
219
-        scn = context.scene
220
-        rbx = scn.renderborder
221
-        rbx.min_x = 0
222
-        rbx.min_y = 0
223
-        rbx.max_x = scn.render.resolution_x
224
-        rbx.max_y = scn.render.resolution_y
225
-        self.report({'INFO'}, "Render Border adapted")
226
-        return {'FINISHED'}
227
-
228
-
229
-# ------------------------------------------------------------------------
230
-#   Panel
231
-# ------------------------------------------------------------------------
232
-
233
-class RBORDER_PT_camera(bpy.types.Panel):
234
-    bl_label = "Render Border"
235
-    bl_space_type = 'PROPERTIES'
236
-    bl_region_type = 'WINDOW'
237
-    bl_context = "data"
238
-    
239
-    @classmethod
240
-    def poll(cls, context):
241
-        return context.active_object.type == "CAMERA"
242
-    
243
-    def draw_header(self, context):
244
-        scn = context.scene
245
-        rbx = scn.renderborder
246
-        self.layout.prop(rbx, "use_rborder", text="")
247
-    
248
-    def draw(self, context):
249
-        scn = context.scene
250
-        rbx = scn.renderborder
251
-        layout = self.layout
252
-      
253
-        row = layout.row()
254
-        col = row.column(align=True)
255
-        rowsub = col.row(align=True)
256
-        rowsub.prop(rbx, "min_x", text="X")
257
-        rowsub.prop(rbx, "max_x", text="R")
258
-        rowsub = col.row(align=True)
259
-        rowsub.prop(rbx, "min_y", text="Y")
260
-        rowsub.prop(rbx, "max_y", text="T")
261
-        col.prop(rbx, "center_x")
262
-        col.prop(rbx, "center_y")
263
-        col.operator("rborder.reset_border", text="Reset Render Border", icon='FILE_REFRESH')
264
-        row = layout.row()
265
-        col = layout.column(align=True)
266
-        rowsub = col.row(align=True)
267
-        rowsub = row.split(factor=0.3, align=True)
268
-        rowsub.prop(scn.render, "use_crop_to_border", text="Crop Image")
269
-        rowsub.alignment = 'RIGHT'
270
-        rowsub.label(text="Width: {}px Height: {}px".format(rbx.width, rbx.height))
271
-
272
-        
273
-# ------------------------------------------------------------------------
274
-#   Registration
275
-# ------------------------------------------------------------------------
276
-
277
-@persistent
278
-def init_renderborder_member(dummy):
279
-    bpy.ops.rborder.init_border()
280
-
281
-
282
-classes = (
283
-    RenderBorder,
284
-    RBORDER_OT_init_border,
285
-    RBORDER_OT_reset_border,
286
-    RBORDER_PT_camera
287
-)
288
-
289
-def register():
290
-    from bpy.utils import register_class
291
-    for cls in classes:
292
-        register_class(cls)
293
-    
294
-    bpy.types.Scene.renderborder = bpy.props.PointerProperty(type=RenderBorder)
295
-    bpy.app.handlers.load_post.append(init_renderborder_member)
296
-
297
-def unregister():
298
-    from bpy.utils import unregister_class
299
-    for cls in reversed(classes):
300
-        unregister_class(cls)
301
-    
302
-    bpy.app.handlers.load_post.remove(init_renderborder_member)
303
-    del bpy.types.Scene.renderborder
304
-
305
-
306
-if __name__ == "__main__":
307
-    register()