Anzeige
Tutorialbeschreibung

C.O.F.F.E.E. - Einstieg Teil 1

C.O.F.F.E.E. - Einstieg Teil 1

In diesem Tutorial wird erklärt, wie die ersten Schritte mit der Cinema 4D-internen Scriptsprache "C.O.F.F.E.E." gemacht werden :)
Die Cinema 4D-Version spielt dabei keine Rolle (soweit ich weiß, gibt es C.O.F.F.E.E. weitaus länger als z.B. Xpresso).


Hallo und willkommen zu meinem ersten Tutorial hier auf PSD-Tutorials.de.

Dies ist der erste Teil der kleinen Tutorial-Reihe zu der programminternen Scriptsprache C.O.F.F.E.E. von Cinema 4D (Maxon)

In diesem Teil wird gezeigt, wie man:

 - C.O.F.F.E.E.-Scripte anwendet
 - Objekte auffindet (durch den Namen)
 - Auf Objekt-Position zugreift (und sich diese ggf. anzeigen lässt und auf andere Objekte überträgt)


Fangen wir einfach mal an:

Startet Cinema 4D und erstellt ein „Null-Objekt“.

Bilder

Markiert anschließend das „Null-Objekt“ und fügt einen „C.O.F.F.E.E.-Tag“ hinzu.

Bilder


Prompt öffnet sich auch schon der „Expressions-Editor“ mit der bereits vorgegebenen main() -Funktion und den Parametern doc und op, wobei doc einfach für das gesamte DOCument steht und op für den OPerator (das ist das Objekt, welches den C.O.F.F.E.E.-Tag trägt; hier das Null-Objekt).

Bilder

Beginnen wir einfach einmal mit der einfachen Textausgabe :)
Schreibt zwischen die geschweiften Klammern ( {…} ) den „Befehl“

println  (" Und hier der Text “ ) ;

(Das Semikolon nicht vergessen! ( ; ) um die Zeile zu beenden, den eigentlichen Text setzt man in Anführungsstriche ( " " )). Print steht wie bei C++ (glaub'''' ich) für die einfache Textausgabe, LN hingegen für „LiNe“ (Zeile). Mit einem Klick auf „Kompilieren“ wird überprüft, ob sich Fehler eingeschlichen haben, und mit „Ausführen“ wird das Script (wie der Name schon sagt) ausgeführt.

Nur es passiert nichts, warum?

-> Es passiert schon etwas, nur sehen wir es nicht :)

Öffnet noch die Konsole!

Bilder

Der Text „Und hier der Text“ steht in der Konsole! (Evtl. auch noch andere Dinge wie geladene C.O.F.F.E.E.-Plugins; die kann man durch "Löschen" entfernen). Natürlich sind auch hier einfache Rechenaufgaben mit Text möglich:

println ("Das Ergebnis von 9 * 2 ist = “ , 9 * 2);

Wobei Text generell in Anführungszeichen gesetzt wird ( " " ) und die Operatoren durch ein Komma getrennt sind ( , )
Um die Zeile abzuschließen (zu beenden), wieder ein " ; " setzen.

Bilder

Jetzt das Null-Objekt:
Deklarieren wir einfach mal eine Variable und speichern darin die Position des Null-Objektes:

var position=op->GetPosition();

var“ steht für „VAR“iable mit dem Namen (hier) position (achtet auf Groß- und Kleinschreibung), 

op übergibt den Operator, also hier das „Null-Objekt“, (man könnte auch statt op den Parameter „doc“ eintragen, aber dann würde das Objekt nicht gefunden werden; das wird später besprochen :) )

Bilder

(Eine alternative Schreibweise ist auch angegeben!)

Den Befehl „->GetPosition()“ muss ich glaube ich nicht erklären, oder?

Wenn Ihr jetzt schreibt:

println(position);

wird in der Konsole die aktuelle Position des Null-Objekts angezeigt:

([0.000000,0.000000,0.000000])

Bilder

Verschiebt einfach mal das Null-Objekt auf irgendeiner Achse (oder frei).  Natürlich, wenn die Konsole noch geöffnet ist:

Bilder

Jetzt wollen wir diese Positionen (vom Null-Objekt) auf ein anderes übertragen! Fügt dazu IRGENDEIN anderes Objekt hinzu (Würfel, Array, Pivot-Objekt; vollkommen egal!). Ich nehme einen Würfel: (nicht durcheinanderkommen, meine Version ist absichtlich auf Englisch!)

Bilder

Im C.O.F.F.E.E.-Tag muss dieser Würfel erst einmal gefunden werden, befindet er sich im „op“ ?

NEIN, er ist im DOCument :)

D.h. wir müssen diesen in einer Var speichern und dort auch vorher noch finden:

Schreibt also:

var cube=doc->

(Warum „cube“? -> ist kürzer ;)  )

Um Objekte zu „finden“, gibt es mehrere Befehle:

->GetPrev();

->GetNext();

->GetUp();

->GetDown();

(Nachteil: Hierarchische „Finder“ -  sobald Objekte hierarchisch verschoben werden, ist das „gesuchte“ vielleicht durch ein falsches ersetzt worden).

Der einfachste aber ist:

->FindObject(„Name des Objekts“);

(Nachteil: Namens“Finder“ - Namen sollte man nicht ändern! → Hierarchie spielt keine Rolle!)

Wir benutzen den Befehl „FindObject“ (Object mit „C“, nicht mit „K“!). Die anderen Befehle erkläre ich vielleicht im 2.Teil der „Tutorial-Reihe“.

Weiter geht’s:
Schreibt also in den Expressions-Editor hinzu:

var cube=doc->FindObject(“Würfel“);

Somit wird der „Würfel“ nach seinem Namen gesucht und in „cube“ gespeichert (wenn der Name gefunden wird).
Am einfachsten können wir die „position“ an „cube“ übergeben, indem wir mit dem Gegenteil von „GetPosition“ arbeiten: „SetPosition“.
Schreibt also:

cube->SetPosition();

Jetzt weiß Cinema natürlich nicht “Welche Position denn?“ Also müssen wir diese gleich als Parameter mit übergeben:

cube->SetPosition(position);

(also vom Würfel!)

Kompiliert das Script und lasst es ausführen.

Wenn keine Fehler entstanden sind, verschiebt sich das Null-Objekt! (Sollte der Fehler auftreten: Incompatible Values.... NIL / OBJECT, dann habt Ihr den Namen des Objekts falsch/anders geschrieben).

Es sollten die Positionen des Null-Objekts in der Konsole angezeigt werden und gleichzeitig der Würfel dem Null-Objekt folgen! Hier nochmal der komplette Code:

main(doc,op)

{

var position=op->GetPosition();
println(position);

var cube=doc->FindObject("Würfel");
cube->SetPosition(position);

}

Bilder

Das war''''s erstmal mit dem ersten Teil dieser Reihe, in den folgenden Tutorien folgt dann:

 - Einfache Berechnungen
 - If-Anweisungen (Wenn Objekt Position X größer als... usw.)
 - Umgang mit Matrizen (besser bekannt als Matrix (Global/Lokal))
 - Interaktion mit dem Layout von Cinema 4D (eine etwas unglückliche Ausdrucksweise, wird lustig ;) )

mfg errare
Für Fragen, Anregungen und Sonstiges -> Forum ;)
Oder mich, oder was auch immer...


DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von Lala_Ghost
  • 20.09.2013 - 16:04

Super! Danke, ich muss die Basics auch mal lernen! :)

Portrait von immey
  • 15.12.2010 - 20:59

Oh ja vielen dank.
Mist wie konnte ich das übersehen...
naja, vielen dank das du so schnell geantwortet hast!

Portrait von immey
  • 13.12.2010 - 21:01

bei mir kommt der error:
"syntax error [ expected: ';',found: '' ]
Line: 8 Position: 5

Mein Code ist:
----------------
main(doc,op)
{


var position=op->GetPosition();
println (position);
var cube=doc->FindObject("Cube")
cube->SetPosition(position);
}
----------------

Ich bitte um HIlfe!!!

Portrait von errare
  • 13.12.2010 - 21:27

syntax error [ expected: ';',found: '' ].<br>
Steht im Fehler-Code.<br>
expectet (Erwartet) " ; " found (Gefunden) "" -> Nichts!<br>
Du hast ; Vergessen ;)<br>
Am ende der Zeile 8 (FindObject(...)) ;

Portrait von Locaridca
  • 26.11.2010 - 17:28

Geil, wirklich gut gemacht, habe alles soweit verstanden. Danke !

Portrait von nux95
  • 24.10.2010 - 20:15

Gut beschrieben, übersichtlich und perfekt für Einsteiger :daumenhoch:

Portrait von lurks
  • 11.05.2010 - 11:27

Jetzt muss ich nur mal die Zeit finden damit was zu machen

Portrait von RealProNoob
  • 28.03.2010 - 23:49

bin gespannt, was die anderen Teile bringen
bei dem Teil finde ich nichts, was besonders ist. Objekte verschieben und rechnen kann man ja auch so ^^

Portrait von yu_nishang
  • 23.01.2010 - 10:38

Zunächst einmal danke Ihnen zu teilen! Folgte ihm und freue mich auf weitere und spannende Tutorial!

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 20.01.2010 - 17:18

Ist ja nicht weiter schlimm^^ Aber auf die nächsten Teile freue ich mich wirklich :-) Vorallem das einbinden in das Layout.

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 20.01.2010 - 16:06

du schreibst:
" Jetzt weiß Cinema natürlich nicht &#8220;Welche Position denn?&#8220; Also müssen wir diese gleich als Parameter mit übergeben:

cube->SetPosition(cube);

(also von cube!)"

aber müsste es denn nicht "cube->SetPosition(position);" heißen?
Am Ende, als du den Code zusammengefasst hast hast du das ja sogar geschrieben ;-)
Aber egal, bis auf das ein sehr verständlicher Tutorial! Ich suche schon lange nach Grundlagentutorials und hab gerade einen gefunden. Ich würde mich auf jeden Fall auf einen zweiten Teil freuen!!!

Portrait von errare
  • 20.01.2010 - 16:21

verdammt -.- stimmt, - habs aber schon geändert...
Teil 2 wartet auf Freischaltung und Teil 3 ist zu 70Prozent fertig.

Portrait von bassist
  • 20.01.2010 - 19:47

naja, scharf drauf das zu kaufen bin ich jz nicht gerade. Ich such mal im Internet nach einer Doku, die muss es ja iwo auch so geben.

Portrait von bassist
  • 20.01.2010 - 15:27

erster :). Wusste garnicht dass es sowas in C4D gibt. Muss ich daheim direkt mal ausprobieren. Gibt es iwo eine Doku zu C.O.F.F.E.E?

Portrait von errare
  • 20.01.2010 - 16:05

Ja es gibt eine "Doku" :) schau mal in meine Signatur<br>
(habs nicht gelesen, kann daher nicht sagen ob es gut ist) ;)

x
×
×