创建支持服务单
关注

Q100326:编写和测试自定义操作

摘要

Ops是在Katana中创建和操作3D场景数据的操作构建块。 Ops是 用C ++编写的 名为 Op Types 的插件实例 。他们可以使用Katana的 Op API 执行各种操作,操纵场景图和修改属性

本文提供了基于 $ KATANA_ROOT / plugins / Src / Ops 下的HelloWorld示例Op编写,编译和测试自定义Op的分步示例

更多信息

在创建自定义Op之前,查看位于 $ KATANA_ROOT / plugins / Src / Ops 中的示例Ops可能会有所帮助 。本教程特别基于HelloWorld示例Op。

以下步骤描述了如何修改此Op的源代码以创建可以在场景图中的位置读取和设置属性的Op。

  1. 修改 $ KATANA_ROOT / plugins / Src / Ops / HelloWorld / src / HelloWorldOp.cpp中 cook()函数, 内容如下:

static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
   FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
   interface.setAttr("testType",  typeAttr);

    if (interface.atRoot())
    {
       interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
    }

}

  1. 要构建示例Op插件,请按照 $ KATANA_ROOT / plugins / Src / README.md中的说明进行操作。

    确保源文件路径指向cmake命令中正确的Katana版本。没有必要在cmake命令中包含-DCMAKE_PREFIX_PATH,因为这是为我们在这种情况下不感兴趣的其他Op示例指定依赖项。

  1. 构建并安装插件后,请确保安装目录是KATANA _RESOURCES的一部分。使用README.md中给出的命令,MyKatanaResources目录应包含在KATANA _RESOURCES中

  1. 启动Katana,创建一个CameraCreate节点并连接到GenericOp节点。

  1. 将GenericOp节点的opType参数设置为“HelloWorld”。结果应该是在每个位置上设置名为testType的属性,并且属性的值将是位置的类型。此外,名为“hello”的属性将在 / root 上设置 为“world!”的值。

cook() 函数也可以修改,读取或设置,你有兴趣在一个位置的任何属性,或者执行其他一些操作。

有关可在自定义操作中使用的更多功能,请参阅 Cook接口(C ++)上的Katana开发人员指南

注意: Op默认在所有位置运行(由 GenericOp节点中 applyWhere 参数 指定 ),因此它将自动遍历整个场景图。在上面的示例中,这会导致在所有位置设置testType属性。

因为这并不总是令人满意,所以上面的例子还包括一个if语句,检查接口是否为 atRoot() - 这将导致if块中的语句仅在Op在其最顶层位置运行时才被执行at,你可以 在if语句之后 使用 interface.stopChildTraversal() 来阻止Op遍历最顶层位置下面的整个场景图。

如果您想创建自定义节点类型以使用您的Op,请参阅 $ KATANA_ROOT / plugins / Src / Ops / Messer / RegisterMesserNode.py中 给出 NodeTypeBuilder 示例

Katana开发人员指南中介绍了 一些NodeTypeBuilder API函数

如果您遇到这些步骤的任何问题,请打开支持服务单,告诉我们您遇到的问题以及到目前为止所采取的故障排除步骤。

有关如何打开支持服务单的更多信息,请参阅“ 使用支持门户 ”一文。



这篇文章有帮助吗?
/

We're sorry to hear that!

Please tell us why.
2 人中有 1 人觉得有帮助

评论