Maya 插件属性验证

Maya Plugin attribute validation

我正在尝试验证我的自定义 MPxEmitterNode 属性。

我有 force_min 和 force_max 属性,用 maya 的说法是 double3 类型,基本上是两个包含 double[3] 数据的对象。

我想确保其 3 个组成部分中的每个组成部分的 force_min 都小于 force_max。如果有人在属性编辑器中为属性输入值,或者为这些属性调用 mels setAttr,然后 "min < max" 检查失败,我想通过交换最小值和最大值来做到这一点。

我已经尝试在 force_min、force_max 和它们各自的组件 x、y、z 对象之间建立 ATTRIBUTE_AFFECTS 关系。这似乎会导致导致 Maya 崩溃的循环问题。我还尝试为派生的 MPxEmitterNode 编辑自定义计算函数,因此它将 force_min 和 force_max 值设置为交换。在这种情况下,似乎从未计算过 force_* 属性。

如有任何帮助,我们将不胜感激。

通常,'Maya' 的方法是在最小值和最大值设置不正确的情况下让输出看起来不正确。您不知道谁将设置这些属性——它可能是连接或脚本,它甚至可能在动画帧之间被重置——所以最好让 dag 评估流过,即使结果是胡说八道。就像在球体节点上设置半径为零一样——'correct'还以为是错误的

然而,您可以在 compute() 方法中交换值,以获得与交换值相同的效果,而无需重置插头值本身。从计算内部设置输入插头不是一个好主意,因为它在 dag 评估流程中引入了一个循环。 Dag节点必须是非循环的(即dag中的"a":Directed Acyclic Graph