Ich schreibe einen Deformer-Knoten, der als Inputs die WorldMatrix und die Sichtbarkeit von Zylindern nimmt. Die Zylinder sind in Gruppen organisiert, und diese Struktur spiegelt sich auf meinem Deformer wider. Ich habe ein 2D-Array, das nach Gruppen mit Zylindern für Kinder organisiert ist, und jedes Array ist ein zusammengesetztes Attribut, sodass ich die Sichtbarkeit einer ganzen Gruppe und einzelner Löcher kontrollieren kann. Maya API duplizieren/löschen zusammengesetzte Array-Attribut
Dies ist das Attribut Setup:
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));
ich Python-Skripte geschrieben haben, um einen Zylinder zu dieser hinzuzufügen, die herausfinden, welche Gruppe es sollte einen neuen Eintrag, fügen Sie gehören und die Sichtbarkeit und worldMatrix verbinden oben.
Ich habe ein paar Probleme mit dieser Einrichtung. Erstens funktioniert das Löschen eines Zylinders so, wie ich es erwartet hätte, seit ich definiert habe, dass disconnectBehaviour die Instanz im Array löscht. Beim Löschen einer Gruppe bleibt jedoch ein getrenntes Attribut auf der obersten Ebene der Hierarchie, die ich manuell bereinigen muss.
Zweitens, während das Löschen recht gut funktioniert, wäre es sehr praktisch, wenn Duplikate ebenfalls verwendet werden könnten. Wenn also jemand einen Zylinder dupliziert hat, wurde ein Array-Eintrag erstellt und die notwendigen Attribute verbunden. Ist das möglich? Bisher haben Leute, die den Deformierer benutzen, dies natürlich versucht, und ich musste sie dazu bringen, ein Skript zu benutzen.
Dank @scottiedoo, dumm Kopie und Einfügen Fehler an der Spitze. Ich habe auch die DisconnectBehaviors hinzugefügt, die Sie vorgeschlagen haben, leider ist mein Problem immer noch da. Wenn eine Gruppe direkt gelöscht wird, bleibt die Instanz des Arrays dort auf demselben Index ohne Verbindungen. Wenn ich zuerst die Zylinder lösche, das Kind-Array leert und dann die Gruppe lösche, löscht die Instanz normal. Ich dachte, dass aGroupVisibility das DisconnectBehavior auslösen würde, aber anscheinend nicht. Meine Vermutung ist, dass das Element persistent bleibt, weil die Eliminierung der Eltern die Löschung des Kindes nicht auslöst. – jhod91
Klingt wie ein Fehler in Maya, dass es kein Kind der zusammengesetzten Gruppe sieht, das ein zusammengesetztes Array ist, das gelöscht wird. Ich nehme an, dass du dafür auch ein Skript haben musst, um es zu löschen, damit es sauber gemacht wird. Tut mir leid, aber ich habe keine Ideen mehr, ich möchte Ihre Attribute nicht umstrukturieren, wenn es so wichtig ist. – scottiedoo
keine Sorge, ich habe Python-Skripte, die das Aufräumen erledigen, ich dachte nur, ich würde fragen, ob ich etwas falsch mache/es gab einen besseren Weg. Ich kann mich mit Autodesk in Verbindung setzen – jhod91