如何在Houdini中通过编程方式加载shelf
Houdini 编程加载Shelf实现方案
Houdini完全支持通过编程手段实现shelf的动态加载,逻辑和Maya中加载shelf的方式非常相似,核心通过Houdini内置的hou Python模块实现,具体实现方式分为两类:
方法1:加载已有的.shelf配置文件
Houdini的shelf默认以.shelf后缀的XML格式存储,默认存放路径为$HOUDINI_USER_PREF_DIR/toolbar,你可以提前导出配置好的shelf文件,需要时直接调用API加载,和Maya中加载.mel格式shelf的逻辑完全一致:
import hou # 替换为你的shelf文件实际路径 shelf_path = "/your/custom/path/xxx.shelf" # 加载shelf文件到Houdini内存中 hou.shelves.loadFile(shelf_path) # 将加载的shelf显示到当前界面的shelf集中 cur_shelf_set = hou.ui.curDesktop().shelfSet() if cur_shelf_set: # 替换为你的shelf名称,对应shelf文件里的name属性 target_shelf = hou.shelves.shelves()["your_shelf_name"] cur_shelf_set.addShelf(target_shelf)
方法2:动态创建全新shelf
如果不需要提前准备配置文件,也可以直接在代码中构造shelf和对应工具按钮,适合临时生成自定义工具架的场景:
import hou # 第一步:创建shelf上的工具按钮 custom_tool = hou.shelves.newTool( name="my_custom_tool", label="自定义工具", # 按钮点击时执行的代码 script=""" print("工具执行成功") # 这里可以写你自己的工具逻辑 """, # 用Houdini内置图标,也可填入自定义图标文件路径 icon="SOP_box" ) # 第二步:创建新的shelf,把刚才的工具加进去 custom_shelf = hou.shelves.newShelf( name="my_custom_shelf", label="我的工具架", tools=[custom_tool] ) # 第三步:把新shelf添加到当前界面显示 cur_shelf_set = hou.ui.curDesktop().shelfSet() if cur_shelf_set: cur_shelf_set.addShelf(custom_shelf)
常见注意事项
- 你可以通过
hou.shelves.shelves()获取当前所有已加载的shelf字典,key为shelf的唯一名称,可用于判断是否已存在同名shelf,避免重复创建 - 要移除已加载的shelf,调用
cur_shelf_set.removeShelf(目标shelf对象)即可 - 所有shelf相关的API都归在
hou.shelves命名空间下,可通过Houdini内置的Python帮助文档查询更多进阶用法
内容的提问来源于stack exchange,提问作者Rao
相关产品推荐
相关产品推荐

