Antworten auf deine Fragen:
Neues Thema erstellen

Phyton Node

little_polarbear

Aktives Mitglied

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 :)
 

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Phyton Node

Was mich auch ein bisschen irritiert ist, dass man bei den Nodes wohl nicht ... beenden muss. Aber muss man wohl nicht bei dem Node, sondern nur bei den Skripts im Editor.
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:
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.
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.
 

little_polarbear

Aktives Mitglied

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 ^^
 

nux95

Developer, C4D Betatester

AW: Phyton Node

Hallo Anna,

Was mich auch ein bisschen irritiert ist, dass man bei den Nodes wohl nicht mit

if __name__=='__main__':
main()

beenden muss.
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:
def main():
    print "main()"

if __name__ == "__main__":
    print "global"
LG,
-Niklas
 

little_polarbear

Aktives Mitglied

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?
 

nux95

Developer, C4D Betatester

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:

little_polarbear

Aktives Mitglied

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.



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.
 

nux95

Developer, C4D Betatester

AW: Phyton Node

Jedenfalls gibt es auf dem CA Constraint Tag keinen Integer Wert, sondern ausschließlich boolsche Werte.
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:
import c4d
tag = doc.GetActiveTag()
tag[50004, 1] = c4d.ID_CA_CONSTRAINT_TAG_CLAMP_TO_POINT
tag.Message(c4d.MSG_UPDATE)
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:
tag[c4d.ID_CA_CONSTRAINT_TAG_CLAMP] = True

LG,
Niklas
 

little_polarbear

Aktives Mitglied

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
 

nux95

Developer, C4D Betatester

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:
import c4d

# Symbol not defined in the c4d module.
Tcaconstraint = 1019364

def main():
    if not op:
        c4d.gui.MessageDialog("Please select a single object in the OM.")
        return

    tag = op.MakeTag(Tcaconstraint)
    tag[c4d.ID_CA_CONSTRAINT_TAG_CLAMP] = True
    tag[50004, 1] = c4d.ID_CA_CONSTRAINT_TAG_CLAMP_TO_POINT

    c4d.EventAdd()

main()
LG,
-Niklas
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.455
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben