Anzeige

Phyton Node

Phyton Node | PSD-Tutorials.de

Erstellt von little_polarbear, 27.08.2012.

  1. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    Hi zusammen,

    ich bastel mir im Moment ein kleines PlugIn zusammen, um mir einen Haufen Arbeit zu sparen. Klappt auch ganz gut, ich hänge nur an einer Sache fest.

    In meiner Xpresso Schaltung ist ein Phyton Node. Dieser soll an einer bestimmten Position, die ich einlese eine Kugel kreieren. Klappt auch, nur leider stoppt der Phyton Node nicht und kreiert mir dann fröhlich Kugeln weiter. Dabei möchte ich nur 1 haben.

    hier ist noch der Code des Nodes

    import c4d
    #Welcome to the world of Python


    def main():
    Obj=c4d.BaseObject(c4d.Osphere)
    Obj.SetRelPos(c4d.Vector(x_var,y_var,z_var))
    doc.InsertObject(Obj)

    c4d.EventAdd()


    die Variablen x_var, y_var und z_var sind Zahlen, die ich einlesen lasse. Was mich auch ein bisschen irritiert ist, dass man bei den Nodes wohl nicht mit

    if __name__=='__main__':
    main()

    beenden muss. Aber muss man wohl nicht bei dem Node, sondern nur bei den Skripts im Editor.

    Wäre super, wenn mir jemand helfen könnte :)
     
    #1      
  2. KBB

    KBB Blaubär

    Dabei seit:
    18.03.2009
    Beiträge:
    8.519
    Geschlecht:
    männlich
    Software:
    C4D | CS PP 5.5 | Andere
    Phyton Node
    AW: Phyton Node

    Die nodes werden ja idR. mit Abspielen der Datei zu dem Zeitpunkt, wo das Xpresso-Tag relevant wird, ausgelöst, und sind damit eindeutig (jedenfalls glaube ich dass das der Grund ist ^^)


    Apropos Zeitpunkt:
    Wo/wie definierst Du denn den Zeitpunkt, wann das event stattfinden soll? Wenn nicht anders definiert, wird ein Xpresso-Tag ja in jedem Frame ausgelöst, u.U. sogar nicht nur 1x. Gestoppt wird es damit auch nicht. Also wird auch der Python node immer weiter losgetreten, richtig?

    Probiers mal mit einem globalen Schalter. Z.B. eine beliebige Variable, die idR. zu Anfang auf 0 steht, wird auf 1 gesetzt. Wenn sie 1 ist, wird keine Kugel mehr produziert.
    Sollte die Variable *jedes Mal* von vorne auf 0 gesetzt werden, weil sie so definiert werden muss, gib die 1 an eine 2. Variable weiter.
    Andere Methode, gleiche Wirkung: Lies den Timer aus und vergleiche, so dass die Kugel nur bis zu einem bestimmten Zeitpunkt oder nur im Frame 0 produziert wird.
     
    #2      
  3. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    AW: Phyton Node

    danke schön :)

    Hattest recht, hab vergessen den Zeitpunkt zu definieren. Hab das ganze jetzt mit einem Schalter gelöst. Klappt ganz gut :) der Rest jetzt hoffentlich auch ^^
     
    #3      
  4. nux95

    nux95 Developer, C4D Betatester

    1
    Dabei seit:
    31.07.2009
    Beiträge:
    1.386
    Geschlecht:
    männlich
    Ort:
    München
    Software:
    C4D R14
    Phyton Node
    AW: Phyton Node

    Hallo Anna,

    Der Code im Python Node wird nicht jedes mal wenn er in Aktion treten soll neu eingelesen und verarbeitet. Intern wird die Variable "main" aus der globalen Scope ausgelesen und abgespeichert.

    Das neu-einlesen wäre eine viel zu große Verschwendung der Rechenleistung. Wenn du dennoch die Schlussklausel hinzufügst, wird diese nur ein einziges mal aufgerufen, nähmlich dann, wenn du das Skript "kompilieren" lässt (und damit die "main" Funktion cashest).

    Ganz einfaches Beispiel um das zu demonstrieren für einen Python Node:

    Code (Text):
    1. def main():
    2.     print "main()"
    3.  
    4. if __name__ == "__main__":
    5.     print "global"
    LG,
    -Niklas
     
    #4      
  5. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    AW: Phyton Node

    ach danke schöne :)

    Sag mal, hast du schonmal versucht Constraint Tags mit Phyton zu erstellen. Ich komme soweit, dass ich es erstelle, die Klammer Funktion anmache und dann quasi auf Hinzufügen klicke und sich das Menü öffnet, wo man einstellen kann, ob man an einem Punkt fixieren möchte etc. und genau hier häng ich fest. Und zwar möchte ich das ganze an einem Punkt fixieren ueber folgenden Befehl:

    constr[50004,1] = c4d.ID_CONSTRAINT_TAG_CLAMP_TO_POINT

    constr ist hierbei der Name meines Constraint Tag. Nur jedesmal kriege ich die Fehlermeldung: setitem_got unexpected type 'int"

    Ich denke das wird die 1 sein, aber ich verstehe einfach nicht warum, schlieslich zeigt mir Cinema sogar in der Konsole an, dass wenn ich auf den An Mpdus zugreifen will dass ich constr[50004,1] benutzen soll. Ich hab das ganze mal im Ausrichtungsmodus probiert, weil dort hat man nicht dieses ,1 und dort kann ich problemlos Axen, etc. verändern. Hast du eine Idee, woran das liegen könnte?
     
    #5      
  6. nux95

    nux95 Developer, C4D Betatester

    1
    Dabei seit:
    31.07.2009
    Beiträge:
    1.386
    Geschlecht:
    männlich
    Ort:
    München
    Software:
    C4D R14
    Phyton Node
    AW: Phyton Node

    Erstmal ne ganz dumme Frage: Welches Constraint Tag denn genau? Das Hair oder CA Constraint Tag scheint es ja nicht zu sein?

    Edit: Ah, von deinem CGSociety Thread habe ich gesehen, dass du das CA Constraint Tag meinst.

    Wo kommen denn die 50004 und die 1 her? Sind ja bestimmt nicht rein zufällig gewählt. :)

    Jedenfalls gibt es auf dem CA Constraint Tag keinen Integer Wert, sondern ausschließlich boolsche Werte.

    -Niklas
     
    Zuletzt bearbeitet: 09.09.2012
    #6      
  7. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    AW: Phyton Node

    ich hab einfach mal einen Screenshot gemacht, woher die [50004, 1] kommen. Ich krieg die Zahlen, wenn ich den An Teil in meine Konsole ziehe, dann wird ja immer angezeigt, wie das ganze im Phyton Code heisst.

    http://img6.imageshack.us/img6/2004/bildschirmfoto20120910u.png

    So wie ich das verstanden habe, kann ich über die [50004, 1] auf den An Modus zugreifen (oder liege ich hier falsch?) und um von Ursprung in Punkte zu wechseln muss ich den Code hier benutzen

    c4d.ID_CA_CONSTRAINT_TAG_CLAMP_TO_POINT

    aber wie gesagt, ich krieg immer diese Fehlermeldung. Wenn du sagst, dass es nur Boolsche Werte gibt, kann ich ja nur True und False benutzen, aber trotzdem versteh ich nicht, wie ich dann damit in den Punkte Modus wechseln soll.
     
    #7      
  8. nux95

    nux95 Developer, C4D Betatester

    1
    Dabei seit:
    31.07.2009
    Beiträge:
    1.386
    Geschlecht:
    männlich
    Ort:
    München
    Software:
    C4D R14
    Phyton Node
    AW: Phyton Node

    Das nehm ich mal gleich wieder zurück. :D Ich hab das Tag noch nie benutzt und wusste nicht dass da neue Optionen kommen wenn man was anschaltet. ;)

    Code (Text):
    1. import c4d
    2. tag = doc.GetActiveTag()
    3. tag[50004, 1] = c4d.ID_CA_CONSTRAINT_TAG_CLAMP_TO_POINT
    4. tag.Message(c4d.MSG_UPDATE)
    5. c4d.EventAdd()
    Also bei mir funktioniert das wunderbar. Jedoch sollte "Klammern" auch aktiviert sein. ;)
    Wenn es nicht aktiviert ist (bzw. noch nicht irgendwann mal aktiviert wurde) bekomme ich die selbe Fehlermeldung. Das liegt einfach daran, dass der Container des Objekts diesen Teil der Description (Attribute im AM) noch nicht kennt, wenn sie noch nie auf dem Tag existiert haben.

    Code (Text):
    1. tag[c4d.ID_CA_CONSTRAINT_TAG_CLAMP] = True
    LG,
    Niklas
     
    #8      
  9. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    AW: Phyton Node

    Hey,

    vielen vielen Dank :)

    Meinst du, du könntest vielleicht noch die Cinema Datei mit dem Code hochladen, als kleines Beispiel? Nur wenn es nicht zu viel Arbeit ist.

    Weil ich glaub ich habs soweit kapiert, bin mir aber noch nicht 100% sicher damit.

    lg Anna
     
    #9      
  10. nux95

    nux95 Developer, C4D Betatester

    1
    Dabei seit:
    31.07.2009
    Beiträge:
    1.386
    Geschlecht:
    männlich
    Ort:
    München
    Software:
    C4D R14
    Phyton Node
    AW: Phyton Node

    Hallo Anna,

    zu nem Skript gibts eigentlich keine C4D Datei. ;) Aber hier mal ein Skript das einen ContraintTag auf das selektierte Objekt einfügt, Clamp einschaltet und das "To" Attribute auf "Point" stellt.

    Code (Text):
    1. import c4d
    2.  
    3. # Symbol not defined in the c4d module.
    4. Tcaconstraint = 1019364
    5.  
    6. def main():
    7.     if not op:
    8.         c4d.gui.MessageDialog("Please select a single object in the OM.")
    9.         return
    10.  
    11.     tag = op.MakeTag(Tcaconstraint)
    12.     tag[c4d.ID_CA_CONSTRAINT_TAG_CLAMP] = True
    13.     tag[50004, 1] = c4d.ID_CA_CONSTRAINT_TAG_CLAMP_TO_POINT
    14.  
    15.     c4d.EventAdd()
    16.  
    17. main()
    LG,
    -Niklas
     
    #10      
  11. little_polarbear

    little_polarbear Aktives Mitglied

    21
    Dabei seit:
    17.06.2009
    Beiträge:
    471
    Geschlecht:
    weiblich
    Software:
    Cinema 4D R.17, VRAY, Photoshop
    Phyton Node
    AW: Phyton Node

    daaaaaaanke schön :) ich kriegs jetzt hin, stand total auf dem Schlauch. Vielen Dank für deine Geduld :)

    lg Anna
     
    #11      
x
×
×