From 32c1104e1d86a7f60a5639ebb2c6514d3d929bae Mon Sep 17 00:00:00 2001 From: Jason van Gumster <jason@handturkeystudios.com> Date: Tue, 13 Mar 2012 02:21:50 +0000 Subject: [PATCH] -Updated version numbering to match spec in wiki (I think I got this right) -Added screen-drawing code and an operator to display times in the Image Editor -Added a button in the UV/Image Editor's header to toggle the on-screen time info -TODO: Ideally, this should have a keymap instead of a button in the header. Need to figure out why that code isn't working. --- render_time.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/render_time.py b/render_time.py index 96c2f1df..76471966 100644 --- a/render_time.py +++ b/render_time.py @@ -21,8 +21,8 @@ bl_info = { "name": "Render Time Estimation", "author": "Jason van Gumster (Fweeb)", - "version": (0, 4, 0), - "blender": (2, 6, 2), + "version": (0, 5, 0), + "blender": (2, 62, 1), "location": "UV/Image Editor > Properties > Image", "description": "Estimates the time to complete rendering on animations", "warning": "Does not work on OpenGL renders", @@ -34,9 +34,10 @@ bl_info = { import bpy, time from bpy.app.handlers import persistent from datetime import timedelta +import blf -timer = {"average": 0.0, "total": 0.0, "time_start": 0.0, "is_rendering": False} +timer = {"average": 0.0, "total": 0.0, "time_start": 0.0, "is_rendering": False, "hud": False} def set_rendering(scene): timer["is_rendering"] = True @@ -80,6 +81,62 @@ def image_panel_rendertime(self, context): if timer["is_rendering"] and scene.frame_current != scene.frame_start: layout.label(text = "Estimated completion: " + str(timedelta(seconds = (timer["average"] * (scene.frame_end - scene.frame_current))))) +def draw_callback_px(self, context): + scene = context.scene + + font_id = 0 # XXX, need to find out how best to get this. + + # draw some text + blf.position(font_id, 15, 30, 0) + blf.size(font_id, 18, 72) + blf.enable(font_id, blf.SHADOW) + blf.shadow(font_id, 5, 0.0, 0.0, 0.0, 1.0) + + blf.draw(font_id, "Total render time " + str(timedelta(seconds = timer["total"]))) + if timer["is_rendering"] and scene.frame_current != scene.frame_start: + blf.position(font_id, 15, 12, 0) + blf.draw(font_id, "Estimated completion: " + str(timedelta(seconds = (timer["average"] * (scene.frame_end - scene.frame_current))))) + + # restore defaults + blf.disable(font_id, blf.SHADOW) + +class RenderTimeHUD(bpy.types.Operator): + bl_idname = "view2d.rendertime_hud" + bl_label = "Display Render Times" + last_activity = 'NONE' + + def modal(self, context, event): + if context.area: + context.area.tag_redraw() + + #if event.type in {'ESC'}: + if timer["hud"] == False: + context.region.callback_remove(self._handle) + return {'CANCELLED'} + + return {'PASS_THROUGH'} + + def invoke(self, context, event): + if context.area.type == 'IMAGE_EDITOR': + if timer["hud"] == False: + context.window_manager.modal_handler_add(self) + + # Add the region OpenGL drawing callback + self._handle = context.region.callback_add(draw_callback_px, (self, context), 'POST_PIXEL') + timer["hud"] = True + return {'RUNNING_MODAL'} + else: + timer["hud"] = False + return {'CANCELLED'} + else: + self.report({'WARNING'}, "UV/Image Editor not found, cannot run operator") + return {'CANCELLED'} + +def display_hud(self, context): + scene = context.scene + layout = self.layout + layout.operator("view2d.rendertime_hud") + # Registration @@ -89,9 +146,22 @@ def register(): bpy.app.handlers.render_pre.append(start_timer) bpy.app.handlers.render_post.append(end_timer) bpy.types.IMAGE_PT_image_properties.append(image_panel_rendertime) + bpy.utils.register_class(RenderTimeHUD) + bpy.types.IMAGE_HT_header.append(display_hud) + # Keymapping XXX TODO - This doesn't work for some reason + #kc = bpy.context.window_manager.keyconfigs.addon + #km = kc.keymaps.new(name = "View 2D", space_type = 'IMAGE_EDITOR') + #kmi = km.keymap_items.new("view2d.rendertime_hud", 'E', 'PRESS') + #kmi.active = True def unregister(): + #kc = bpy.context.window_manager.keyconfigs.addon + #km = kc.keymaps["View 2D"] + #km.keymap_items.remove(km.keymap_items["view2d.rendertime_hud"]) + + bpy.types.IMAGE_HT_header.remove(display_hud) + bpy.utils.register_class(RenderTimeHUD) bpy.app.handlers.render_pre.remove(start_timer) bpy.app.handlers.render_post.remove(end_timer) bpy.app.handlers.render_cancel.append(unset_rendering) -- GitLab