Guest User

Untitled

a guest
Jul 14th, 2021
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.45 KB | None | 0 0
  1. bl_info = {
  2.     "name": "Render Region",
  3.     "category": "Cenda Tools",
  4.     "author": "Cenek Strichel",
  5.     "description": "Render Region",
  6.     "location": "Hotkey (commands)",
  7.     "version": (1, 0, 5),
  8.     "blender": (2, 93, 0),
  9.     "wiki_url": "https://github.com/CenekStrichel/CendaTools/wiki",
  10.     "tracker_url": "https://github.com/CenekStrichel/CendaTools/issues"
  11. }
  12.  
  13.  
  14. import bpy
  15.  
  16. from bpy.app.handlers import persistent
  17. from bpy.props import StringProperty, IntProperty, BoolProperty, FloatProperty
  18. from bpy.types import Header, Panel
  19.  
  20. import bpy
  21. import bgl
  22. import blf
  23.  
  24.  
  25. '''
  26. def draw_callback_px(self, context):
  27.  
  28.    bgl.glEnable(bgl.GL_BLEND)
  29.    bgl.glColor4f(1.0, 0.0, 0.0, 0.5)
  30.    bgl.glLineWidth(2)
  31.    
  32.    bgl.glBegin(bgl.GL_LINE_STRIP)
  33.    
  34.    for x, y in self.mouse_path:
  35.        bgl.glVertex2i(self.startX, y)
  36.        
  37.     for x, y in self.mouse_path:   
  38.        bgl.glVertex2i( x, self.startY)
  39.        
  40.    bgl.glEnd()
  41.    
  42.    bgl.glLineWidth(1)
  43.    bgl.glDisable(bgl.GL_BLEND)
  44.    bgl.glColor4f(1.0, 0.0, 0.0, 1.0)
  45. '''
  46.  
  47. ################################################################
  48. # RENDER REGION #
  49. ################################################################
  50. class RenderRegion(bpy.types.Operator):
  51.    
  52.     bl_idname = "view3d.render_region"
  53.     bl_label = "Render region"
  54.    
  55.     bpy.types.Scene.ViewportShading = StringProperty( name = "", default = "", description = "")
  56.     bpy.types.Scene.ViewportOverlays = BoolProperty( name = "", default = False, description = "")
  57.    
  58.     '''
  59.    startX = IntProperty()
  60.    startY = IntProperty()
  61.    drawGL = BoolProperty()
  62.    '''
  63.    
  64.     def modal(self, context, event):
  65.        
  66.     #    context.area.tag_redraw()
  67.  
  68.         #########################################################
  69.         # RETURN BACK # only if you have something saved
  70.         #########################################################
  71.         if( context.space_data.shading.type == 'RENDERED' and context.scene.ViewportShading != None ):
  72.            
  73.             context.space_data.shading.type = context.scene.ViewportShading
  74.             bpy.ops.view3d.clear_render_border()
  75.            
  76.         #    bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
  77.            
  78.             context.window.cursor_set("DEFAULT")
  79.             context.space_data.overlay.show_overlays = context.scene.ViewportOverlays
  80.  
  81.             return {'FINISHED'}
  82.        
  83.         #########################################################
  84.         # SET REGION # progress during set
  85.         #########################################################
  86.         elif event.type == 'LEFTMOUSE' and event.value == 'PRESS':
  87.  
  88.             context.scene.ViewportShading = context.space_data.shading.type
  89.            
  90.             self.startX = event.mouse_region_x
  91.             self.startY = event.mouse_region_y
  92.            
  93.         #    self.drawGL = True
  94.  
  95.            
  96.         #########################################################
  97.         # RENDER AFTER SET REGION #
  98.         #########################################################
  99.         elif event.type == 'LEFTMOUSE' and event.value == 'RELEASE':
  100.  
  101.             endX = event.mouse_region_x
  102.             endY = event.mouse_region_y
  103.  
  104.             if(self.startY > endY and self.startX < endX):
  105.                 bpy.ops.view3d.render_border( xmin=self.startX, xmax=endX, ymin=endY, ymax=self.startY )
  106.                
  107.             elif(self.startY < endY and self.startX > endX):
  108.                 bpy.ops.view3d.render_border( xmin=endX, xmax=self.startX, ymin=self.startY, ymax=endY )
  109.                
  110.             elif(self.startY < endY and self.startX < endX):   
  111.                 bpy.ops.view3d.render_border( xmin=self.startX, xmax=endX, ymin=self.startY, ymax=endY )
  112.                
  113.             elif(self.startY > endY and self.startX > endX):   
  114.                 bpy.ops.view3d.render_border( xmin=endX, xmax=self.startX, ymin=endY, ymax=self.startY )
  115.                
  116.             context.space_data.shading.type = 'RENDERED'
  117.            
  118.             # remove draw
  119.         #    bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
  120.            
  121.             context.window.cursor_set("DEFAULT")
  122.            
  123.             context.scene.ViewportOverlays = context.space_data.overlay.show_overlays # save current
  124.             context.space_data.overlay.show_overlays = False
  125.            
  126.             return {'FINISHED'}
  127.        
  128.         #########################################################
  129.         # CANCEL REGION #
  130.         #########################################################
  131.         elif event.type == 'ESC':
  132.            
  133.             context.window.cursor_set("DEFAULT")
  134.            
  135.             return {'FINISHED'}
  136.  
  137.         '''
  138.        if(self.drawGL):
  139.            
  140.            self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
  141.        '''
  142.  
  143.         return {'RUNNING_MODAL'}
  144.    
  145.    
  146.     def invoke(self, context, event):
  147.        
  148.         '''
  149.        self.drawGL = False
  150.  
  151.        args = (self, context)
  152.        self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL')
  153.        self.mouse_path = []
  154.        self.mouse_path.clear()
  155.        '''
  156.  
  157.         context.window_manager.modal_handler_add(self)
  158.        
  159.         context.window.cursor_set("CROSSHAIR")
  160.        
  161.         return {'RUNNING_MODAL'}
  162.  
  163.  
  164.     '''
  165.    def execute(self, context):
  166.        
  167.        print("RENDER")
  168.        
  169.        
  170.        if( bpy.context.space_data.viewport_shade == 'RENDERED' ):
  171.            
  172.            bpy.context.space_data.viewport_shade = context.scene.ViewportShading # 'MATERIAL'
  173.            bpy.ops.view3d.clear_render_border()
  174.  
  175.        else:
  176.            
  177.            context.scene.ViewportShading = bpy.context.space_data.viewport_shade
  178.            bpy.ops.view3d.render_border('INVOKE_DEFAULT')
  179.            bpy.context.space_data.viewport_shade = 'RENDERED'
  180.        
  181.        
  182.        return {'FINISHED'}
  183.    '''
  184.    
  185.    
  186.  
  187.            
  188. ################################################################
  189. # register #
  190.  
  191. classes = (
  192.     RenderRegion,
  193. )
  194.  
  195.  
  196. def register():
  197.  
  198.     from bpy.utils import register_class
  199.     for cls in classes:
  200.         register_class(cls)
  201.    
  202.    
  203. def unregister():
  204.    
  205.     from bpy.utils import unregister_class
  206.     for cls in reversed(classes):
  207.         unregister_class(cls)
  208.  
  209.    
  210. if __name__ == "__main__":
  211.     register()
Advertisement
Add Comment
Please, Sign In to add comment