您可以在 Maya 中更改自定义属性的枚举列表吗?
Can you alter a Custom Attribute's enum list in Maya?
我正在向我的一些节点添加一个自定义属性,它是一个枚举列表。我可以使用 addAttr 轻松地做到这一点。但是我看不到以后添加新枚举值或更改枚举列表的方法。这可能吗?
我找到了一种方法,但似乎应该有更简单的方法。对于我的解决方法,如果该属性存在,我将获取其值并删除该属性。然后我将修改后的属性添加回节点并将其值设置为旧值。通过更改 $enumValues 我可以编辑枚举列表。 (注意我只打算添加值而不是删除值)这个脚本演示了我的解决方法:
string $attrName = "MaterialType";
string $enumValues = "Water:Sky:Terrain:Building:Road:";
string $selected[] = `ls -sl`;
if(`size $selected` == 1)
{
string $attrFullName = $selected[0]+"."+$attrName;
$existingValue = 0;
if(attributeExists($attrName, $selected[0]))
{
$existingValue = `getAttr $attrFullName`;
deleteAttr $attrFullName;
}
addAttr -ln $attrName -at "enum" -en $enumValues $selected;
setAttr $attrFullName $existingValue;
}
else
{
print "You must have 1 object and only 1 object selected\n";
};
值得一提的是,如果我 运行 这个脚本确实会更改枚举的值,但这些更改不会显示在 Maya 的界面中,直到我关闭文件并重新打开文件。
任何有关如何更优雅地执行此操作的建议将不胜感激。
您正在做的 - 删除属性并重新添加 - 不幸的是,这是唯一的方法。 Maya 枚举非常蹩脚。
脚本完成后该属性应该可以正常工作 - 您可能需要取消选择并重新选择它才能正确刷新属性编辑器。您可以在脚本运行后使用对象上的 listAttr -ud
检查它 - 您应该在结果中看到您的属性名称,即使 UI 尚未刷新。
我可能来晚了一点,但您可以在 addAttr 中使用“-edit”标志。
addAttr -edit -enumNames "A:B:C" "node.enumAttrName"
但是,您仍然需要手动或使用refreshEditorTemplates
刷新
编辑:
您可能还想考虑 optionMenuGrp
. You can add menuItems via the -parent flag. You can remove a specific child with the deleteUI
命令或在 optionsMenuGrp
.
的编辑模式下使用 -deleteAllItems 标志删除所有子项
我正在向我的一些节点添加一个自定义属性,它是一个枚举列表。我可以使用 addAttr 轻松地做到这一点。但是我看不到以后添加新枚举值或更改枚举列表的方法。这可能吗?
我找到了一种方法,但似乎应该有更简单的方法。对于我的解决方法,如果该属性存在,我将获取其值并删除该属性。然后我将修改后的属性添加回节点并将其值设置为旧值。通过更改 $enumValues 我可以编辑枚举列表。 (注意我只打算添加值而不是删除值)这个脚本演示了我的解决方法:
string $attrName = "MaterialType";
string $enumValues = "Water:Sky:Terrain:Building:Road:";
string $selected[] = `ls -sl`;
if(`size $selected` == 1)
{
string $attrFullName = $selected[0]+"."+$attrName;
$existingValue = 0;
if(attributeExists($attrName, $selected[0]))
{
$existingValue = `getAttr $attrFullName`;
deleteAttr $attrFullName;
}
addAttr -ln $attrName -at "enum" -en $enumValues $selected;
setAttr $attrFullName $existingValue;
}
else
{
print "You must have 1 object and only 1 object selected\n";
};
值得一提的是,如果我 运行 这个脚本确实会更改枚举的值,但这些更改不会显示在 Maya 的界面中,直到我关闭文件并重新打开文件。
任何有关如何更优雅地执行此操作的建议将不胜感激。
您正在做的 - 删除属性并重新添加 - 不幸的是,这是唯一的方法。 Maya 枚举非常蹩脚。
脚本完成后该属性应该可以正常工作 - 您可能需要取消选择并重新选择它才能正确刷新属性编辑器。您可以在脚本运行后使用对象上的 listAttr -ud
检查它 - 您应该在结果中看到您的属性名称,即使 UI 尚未刷新。
我可能来晚了一点,但您可以在 addAttr 中使用“-edit”标志。
addAttr -edit -enumNames "A:B:C" "node.enumAttrName"
但是,您仍然需要手动或使用refreshEditorTemplates
编辑:
您可能还想考虑 optionMenuGrp
. You can add menuItems via the -parent flag. You can remove a specific child with the deleteUI
命令或在 optionsMenuGrp
.