worldMatrix と円柱の可視性を入力として受け取るデフォーマ ノードを作成しています。円柱はグループに編成され、この構造がデフォーマに反映されます。私は 2D 配列を持っており、これは円柱を子としてグループごとに編成されており、各配列は複合属性であるため、グループ全体の可視性と個々の穴を制御できます。
これは属性の設定です:
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 を定義しているため、シリンダーの削除は期待どおりに機能します。ただし、グループを削除すると、手動でクリーンアップする必要がある階層の最上位に切断された属性が残ります。
第二に、削除は非常にうまく機能しますが、複製も使用できれば非常に便利です。したがって、誰かが円柱を複製した場合、配列エントリが作成され、必要な属性が接続されました。これは可能ですか?これまでデフォーマを使っている人は自然とそうしようとしていて、スクリプトを使わせていました。