| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- ######################################################################################################
- # A simple add-on to allows the user to precisly place the border render region (Ctrl+B in cam view) #
- # using numerical input, witch can be animated #
- # Actualy uncommented (see further version) #
- # Author: Lapineige #
- # License: GPL v3 #
- ######################################################################################################
-
-
- ############# Add-on description (used by Blender)
-
- bl_info = {
- "name": "Precise Render Border Adjust",
- "description": 'Allows to modify and animate the "Border Render" region with numerical input.',
- "author": "Lapineige",
- "version": (1, 3),
- "blender": (2, 71, 0),
- "location": "Properties > Render > Precise Render Border Adjust (panel)",
- "warning": "", # used for warning icon and text in addons panel
- "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",
- "tracker_url": "http://blenderclan.tuxfamily.org/html/modules/newbb/viewtopic.php?topic_id=42159",
- "category": "Render"}
-
- ##############
-
- import bpy
-
- bpy.types.Scene.x_min_pixels = bpy.props.IntProperty(min=0, description="Minimum X value (in pixel) for the render border")
- bpy.types.Scene.x_max_pixels = bpy.props.IntProperty(min=0, description="Maximum X value (in pixel) for the render border")
- bpy.types.Scene.y_min_pixels = bpy.props.IntProperty(min=0, description="Minimum Y value (in pixel) for the render border")
- bpy.types.Scene.y_max_pixels = bpy.props.IntProperty(min=0, description="Maximum Y value (in pixel) for the render border")
-
-
- class PreciseRenderBorderAdjust(bpy.types.Panel):
- """Creates the tools in a Panel, in the scene context of the properties editor"""
- bl_label = "Precise Render Border Adjust"
- bl_idname = "Precise_Render_Border_Adjust"
- bl_space_type = 'PROPERTIES'
- bl_region_type = 'WINDOW'
- bl_context = "render"
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
-
- if not scene.render.use_border:
- sub = layout.split(percentage=0.7)
- sub.label(icon="ERROR", text="Border Render not activated:")
- sub.prop(scene.render, "use_border")
-
- sub = layout.column()
- row = sub.row()
- row.label(text="")
- row.prop(scene.render, "border_max_y", text="Max", slider=True)
- row.label(text="")
- row = sub.row(align=True)
- row.prop(scene.render, "border_min_x", text="Min", slider=True)
- row.prop(scene.render, "border_max_x", text="Max", slider=True)
- row = sub.row()
- row.label(text="")
- row.prop(scene.render, "border_min_y", text="Min", slider=True)
- row.label(text="")
-
- row = layout.row()
- row.label(text="Convert values to pixels:")
- row.operator("render.bordertopixels", text="Border -> Pixels")
-
- layout.label(text="Pixels position X:")
- row = layout.row(align=True)
- row.prop(scene, "x_min_pixels", text="Min")
- row.prop(scene, "x_max_pixels", text="Max")
- layout.label(text="Pixels position Y:")
- row = layout.row(align=True)
- row.prop(scene, "y_min_pixels", text="Min")
- row.prop(scene, "y_max_pixels", text="Max")
-
- layout.label(icon="INFO", text="Don't forget to apply pixels values")
- row = layout.row()
- row.operator("render.pixelstoborder", text="Pixels -> Border")
-
- class PixelsToBorder(bpy.types.Operator):
- """ Convert the pixel value into the proportion needed by the Blender native property """
- bl_idname = "render.pixelstoborder"
- bl_label = "Convert Pixels to Border proportion"
-
- @classmethod
- def poll(cls, context):
- return True
-
- def execute(self, context):
- C = bpy.context
-
- X = C.scene.render.resolution_x
- Y = C.scene.render.resolution_y
-
- C.scene.render.border_min_x = C.scene.x_min_pixels / X
- C.scene.render.border_max_x = C.scene.x_max_pixels / X
- C.scene.render.border_min_y = C.scene.y_min_pixels / Y
- C.scene.render.border_max_y = C.scene.y_max_pixels / Y
-
- if C.scene.x_min_pixels > X:
- C.scene.x_min_pixels = X
- if C.scene.x_max_pixels > X:
- C.scene.x_max_pixels = X
- if C.scene.y_min_pixels > Y:
- C.scene.y_min_pixels = Y
- if C.scene.y_max_pixels > Y:
- C.scene.y_max_pixels = Y
-
- return {'FINISHED'}
-
- class BorderToPixels(bpy.types.Operator):
- """ Convert the Blender native property value to pixels"""
- bl_idname = "render.bordertopixels"
- bl_label = "Convert border values to pixels"
-
- @classmethod
- def poll(cls, context):
- return True
-
- def execute(self, context):
- C = bpy.context
-
- X = C.scene.render.resolution_x
- Y = C.scene.render.resolution_y
-
- C.scene.x_min_pixels = int(C.scene.render.border_min_x * X)
- C.scene.x_max_pixels = int(C.scene.render.border_max_x * X)
- C.scene.y_min_pixels = int(C.scene.render.border_min_y * Y)
- C.scene.y_max_pixels = int(C.scene.render.border_max_y * Y)
-
- return {'FINISHED'}
-
- def register():
- bpy.utils.register_class(PreciseRenderBorderAdjust)
- bpy.utils.register_class(PixelsToBorder)
- bpy.utils.register_class(BorderToPixels)
-
-
- def unregister():
- bpy.utils.unregister_class(PreciseRenderBorderAdjust)
- bpy.utils.unregister_class(PixelsToBorder)
- bpy.utils.unregister_class(BorderToPixels)
-
-
- if __name__ == "__main__":
- C = bpy.context
-
- X = C.scene.render.resolution_x
- Y = C.scene.render.resolution_y
-
- C.scene.x_min_pixels = 0
- C.scene.x_max_pixels = X
- C.scene.y_min_pixels = 0
- C.scene.y_max_pixels = Y
-
- register()
|