簡體   English   中英

如何在工作區工具更改上運行 bpy 回調

[英]how to run bpy callback on workspace tools change

如何將預繪制掛鈎添加到當前上下文工作區。工具更改?

我嘗試使用bpy.types.SpaceView3D.draw_handler_add(...)到達那里,因為它在每次繪制時運行,檢查 workspace.tools 是否更改,如果更改,則運行我的回調,但我的回調想要添加自己的回調SpaceView3D.draw_handler_add並以這種方式添加它的幀太晚了,直到用戶事件重新繪制屏幕之前,視圖端口都處於未繪制狀態。

我在網上找到了這篇文章https://devtalk.blender.org/t/update-property-when-active-tool-changes/11467/12

總結:可能有主線回調新https://developer.blender.org/D10635

AFWS 20 年 1 月

@kaio

這似乎是一個更好的解決方案。 這是一個神秘的代碼,因為我不知道你從哪里得到代碼信息,但后來開始查看 space_toolsystem_common.py 文件。 kaio AFWS 20 年 1 月

剛剛意識到可能有一種更簡潔的方法可以使用 msgbus 獲取活動工具的回調。 由於工作區工具本身不是 rna 屬性,因此認為可以監視隨工具更改的 bpy_prop_collection。

句柄是工作區本身,因此不必擔心保留引用。 訂閱一直持續到加載新文件,因此添加一個重新應用它的 load_post 回調。

請注意,這不會主動訂閱之后添加的工作區。 可能需要一個單獨的回調:joy:

 import bpy def rna_callback(workspace): idname = workspace.tools[-1].idname print(idname) def subscribe(workspace): bpy.msgbus.subscribe_rna( key=ws.path_resolve("tools", False), owner=workspace, args=(workspace,), notify=rna_callback) if __name__ == "__main__": ws = bpy.context.workspace subscribe(bpy.context.workspace) # Subscribe to all workspaces: if 0: for ws in bpy.data.workspaces: subscribe(bpy.context.workspace) # Clear all workspace subscriptions if 0: for ws in bpy.data.workspaces: bpy.msgbus.clear_by_owner(ws)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM