私は、入力としてworldMatrixとシリンダーの可視性をとるデフォーマノードを作成しています。シリンダーはグループに編成され、この構造はデフォーマでミラーリングされます。私は2次元配列を持ち、子供のためのシリンダーを持つグループで編成されています。各配列は複合属性ですので、グループ全体の可視性と個々の穴を制御できます。Maya API複合配列の属性を複製/削除します
これは、属性の設定です:私は、それが属するべきグループを見つけ出すであろう、これにシリンダーを追加する新しいエントリを追加し、視認性とworldMatrixを接続するためのPythonスクリプトを書いた
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));
アップ。
このセットアップにはいくつか問題があります。まず、配列のインスタンスを削除するためにdisconnectBehaviourを定義しているので、私が期待するように、シリンダを削除することができます。しかし、グループを削除すると、階層の最上位レベルで切断された属性が残るため、手動でクリーンアップする必要があります。
第2に、削除はかなりうまくいくが、複製を使用することができれば便利だろう。したがって、誰かがシリンダを複製した場合、配列エントリが作成され、必要な属性が接続されました。これは可能ですか?これまでデフォーマを使用していた人々は自然にこれを試みましたが、スクリプトを使用する必要がありました。
ありがとう@scottiedoo、愚かなコピー&ペーストエラーが上部にあります。あなたが提案したDisconnectBehaviorsも追加しましたが、残念ながら私の問題はまだ残っています。 グループを直接削除する場合、配列のインスタンスは、接続のない同じインデックスに残ります。しかし、最初にシリンダーを削除し、子配列を空にしてからグループを削除すると、インスタンスは正常に削除されます。私はaGroupVisibilityがDisconnectBehaviorをトリガーすると思ったが、それはそう思わなかった。私の推測では、親の削除は子の削除を引き起こさないので、要素は存続します。 – jhod91
削除される複合配列である複合グループの子が表示されないというMayaのバグのようです。私はあなたが削除のためのスクリプトを持っている必要がありますので、それは適切なクリーンアップを行うだろうと思います。申し訳ありませんが、それが重要であればあなたの属性を再構築するのには不十分です。 – scottiedoo
心配する必要はありません、私は、クリーンアップを行うpythonスクリプトを持っている、私はちょうど私が間違って何かをしていたかどうかを確認すると思った/良い方法があった。オートデスクと連絡を取る場合があります – jhod91