Q100136:如何利用程序工作流程通过 OpScript 在场景图位置之间复制属性

关注

概括

本文介绍如何使用 OpScript 节点在场景图位置之间复制属性。

更多信息

Katana中工作时,可以使用 SetAttribute 节点轻松设置位置属性。但是,如果您希望将一个位置上设置的属性复制到另一个位置,则可以使用 OpScript 节点和几行代码来实现此目的。

尽管名称暗示了类似的功能,但AttributeCopy节点不能用于此目的。

AttributeCopy 遍历位置 fromRoot 处的 copyFrom 场景以及位置 toRoot 处的输入场景。它期望从这些位置找到相同的层次结构和位置名称。
AttrCopySS.png
这意味着要在其间复制属性的两个位置的所有子级都必须具有相同的层次结构和相同的名称。这可确保 AttributeCopy 节点将正确的属性复制到正确的位置。
该节点的工作方式如下,因为它旨在在已修改的不同节点图中的场景之间复制属性,但使用相同的资产,因此它们的场景图层次结构和位置名称是相同的。
要在同一场景图中的位置之间复制属性,您可以使用使用CopyAttr()命令的 OpScript。您可以按如下方式执行此操作:
1) 创建一个 OpScript 节点并将其applyWhere参数设置为“位于与 CEL 匹配的位置”。
2) 添加三个用户参数,名为“attrFrom”、“attrTo”和“sourceLocation”。有关如何向节点添加用户参数的说明,请参阅Katana 用户指南 中的添加用户参数部分
3) sourceLocation参数的值应该是要从中复制属性的场景图位置的路径。
4) CEL 语句应该是要将属性复制到的场景图位置的路径。
5) 在attrFrom文本字段中键入要从中复制的属性的名称。
6) 添加要复制到的属性的名称作为attrTo参数值。
7) 在 OpScript 节点的Script参数中添加以下 lua 代码:
 local attrFrom = Interface.GetOpArg("user. attrFrom"):getValue()
local attrTo = Interface.GetOpArg("user. attrTo"):getValue()
local sourceLocation = Interface.GetOpArg("user. sourceLocation"):getValue()
Interface.CopyAttr(attrTo, attrFrom, true, sourceLocation)

请注意,这在采购本地属性时才有效。如果您要复制的属性是从父位置继承的,请将最后一行更改为:
 Interface.SetAttr(attrTo, Interface.GetGlobalAttr( attrFrom, sourceLocation))

    我们很遗憾听到

    请告诉我们