Ich benutze: Maya2014 + pyqt4.8 + python2.7

Ich mache eine Anwendung, mit der Sie die Auswahl von Elementen in Maya beschleunigen und vereinfachen können. Ist ein Selektor, den der Benutzer an die Objekte in der Szene anhängen kann. Die Auswahl von Objekten im Fenster führt zur Trennung von Objekten in der Szene. aber im Gegenteil, ich kann nicht finden, wie es geht.

enter image description here

Wie kann man ein Ereignis erfassen, das beim Ändern der Auswahl von Objekten in der Szene auftritt, und das Programm weiter verarbeiten?

0
MaxKu 19 Aug. 2015 im 11:34

3 Antworten

Beste Antwort

Ich empfehle wirklich, wenn Sie ein ziemlich schweres Zeug machen, dann halten Sie sich von Scriptjob fern. Ich bevorzuge die API

def test(*args, **kwargs):
    print "Fooo"


import maya.OpenMaya as OpenMaya
idx = OpenMaya.MEventMessage.addEventCallback("SelectionChanged", test)

#when ever you finish doing your stuff
OpenMaya.MMessage.removeCallback(idx)
7
Achayan 19 Aug. 2015 im 17:46

Bis ich eine solche lösung gefunden habe, die auf maya api basiert:

self.sJob = cmds.scriptJob(event=['SelectionChanged', self.myFnc])

Dieser Mechanismus erstellt ein Maya-Ereignis, das meine Funktion aufruft, wenn ein Änderungsobjekt ausgewählt wird.

Vielleicht gibt es eine korrektere Option. Zum Beispiel, um Identifokator Fenster Maya zu bekommen und es macht Ihre Veranstaltung. Obwohl ich denke, dass die Verwendung von Maya API auch keine schlechte Option ist. Der einzige Nachteil ist, dass Sie beim Schließen eines Fensters scriptJob folgen und entfernen müssen, aber es ist ein lösbares Problem.

0
MaxKu 19 Aug. 2015 im 10:51

Sie können hierfür den Befehl scriptJob verwenden.

Mit scriptJob können Sie Code angeben oder Aktionen ausführen, wenn die angegebene Bedingung erfüllt ist oder ein bestimmtes Ereignis ausgelöst wird.

Für Auswahländerungen verwenden Sie das Flag event mit "SelectionChanged" als Parameter:

myScriptJobID = scriptJob(event=["SelectionChanged", your_function])

# You can later use this scriptJob's id to modify or delete it like so:

scriptJob(kill=myScriptJobID)

Weitere Optionen finden Sie in den Dokumenten.

2
kartikg3 19 Aug. 2015 im 10:56