The script below uses a handler function to show the current frame on the Text_object (every 10 frames) in 3d_view.
Tried assigning current_frame to text object in 2 ways:
1.With context.object.data.body
2.Updating text from Edit mode with editmodetoggle()
Both , Frame and Scene are being updated with their respective handler functions.
However, in both cases the handler function is not entirely getting executed and the Text in 3d_view doesn't update
How to resolve this?
# SCRIPT --> SHOW CURRENT FRAME (EVERY 10 FRAME'S) IN 3D_VIEW
import bpy
scene = bpy.context.scene
obj_active = scene.objects.active
obj_ops = bpy.ops.object
font_ops = bpy.ops.font
handlers = bpy.app.handlers
frame_current = scene.frame_current
obj_active = bpy.data.objects["Text"]
from bpy.app.handlers import persistent
@persistent
def frame_change(scene):
frame_end = 200
print(frame_current ," = script start")
#ATTEMPT 1--------------- UPDATE TEXT.DATA.BODY --------------
if frame_current <= frame_end:
if frame_current % 10 == 0 :
obj_active.data.body = str(frame_current)
print(frame_current ," = TEXT UPDATED") #Function not getting executed
print(frame_current ," = script end")
#ATTEMPT 2---------------- EDIT TEXT FROM EDIT MODE ------------------
# if frame_current <= frame_end:
# if frame_current % 10 == 0 :
# obj_ops.editmode_toggle()
# font_ops.delete(type='ALL')
# text_frame = str(frame_current)
# font_ops.text_insert(text = text_frame)
# obj_ops.editmode_toggle()
# print(text_frame," = FRAME CHANGE")
def register():
handlers.frame_change_post.clear()
handlers.frame_change_post.append(frame_change)
bpy.app.handlers.scene_update_post.append(frame_change)
handlers.load_post.append(frame_change)
def unregister():
handlers.frame_change_post.pop(frame_change)
bpy.app.handlers.scene_update_post.pop(frame_change)
if __name__ == "__main__":
register()
##########################---------- EDIT 1 -------##########################
Tried @batFinger's script but Text doesn't render in 3d_View (even if script runs in console )
import bpy
from bpy.app import handlers
from bpy.app.handlers import persistent
@persistent
def frame_change(scene):
frame_current = scene.frame_current
frame_end = 200
obj_active = scene.objects.get("Text")
print(frame_current ," = script start")
if obj_active is None:
return # no font object named "Text"
if frame_current <= frame_end:
if frame_current % 10 == 0 :
obj_active.data.body = str(frame_current)
print(frame_current ," = TEXT UPDATED")
print(frame_current ," = script end")
def register():
handlers.frame_change_post.append(frame_change)
#ALSO TRIED THE BELOW COMMAND'S BUT NO RESULT
# handlers.render_post.append(frame_change)
# handlers.scene_update_post.append(frame_change)
# handlers.load_post.append(frame_change)
# handlers.frame_change_pre.append(frame_change)
def unregister():
handlers.frame_change_post.remove(frame_change)
# handlers.render_post.remove(frame_change)
# handlers.scene_update_post.remove(frame_change)
# handlers.load_post.remove(frame_change)
# handlers.frame_change_pre.remove(frame_change)
if __name__ == "__main__":
register()