Da dies mein erster Beitrag ist, möchte ich auf ein wenig Inhalt eingehen. In der Tat kann es einen besseren Weg geben. In diesem Fall wäre ich dankbar, wenn Sie Informationen liefern könnten.
Dieses Mal möchte ich Attribute erkennen, die eingeschränkt oder verbunden sind. Der Grund für diesen Inhalt in diesem Thema ist, dass Sie listAttr verwenden, um Attributinformationen einzubringen. Selbst wenn Sie isConnection auf dieses anwenden und es überprüfen, können Einschränkung und Ausdruck erkannt werden. Wenn es durch Verbindung verbunden ist, wird es durchgehen.
Angenommen, Sie haben den verbundenen Attribut normal eingeschränkt. Wenn Sie die Animation zurückbrennen, wird die Verbindung natürlich getrennt.
Das ist ein Problem.
Ich bin wirklich in Schwierigkeiten.
Die Qualität des Rigs kann sich ändern. (Manchmal kann ein Außenstehender das Rig damit zerstören.)
Das ist der Grund, warum es richtig erkannt wird, wenn es irgendwie eingeschränkt oder gemeinsam mit einem Skript usw. verarbeitet wird. Wenn es verbunden zu sein scheint, schließen Sie es bitte vom Ziel aus! Ich habe diesen Inhalt mit der Absicht gemacht. Es ist in Ordnung, eine Checkerspezifikation zu erstellen und eine Warnung zu geben.
Also werde ich den Hauptteil betreten.
connection = pm.listConnections(node, connections=True)※1
if connection:
for _c in connection:
if (not isinstance(_c[0], pm.general.Attribute)※2
or isinstance(_c[1], pm.nodetypes.AnimCurveTA)
or not _c[0].isDestination()):
continue
#Attribute, die die oben genannten Bedingungen umgehen, sind abhängige Attribute
Ja, ich habe das Skript plötzlich eingefügt, aber vorerst spielen die beiden obigen Zeilen (* 1) keine Rolle. Ich schaue nur, ob ich alle Verbindungen im Knoten habe und ob ich sie habe.
Es sammelt nur Attributattribute von listAttr, aber listConnections ist sehr leistungsfähig. Wenn es wirklich verbunden ist, bekomme ich alles, also lasst es uns vorerst von hier auswaschen.
Erstens haben die von listConnection erhaltenen Informationen natürlich bestimmte Regeln.
([nt.Attribute(name), nt.contraint(name)], [hoge, hage]...etc)
Es sieht so aus, ich habe den Inhalt entsprechend geschrieben, also mach dir bitte keine Sorgen um die Details. Sie können den Listenteil in sich aufnehmen, indem Sie ihn mit der for-Anweisung drehen.
Dieser Teil: [nt.Attribute(name)※A, nt.contraint(name)※B]
In dieser Liste
Es wird sein.
Nachdem Sie die Informationen bisher extrahiert haben, müssen Sie nur noch den Status überprüfen. Die Bedingung ist diesmal der bedingte Ausdruck (* 2), der in if in for beschrieben ist.
if (not isinstance(_c[0], pm.general.Attribute)
or isinstance(_c[1], pm.nodetypes.AnimCurveTA)
or not _c[0].isDestination()):
Erklären Sie, was Sie tun
Verwenden Sie + isinstance, um zu überprüfen, ob die Informationen auf der Knotenseite ein Attribut sind.
Es ist ein bisschen knifflig, aber das war's.
Der Inhalt selbst ist sehr einfach, daher bin ich sicher, dass Sie auf ähnliche Weise etwas Ähnliches tun.
Wenn Sie jedoch die Daten anderer Unternehmen destruktiv verarbeiten möchten, Ich wäre Ihnen sehr dankbar, wenn Sie noch einmal einen ähnlichen Prozess durchführen könnten.
Es gibt viele andere Möglichkeiten, dies zu überprüfen. Diesmal habe ich die für Einschränkungen, Verbindungen und Rigs verwendete als Beispiel genommen. Ich denke, die Textur hat etwas Ähnliches.
Wenn Sie Erfahrung haben, denke ich, dass Sie sie richtig untersucht und in eine Form gebracht haben, die keine Probleme verursacht. Wenn Sie gerade erst anfangen, Skripte zu studieren! Wenn ja, möchte ich, dass Sie es so sorgfältig wie möglich behandeln.
Bitte lassen Sie mich wissen, wenn Sie welche haben.