Antworten auf deine Fragen:
Neues Thema erstellen

Py4D - Anfängerfragen klären

nux95

Developer, C4D Betatester

Hallo Leute,

ich les mir jetz seit 2 Stunden die Documentation von Py4D durch, und ich check echt null ! :motz:

zB. wenn es heisst der Befehl c4d.BaseSelect.GetCount() gibt aus wieviel Objekte selektiert sind.
Wenn ich den Skript jetzt wiefolgt ausführe,

import c4d

c4d.BaseSelect.GetCount()
kommt eine Fehlermeldung das ein Argument für GetCount() benötigt wird.
Egal was ich zwischen die Klammern schreibe, funktioniert es nicht.

In der Documentation sind auch echt wenige Beispiele drin.


Anderes Beispiel.
Es gibt einige Befehle für zB das Auslesen der Daten eines Splines.
Aber wie teile ich dem Befehl mit von WELCHER Spline die Daten ausgelesen werden sollen ?

Und wenn ich das jetzt zB auch noch in Variablen abspeichern will ?


Hat hier jemand viel Ahnung von Py4D und könnte mir das Erklären ?
Bzw vllt hat derjenige ja auch lust ein Tutorial für Anfänger zu schreiben :)
Oder kennt jemand ein schon onlinestehendes gutes Starttutorial ?
Ich konnte keines finden, bzw es war veraltet. :'(

Vielen Dank schonmal im Vorraus,
nux95
 

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Wie gesagt, schau dir die Beispiel Plug-Ins und an. Dann schau dir Befehl für Befehl an und lese diesen in der Dokumention nach, was dieser bewirkt und wie er angewandt wurde.

Hast du dennoch Fragen, bitte den ganzen Code mit dazu schreiben.
 
Zuletzt bearbeitet:

nux95

Developer, C4D Betatester

AW: Py4D - Anfängertutorial o.ä. ?

Ich hab mir schon ein paar davon angesehen.
Sieht ziemlich komliziert aus und ich hab echt wenig verstanden :(
Aber ich werde es noch einmal versuchen.

Ich hoffe ich werde hier auf Antworten stoßen sobald ich Fragen habe ? :)

lg nux
 

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Klar, versuchen kann ich es. ;)
Bitte schreib auch hinzu welche Art von Py4D - Script, Tag oder Plug-In.
 

nux95

Developer, C4D Betatester

AW: Py4D - Anfängertutorial o.ä. ?

Cool Danke :)

Ja also mal von Anfang an.
In der Documentation steht nirgends wie so etwas anzufangen hat undso.
Herausgefunden habe ich dass man ersteinmal "Cinema4D importieren" muss, und halt noch was man sonst so benötigt.
Code:
import c4d
import gui
...
Wenn ich mir jetzt mal das Beispiel zu der Klasse BaseObject anschaue sieht der Skript dafür so aus:

Code:
import c4d  

obj = c4d.BaseObject(c4d.Ocube) 
obj.SetPos(c4d.Vector(20))
Wenn ich das richtig verstehe wird hier ein Würfel erzeugt der auf allen Achsen die Positon 20 hat.
Jetzt führe ich das aus und es passiert null. --'


Oder einmal angenommen ich möchte die Polygonanzahl einer Kugel auslesen. Müsste das ganze dann nicht so aussehen ?
Code:
import c4d

kug = c4d.BaseObject.__init__()
c4d.PolygonObject.GetAllPolygons(kug)
Beim ausführen wird allerdings dieser Text ausgegeben:
Code:
Type Error: descriptor '__init__' of 'object' object needs an argument.
Warum ist die Documentation dafür so schlecht aufgebaut ? :'(

Vieln Dank schonmal,
nux
 

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Oh je, da musst du dich aber nochmal ordentlich hinsetzen und genauer lesen. :p

Das import muss verwendet werden, damit die verschiedenen Module geladen werden. Später kannst du deine eigenen Module schreiben. ;)

Beim zweiten erstellst du die Kugel nur intern im Speicher, du musst noch mit dem Befehl doc.insertobject(obj) der Szene hinzufügen.

Und beim letzten da fehlt alles. Du schreibst BaseObject.__init__() aber Initialisieren willst du sicherlich nichts. Zu aller erst musst du aus dem Tag das aktuelle Objekt heraus lesen.

Code:
import c4d

def main():
   obj = op.GetObject( )     [I]//Das Objekt wird vom Tag aus in die Variable obj gespeichert[/I]
   anz = c4d.PolygonObject.GetPolygonCount(obj)    [I]//Die Anzahl wird aus der Variable obj heraus gelesen[/I]
   print(anz)    [I]//Die Anzahl wird in der Konsole ausgegeben[/I]
 
Zuletzt bearbeitet:

nux95

Developer, C4D Betatester

AW: Py4D - Anfängertutorial o.ä. ?

Bin momentan nur mobil online, darum
kann ich das jetzt nich sofort ausprobieren.
Ja dazu werde ich den Ferien genuegend Zeit finden :D

Ahh ich sehe schon. Ich denke da viel zu automatisch, nich ? ;)
Darauf das obj noch mit einem neuen Befehl in das Dokument einzufügen wäre ich nicht so einfach gekommen. :eek:

Ich denke mal dann dürfte die Grundregel dazu so aussehen:
Prüfe ob du auch jedes kleine Detail des gewünschten Vorgangs beschrieben hast.

In diesem Fall:
1. Objekt erzeugen
2. Objekt position setzen
3. (der vergessene Schritt) das Objekt in das Dokument einfügen.

Ich wiederhole das ganz nur damits fuer mich und auch für andere später leichter nachzuvollziehn ist. ;)


Meine Güte was man alles vergessen kann. Auf print bin ich auch ned gekommen. Naia der rest war ja auch falsch ^^
Was bedeutet eigemtlich "Initalisieren" ?
op ist immer der Besitzer des Tags, richtig ?
Also gibts das nur beim "Tagging" ? ;D

Was mich noch interessieren würde ist wie man Eingaben oder Benutzerdaten miteinbringen kann.
Oder ist das zu schwer und kommt vllt erst in einem anderen Kapitel ? :D

Vielen Dank für die Korrektur und überhaupt für deine Hilfe.
Werde mit dem neugewonnen Wissen jetzt ein bisschen herumexperimentieren und mich dann wieder melden. (;

Liebe Grüße
nux95
 

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Initialisieren brauchst du als Anfänger nicht. Ich weiß nämlich auch nicht so recht für was man dies verwendet. :p

op ist der Tag selbst. Also ich habe die Variable nur bei Tags verwendet.

Um auf Benutzerdaten zu zugreifen abc = op[ID_USERDATA, 1].
op ist wie gesagt, der Py4D-Tag und mit [ID_USERDATA, 1] greifst du auf die erste Benutzerdatei zu, die der Tag besitzt. Das ganze wird noch in der Variable abc abgespeichert.

Um Attribute eines Elementes zu ändern, einfach per Drag&Drop das Attribut in den Py4D-Editor ziehen und das # davor löschen und dann noch wie in diesem Beispiel (Verändert die Größe eines Würfels):

Code:
import c4d
from c4d import symbols as sy

def main():
    obj = op.GetObject()
    obj[sy.PRIM_CUBE_LEN] = c4d.Vector(100,500,200);
 

nux95

Developer, C4D Betatester

AW: Py4D - Anfängertutorial o.ä. ?

Ich glaub du hast oben ein wenig durcheinander gebracht ^^
Da erstell ichd och ein Würfel und keine Kugel oder ? :D
import c4d obj = c4d.BaseObject(c4d.Ocube) obj.SetPos(c4d.Vector(20))
Allerdings funktioniert dieser Skript nicht. Oder habe ich trotz deiner Erklärung etwas vergessen ? :eek:
import c4d
import c4d

def main():
obj = c4d.BaseObject(c4d.Ocube)
obj.SetPos()
doc.insertobject(obj)
Wofür benötogigt man eigentlich das def main(): ?
Kann man nicht einfach direkt drauf losschreiben ?


Cool das habe ich kapiert, und funktioniert sogar ;)
Danke

PS: Wie machst du die mehrfachen Leerzeichen ? Bei mir werden die iwie gelöscht :p
 

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Ja, das ist auch egal für ein Beispiel ob Kugel oder Würfel.
Welches Script funktioniert nicht? Du hast nur Codeschnipsel. :p

def main(): ist das erste Unterprogramm was gestartet wird. Was Unterprogramme sind, kannst du hier nachlesen: Unterprogramm ? Wikipedia

Also im [cod.e][/cod.e] kann man mehrere Leerzeichen machen dachte ich. ;)

Ich überlege schon die ganze Zeit ein Tutorial zu machen. Jedoch fehlt mir das Plug-In. An dem was ich gerade arbeite ist noch viel zu viel unfertig. Sollte jemand eine Plug-In Idee haben, immer her damit. :p
 
Zuletzt bearbeitet:

nux95

Developer, C4D Betatester

AW: Py4D - Anfängertutorial o.ä. ?

Stimmt auch wieder ;)
Is derhier unfertig ? ^^

Code:
import c4d

    def main():
          obj = c4d.BaseObject(c4d.Ocube) 
          obj.SetPos()
          doc.insertobject(obj)
Okei danke werd ich lesen :p

def kommt doch bestimmt von Definition.
Kann ich damit einen Befehl definieren den ich dann im Skript immerwieder einsetzen kann ohne den gesamten Ablauf neu zuschreiben ?


Hm eine Plugin Idee .. Kannst ja das Booleobjekt verbessern :lol:
Wie wäre es mit einem Extrudeobjekt ? So wie von MoGraph. Für leute halt die kein MoGraph haben :D
Oder vllt ein Array Objekt ?
Muss ja nicht irgendwas neues sein ;)
Halt als gutes Beispiel.
Oder vllt gleich dazuschreiben wie man Geometrie einfügen kann ? Oder geht das nicht ? ^^

Find ich echt gut dass du das machen willst. :)

Greets, nux

PS: Aaahhaa Ich hab die Zitatfunktion verwendet nicht die Code funktion ;)
 
Zuletzt bearbeitet:

NT2005

Von dannen.

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Ja, das kann man als Definition gelten lassen und ja, du kannst es immer wieder innerhalb einer anderen Definition aufrufen.

Beispiel:

Code:
import c4d

def main():
   print("Gleich wird ein Null-Objekt erstellt.")
   CreateNull("Super Null", c4d.Vector(50,-2,30))
   print("Ein Null-Objekt wurde erstellt.")

def CreateNull(name, pos):
   cnull = c4d.BaseObject(c4d.Onull)
   cnull.SetPos(pos)
   cnull.SetName(name)
   doc.InsertObject(cnull)
 

nux95

Developer, C4D Betatester

AW: Py4D - Anfängerfragen klären

Irgendwie funktioniert das nicht wenn ich das in den Skriptmanager Kopiere und ausführe :eek:
 

NT2005

Von dannen.

AW: Py4D - Anfängerfragen klären

Hallo nux95,

Das habe ich im Py4D-Tag geschrieben. Für den Script-Manager sieht es so aus:

Code:
import c4d

def main():
   print("Gleich wird ein Null-Objekt erstellt.")
   CreateNull("Super Null", c4d.Vector(50,-2,30))
   print("Ein Null-Objekt wurde erstellt.")

def CreateNull(name, pos):
   cnull = c4d.BaseObject(c4d.Onull)
   cnull.SetPos(pos)
   cnull.SetName(name)
   doc.InsertObject(cnull)
   c4d.EventAdd()  

main()

Hier wird main() nicht von selbst gestartet, sondern muss erst aufgerufen werden.
 
Zuletzt bearbeitet:

nux95

Developer, C4D Betatester

AW: Py4D - Anfängerfragen klären

Uuups ^^ Jetzt gehts :D
Und was müsste man anders machen wenn es ein Skript sein soll ?
 

Cyres90

Noch nicht viel geschrieben

AW: Py4D - Anfängertutorial o.ä. ?

Hallo nux95,

Initialisieren brauchst du als Anfänger nicht. Ich weiß nämlich auch nicht so recht für was man dies verwendet. :p

Den befehl __init__ wird beim Aufrufen einer Class verwendet.

Ein Beispiel wäre z.B.:
PHP:
class Beispielklasse(object):
    def __init__(self):
        print "Hello World!"

Beim aufrufen der class "Beispielklasse" wird "Hello World!" ausgegeben. Diese Init-Funktion nennt man Constructor.
 

nux95

Developer, C4D Betatester

AW: Py4D - Anfängerfragen klären

Danke Cyres, darauf bin ich mittlerweile auch schon gekommen.
Aber trotzdem sehr hilfreich auch für andere.

Nur ums bissl zu vervollständigen:
PHP:
class foo:
    __del__(self):
        print "I'm about to be killed"
    __mul__(self, other):
        print "I'm about to be multiplied with %s" % other
    __invert__(self):
        print "I'm about to be inverted"
    __len__(self):
        print "Someone wants to know my length"

f = foo()
f * 2
~f
len(f)
del f

gibt zurück:
Code:
I'm about to be multiplied with 2
I'm about to be inverted
Someone wants to know my length
I'm about to be killed

Mehr über spezielle Methoden gibt es hier: Special Method Names
 
Zuletzt bearbeitet:

Cyres90

Noch nicht viel geschrieben

AW: Py4D - Anfängerfragen klären

Wie kann ich auf Objekteigenschaften eines, durch ein selbsterstelltes Plugin-basierendes, Objekt zugreifen? Die eigenschaften sind dann schließlich nicht unter dem modul "c4d" vorhanden.
 
Zuletzt bearbeitet:
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

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.613
Beiträge
1.538.344
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben