Files
blender-portable-repo/scripts/addons/SimpleBake/messages.py
T
2026-07-16 12:41:53 -06:00

155 lines
4.2 KiB
Python

import bpy
from bpy.types import Operator
from bpy.props import StringProperty
from bpy.utils import register_class, unregister_class
from .background_and_progress import BakeInProgress
import blf
import gpu
from gpu_extras.batch import batch_for_shader
from datetime import datetime
_handle = None
past_messages = [""]
current_obj = ""
current_mode = ""
debug_only = False
def redraw_3d_viewport():
s = bpy.context.screen
viewport_areas = []
for a in s.areas:
if a.type == "VIEW_3D":
viewport_areas.append(a)
for a in viewport_areas:
a.tag_redraw()
def remove_callback_px():
global _handle
global past_messages
# Check if condition is met
if BakeInProgress.is_baking:
# Reset timer
bpy.app.timers.unregister(remove_callback_px)
bpy.app.timers.register(remove_callback_px, first_interval=5.0)
else:
bpy.app.timers.unregister(remove_callback_px)
past_messages = [""]
try:
bpy.types.SpaceView3D.draw_handler_remove(_handle, 'WINDOW')
_handle = None
except Exception as e:
_handle = None
def draw_callback_px():
global _handle
global past_messages
global current_mode
global current_obj
sbp=bpy.context.scene.SimpleBake_Props
#
# if past_messages[-1] != sbp.fg_status_message:
# past_messages.append(sbp.fg_status_message)
# past_messages = past_messages[-3:]
font_id = 0
blf.size(font_id, 20)
blf.color(font_id, 1, 1, 1, 1)
COUNT=10
pms = past_messages[-1*COUNT:]
i=0
while i < len(pms):
blf.position(font_id, 15, (COUNT-i)*30, 0)
blf.draw(font_id, pms[i])
i+=1
if not BakeInProgress.is_baking:
return True
if BakeInProgress.Sequence.active:
blf.position(font_id, 15, (COUNT+4)*30, 0)
blf.draw(font_id, f"FRAME NUMBER - {bpy.context.scene.frame_current} (End Frame: {sbp.image_sequence_end_frame})")
blf.position(font_id, 15, (COUNT+3)*30, 0)
blf.draw(font_id, f"SIMPLEBAKE - BAKING IN PROGRESS - {sbp.percent_complete}% COMPLETE")
blf.position(font_id, 15, (COUNT+2)*30, 0)
if BakeInProgress.is_baking:
blf.draw(font_id, f"CURRENTLY BAKING | {current_obj} | {current_mode}")
blf.position(font_id, 15, (COUNT+1)*30, 0)
blf.draw(font_id, f"------------------------------------------------------------------------")
def print_message(context, msg, screen=True, debug=False):
#import time
#time.sleep(0.1) # Sleep for 100 milliseconds
if (debug_only and debug) or not debug_only:
print(f"SIMPLEBAKE: -- {msg}")
global _handle
if _handle == None and screen:
args = ()
_handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL')
bpy.app.timers.register(remove_callback_px, first_interval=5.0)
global past_messages
try:#Because we can be called on Blender load and get that restricted context error
sbp=context.scene.SimpleBake_Props
current_time = datetime.now().time()
formatted_time = current_time.strftime('%H:%M:%S')
sbp.fg_status_message = f"[{formatted_time}] - {msg}"
past_messages.append(sbp.fg_status_message)
redraw_3d_viewport()
except:
pass
global current_mode
global current_obj
if "Starting bake mode:" in msg:
current_mode = msg.replace("Starting bake mode: ","")
if "Starting object:" in msg:
current_obj = msg.replace("Starting object: ","")
class SimpleBake_OT_Print_Message(Operator):
bl_idname = "simplebake.print_message"
bl_label = ""
message: StringProperty()
def execute(self, context):
global _handle
if _handle == None:
args = ()
_handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL')
print_message(context, self.message)
return {'FINISHED'}
classes = ([
SimpleBake_OT_Print_Message
])
def register():
global classes
for cls in classes:
register_class(cls)
def unregister():
global classes
for cls in classes:
unregister_class(cls)