将自定义属性分组到 Maya 中的节点

Group custom attributes to nodes in Maya

我正在用 C++ 编写一个 Maya 插件,并且有一个自定义的 MPxLocatorNode。
我已经为这个节点添加了许多自定义属性:

   MFnNumericAttribute nAttr;

    Attrib1 = nAttr.create( "Attribute1", "att1", MFnNumericData::kInt,1.0 );
    nAttr.setKeyable(false);
    nAttr.setStorable(true);
    nAttr.setReadable(true);
    nAttr.setWritable(true);
    nAttr.setHidden(false);
    addAttribute( unitId );

    Attrib2 = nAttr.create( "Attribute2", "att2", MFnNumericData::kInt,1.0 );
    nAttr.setKeyable(false);
 ...

但是我需要添加大量这些属性,因此希望在属性编辑器中显示时将它们分组。有没有办法动态创建组或分隔符?

我对分组这个词有点困惑,但我会回答 2 个分组选项。

第一个是将属性分组为一个复合体。化合物的一个很好的例子是点化合物。简而言之,你得到了一个拥有 3 个双重属性的点属性。所以 x、y、z 坐标被分组在 Point 属性下。如果现在您进入频道编辑器,您将看到分组效果。在属性编辑器中,对于已知/预定义类型,控件将自动分配,同时进行一些分组。

现在,因为您提到了属性面板,我认为您对如何让属性编辑器具有与默认布局不同的布局更感兴趣。如果您创建一个 AETemplate.mel 文件,其中包含同名函数,那么您可以控制布局的完成方式以及分组、显示、隐藏、更改每个控件的方式个人属性。

例如,我有一个自定义节点,您可以从 here 下载该节点。由于它是 Python 和 MEL,您可以从那里获得完整的源代码。

节点名称是 adskMathNode。 所以我创建了一个 AEadskMathNodeTemplate.mel 文件。 此文件包含如下函数声明:

global proc AEasdkMathNodeTemplate (string $nodeName) {
    editorTemplate -beginScrollLayout ;
    ...
}

这是您描述新布局的地方。 您将在 Maya 文件夹中获得大量更大的示例,网址为 /scripts/AETemplates