2016-07-27 18 views
0

Ich versuche, einen Teil meines Pipeline-Tools (der während des Starts von Maya ausgeführt wird) zu verzögern, nachdem VRay registriert wurde.Maya: Verschieben Sie ein Skript, bis VRay registriert ist?

ich zur Zeit verzögert die Initialisierung des Werkzeugs in einem userSetup.py etwa so:

def run_my_tool(): 
    import my_tool 
    reload(my_tool) 

mc.evalDeferred("run_my_tool()") 

Ich habe versucht, mit evalDeferred innerhalb des Werkzeugs um die Ausführung des render_settings Skripts zu verzögern, aber es hält läuft bevor VRay registriert wurde. Haben Sie irgendwelche Gedanken darüber, wie Sie einen Listener für das VRay-Registrierungsereignis erstellen oder welches Ereignis? Vielen Dank!

EDIT:

ein neues Thema gemacht, um herauszufinden, wie man richtig theodox Zustand verwenden, um/scriptJob Befehle Vorschlag here.

Antwort

0

Uiron bei tearchartists.com zeigte mir wie man das richtig macht. Hier ist ein link to the thread

Hier ist der Beitrag von uiron.

„nicht den Python-Code als String übergeben, es sei denn Sie müssen Überall dort, wo ein Python-Rückruf akzeptiert wird (das ist nicht überall in Maya api, aber meistens überall) versuchen, diese eines der folgenden:

# notice that we're passing a function, not function call 
mc.scriptJob(runOnce=True, e=["idle", myObject.myMethod], permanent=True) 
mc.scriptJob(runOnce=True, e=["idle", myGlobalFunction], permanent=True) 

# when in doubt, wrap into temporary function; remember that in Python you can 
# declare functions anywhere in the code, even inside other functions 
open_file_path = '...' 
def idle_handler(*args): 
    # here's where you solve the 'how to pass the argument into the handler' problem - 
    # use variable from outer scope 
    file_manip_open_fn(open_file_path) 
mc.scriptJob(runOnce=True, e=["idle", idle_handler], permanent=True) 

"

+1

, dass eine ziemlich häufige Art und Weise ist aufzuschieben, bis alle Lasten fertig sind. Sie können auch eine benutzerdefinierte Bedingung erstellen, die nach dem Plugin sucht und auslöst, wenn es mit dem 'condition'-Befehl und einem' scriptJob (ct = True) ' – theodox

+0

geladen wird. Das hört sich gut an, ich gebe das auch, danke! –

+0

@theodox Ich probiere Ihren Vorschlag aus, aber es treten Probleme auf, wenn ich mein Bedingungsskript von einem Modul aus starte. Es funktioniert gut, wenn ich es aus dem Skript-Editor ausführen. Ich habe den Code in meinem ursprünglichen Beitrag unter EDIT gepostet –