我正在编写一个变形器节点,它将世界矩阵和圆柱体的可见性作为输入。圆柱体被组织成组,这种结构反映在我的变形器上。我有一个二维数组,由带有儿童圆柱体的组组织,每个数组都是一个复合属性,因此我可以控制整个组的可见性和单个孔。
这是属性设置:
aVisibility = nAttr.create("Visibility", "vis", MFnNumericData::kBoolean);
CHECK_MSTATUS(addAttribute(aVisibility));
aTransform = mAttr.create("Transform", "trans", MFnMatrixAttribute::kDouble);
nAttr.setDisconnectBehavior(MFnAttribute::DisconnectBehavior::kDelete);
CHECK_MSTATUS(addAttribute(aTransform));
aCylinders = cAttr.create("Cylinders", "cylinders");
cAttr.addChild(aTransform);
cAttr.addChild(aVisibility);
cAttr.setArray(true);
CHECK_MSTATUS(addAttribute(aCylinders));
aGroupVisibility = nAttr.create("GroupVisibility", "grpVis", MFnNumericData::kBoolean, true);
nAttr.setDisconnectBehavior(MFnAttribute::DisconnectBehavior::kDelete);
CHECK_MSTATUS(addAttribute(aGroupVisibility));
aGroups = cAttr.create("Groups", "grps");
cAttr.addChild(aGroupVisibility);
cAttr.addChild(aGroupHoles);
cAttr.setArray(true);
CHECK_MSTATUS(addAttribute(aGroups));
我已经编写了 python 脚本来为此添加一个圆柱体,它将确定它应该属于哪个组,添加一个新条目并将可见性和 worldMatrix 连接起来。
我对这个设置有几个问题。首先,删除圆柱体的行为符合我的预期,因为我已经定义了 disconnectBehaviour 来删除数组中的实例。但是,删除组会在层次结构的顶层留下一个断开连接的属性,我必须手动清理它。
其次,虽然删除效果很好,但如果也可以使用复制,那将非常方便。因此,如果有人复制了一个圆柱体,则会创建一个数组条目并连接必要的属性。这可能吗?到目前为止,使用变形器的人自然会尝试这样做,我不得不让他们使用脚本。