Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bl_info = {
- "name": "Render Region",
- "category": "Cenda Tools",
- "author": "Cenek Strichel",
- "description": "Render Region",
- "location": "Hotkey (commands)",
- "version": (1, 0, 5),
- "blender": (2, 93, 0),
- "wiki_url": "https://github.com/CenekStrichel/CendaTools/wiki",
- "tracker_url": "https://github.com/CenekStrichel/CendaTools/issues"
- }
- import bpy
- from bpy.app.handlers import persistent
- from bpy.props import StringProperty, IntProperty, BoolProperty, FloatProperty
- from bpy.types import Header, Panel
- import bpy
- import bgl
- import blf
- '''
- def draw_callback_px(self, context):
- bgl.glEnable(bgl.GL_BLEND)
- bgl.glColor4f(1.0, 0.0, 0.0, 0.5)
- bgl.glLineWidth(2)
- bgl.glBegin(bgl.GL_LINE_STRIP)
- for x, y in self.mouse_path:
- bgl.glVertex2i(self.startX, y)
- for x, y in self.mouse_path:
- bgl.glVertex2i( x, self.startY)
- bgl.glEnd()
- bgl.glLineWidth(1)
- bgl.glDisable(bgl.GL_BLEND)
- bgl.glColor4f(1.0, 0.0, 0.0, 1.0)
- '''
- ################################################################
- # RENDER REGION #
- ################################################################
- class RenderRegion(bpy.types.Operator):
- bl_idname = "view3d.render_region"
- bl_label = "Render region"
- bpy.types.Scene.ViewportShading = StringProperty( name = "", default = "", description = "")
- bpy.types.Scene.ViewportOverlays = BoolProperty( name = "", default = False, description = "")
- '''
- startX = IntProperty()
- startY = IntProperty()
- drawGL = BoolProperty()
- '''
- def modal(self, context, event):
- # context.area.tag_redraw()
- #########################################################
- # RETURN BACK # only if you have something saved
- #########################################################
- if( context.space_data.shading.type == 'RENDERED' and context.scene.ViewportShading != None ):
- context.space_data.shading.type = context.scene.ViewportShading
- bpy.ops.view3d.clear_render_border()
- # bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
- context.window.cursor_set("DEFAULT")
- context.space_data.overlay.show_overlays = context.scene.ViewportOverlays
- return {'FINISHED'}
- #########################################################
- # SET REGION # progress during set
- #########################################################
- elif event.type == 'LEFTMOUSE' and event.value == 'PRESS':
- context.scene.ViewportShading = context.space_data.shading.type
- self.startX = event.mouse_region_x
- self.startY = event.mouse_region_y
- # self.drawGL = True
- #########################################################
- # RENDER AFTER SET REGION #
- #########################################################
- elif event.type == 'LEFTMOUSE' and event.value == 'RELEASE':
- endX = event.mouse_region_x
- endY = event.mouse_region_y
- if(self.startY > endY and self.startX < endX):
- bpy.ops.view3d.render_border( xmin=self.startX, xmax=endX, ymin=endY, ymax=self.startY )
- elif(self.startY < endY and self.startX > endX):
- bpy.ops.view3d.render_border( xmin=endX, xmax=self.startX, ymin=self.startY, ymax=endY )
- elif(self.startY < endY and self.startX < endX):
- bpy.ops.view3d.render_border( xmin=self.startX, xmax=endX, ymin=self.startY, ymax=endY )
- elif(self.startY > endY and self.startX > endX):
- bpy.ops.view3d.render_border( xmin=endX, xmax=self.startX, ymin=endY, ymax=self.startY )
- context.space_data.shading.type = 'RENDERED'
- # remove draw
- # bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
- context.window.cursor_set("DEFAULT")
- context.scene.ViewportOverlays = context.space_data.overlay.show_overlays # save current
- context.space_data.overlay.show_overlays = False
- return {'FINISHED'}
- #########################################################
- # CANCEL REGION #
- #########################################################
- elif event.type == 'ESC':
- context.window.cursor_set("DEFAULT")
- return {'FINISHED'}
- '''
- if(self.drawGL):
- self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
- '''
- return {'RUNNING_MODAL'}
- def invoke(self, context, event):
- '''
- self.drawGL = False
- args = (self, context)
- self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL')
- self.mouse_path = []
- self.mouse_path.clear()
- '''
- context.window_manager.modal_handler_add(self)
- context.window.cursor_set("CROSSHAIR")
- return {'RUNNING_MODAL'}
- '''
- def execute(self, context):
- print("RENDER")
- if( bpy.context.space_data.viewport_shade == 'RENDERED' ):
- bpy.context.space_data.viewport_shade = context.scene.ViewportShading # 'MATERIAL'
- bpy.ops.view3d.clear_render_border()
- else:
- context.scene.ViewportShading = bpy.context.space_data.viewport_shade
- bpy.ops.view3d.render_border('INVOKE_DEFAULT')
- bpy.context.space_data.viewport_shade = 'RENDERED'
- return {'FINISHED'}
- '''
- ################################################################
- # register #
- classes = (
- RenderRegion,
- )
- def register():
- from bpy.utils import register_class
- for cls in classes:
- register_class(cls)
- def unregister():
- from bpy.utils import unregister_class
- for cls in reversed(classes):
- unregister_class(cls)
- if __name__ == "__main__":
- register()
Advertisement
Add Comment
Please, Sign In to add comment