Container für Daten

Nicht alle Funktionen sind einfach per Zeile ausführbar.
Viele erfordern eine Vorbereitung von Variablen in einem bestimmten Format – in Containern.

Container sind ein wesentlicher Bestandteil der C4D-API (in C.o.f.f.e.e., in C++ und natürlich auch in Py4D).
Ein Container ist eine Sammlung individueller Werte. Jeder Wert hat seine eigene ID und erwartet einen bestimmten Typ.
Container können auch wiederum Container als Werte beinhalten.
90% der internen Werte in C4D werden in Container gespeichert und alle Messages arbeiten mit Container.

Du kannst/solltest eigene Container erstellen in denen Du Werte speicherst.
Das hat zum einen den Vorteil dass sie beim Speichern einer Szene mit Deinem Plugin mitgespeichert werden, zum anderen bietet es eine gewisse Laufsicherheit des Plugins wenn die Werte in einem Container stecken.

Ein einfaches Beispiel für eine Funktion welche einen Container erwartet ist show_popup_menu().
Mit dieser Funktion kann man ein Auswahlmenü in einem Fenster öffnen und den Wert der Auswahl entgegennehmen.

Der Container ist ein Array. (Bzw. ein Array ist ja eigentlich auch ein Container)
Über die Array-ID’s weist man die Werte zu.

Im Fall von show_popup_menu beinhaltet der Container die Titel der Menüpunkte.

Erst wird eine Variable mit dem Datentyp BaseContainer erstellt.
Python kennt diesen Datentyp naürlich nur wenn er durch import von c4d bekannt gemacht wurde.
Nun kann die Variable (ein Array) mit einer Liste von Werten gefüllt werden.
Wenn dann die Funktion aufgerufen wird übergibt man ihr die erforderlichen Parameter.
In unserem Fall eine 2D-Koordinate (x,y) auf dem Bildschirm und den Container mit der Beschreibung des Menüs.

[py]import c4d
from c4d import gui
bc = c4d.BaseContainer()
bc[0]="Titel des Menüs"
bc[2]="Menü-Punkt1"
bc[3]="Menü-Punkt2"
bc[4]="Menü-Punkt3"
result = c4d.gui.show_popup_menu(bc=bc, x=0, y=1)
print result[/py]

Du siehst, der Container ist eine Auflistung von Werten.
Was jeder Wert bedeutet ist von Funktion zu Funktion verschieden.
In diesem Fall steckt z.B. in der ID [0] der nicht anklickbare Titel des Menüs.
In ID[2] bis … folgen die Menünamen.

Container können wie schon beschrieben auch andere Datentypen enthalten.
Das geht vom einfachen Boole-Datentyp (True/False), über Vektoren, Matrizen, Farb, Farbverlaufs Datentypen bis zum Containerdatentyp der wieder der Funktion entsprechend eine individuelle Datenstruktur erwartet.

<– Zurück zu Teil3 . . . . . . . . . . INDEX. . . . . . . . . . Weiter in Teil5 –>

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.