Q100372:如何使用 Python 重命名输入和输出端口以获得更清晰的连接

关注

概括

当设置具有多个输入的节点(例如合并、切换或全局状态变量节点)时,手动重命名每个连接端口以明确连接目的可能非常繁琐。要自动化该过程,您可以使用 Python 创建自定义 Shelf Item 或 SuperTool 来处理重命名。本文解释了如何实现这一目标。

更多信息

下面包含并解释了一个示例脚本,该脚本循环遍历每个选定节点的输入端口并将其重命名为特定值。

这可以在Katana中使用 Merge 或 VariableSwitch 节点等进行测试。

示例脚本

# Grab all currently selected nodes
selectedNodes = NodegraphAPI.GetAllSelectedNodes()

# Loop through each selected node for node in selectedNodes:
# Get all the import ports within the node     inputPorts = node.getInputPorts()
# Loop through each port within the node     for inputs in inputPorts:         index = inputs.getIndex()         name = node.getInputPortByIndex(index).getName()
# Name each port 'Shot' plus their indexed location         node.renameInputPort(name,('Shot'+repr(index+1)))

使用脚本

Katana中,只需创建一个 Merge 或 VariableSwitch 节点并向其添加多个输入端口(单击节点上的大箭头即可添加输入端口)即可测试脚本:



在选择节点时将上述脚本粘贴/执行到 Python 选项卡中应将默认输入端口重命名为:

您还可以通过下载附加的renameInputPorts.py文件并将其放置在用户主区域“ .katana/Shelves/ ”目录中的 Shelf 文件夹名称下,将上述脚本作为自定义 Shelf 项目进行测试。

例如:

Windows: C:\Users\username\.katana\Shelves\RenameShelf\renameInputPorts.py
Linux: /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py
/.katana/Shelves/RenameShelf/renameInputPorts.py /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py

此设置是自定义 Shelf 或 SuperTool 的基础。从这里,您还可以添加一个弹出窗口小部件,该小部件将允许您重命名每个端口,或者您可以将代码作为 SuperTool 节点本身的一部分包含在内。

有关设置连接、创建货架项目和 SuperTools 的更多信息,请使用以下链接查看Katana用户指南和Katana开发人员指南:

Python 连接节点: Katana开发人员指南 - 使用节点 - 连接节点
Shelf 脚本: Katana用户指南 - Katana中的脚本和编程 - Shelf 项目脚本
SuperTools: Katana用户指南 - 组、宏和超级工具 - SuperTools


脚本说明

selectedNodes = NodegraphAPI.GetAllSelectedNodes()

使用 NodegraphAPI,您首先找到要应用脚本逻辑的目标节点。这可以通过两种方式完成:通过名称指定节点或查询当前选定的节点。上面的行查找当前选定的节点对象列表并将其存储为“ selectedNodes ”。

for node in selectedNodes:
inputPorts = node.getInputPorts()

获得节点对象列表后,您可以通过 for 循环迭代每个对象,并调用getInputPorts()函数来获取节点的所有输入端口。

for inputs in inputPorts:         
index = inputs.getIndex()

现在您已经有了每个节点的端口,您可以将其设置为通过各个端口的名称或索引位置循环。上面的行使用getIndex()函数查找它们的索引位置。

name = node.getInputPortByIndex(index).getName()
node.renameInputPort(name,('Shot'+repr(index+1))) 

上面的行检索节点端口的当前名称并将其重命名为Shot ,后跟该端口的索引。最终名称类似于 Shot1、Shot2、Shot3,具体取决于节点拥有的端口数量。

附件

我们很遗憾听到

请告诉我们