Cinema 4D (CE6) und die Skriptsprache Coffee für Plug-ins !
Übersicht Ressourcen Andere Programme oder Tools
Markus2Betreff: Cinema 4D (CE6) und die Skriptsprache Coffee für Plug-ins ! |
So, Aug 22, 2004 21:00 Antworten mit Zitat |
|
---|---|---|
Erste Schritte in C.o.f.f.e.e.
Was ihr braucht ist erstmal die SoftwareEntwicklerKit Hilfedatei COFFEESDK6302.chm bekommt ihr hier http://www.plugincafe.com/sdk_downloads.asp Dieses Beispiel kopiert ihr einfach in das Plugins Verzeichnis von C4D . Es wird ein Menü erstellt was ihr unter Plug-ins wieder findet . Wenn ihr es startet kommt ein Dialog mit 3 Textboxen und zwei Buttons . Der erste Button bewegt das Active Objekt . Der zweite Button ruft eine Speichern unter Dialog Box auf und gibt den Dateinamen zurück . Coffee ist eine sehr mächtige Sprache und damit könnt ihr so alles mögliche in Cinema zaubern . Bestes Beispiel ist der Exporter von BigBug 8) Code: [AUSKLAPPEN] // Test.cof // Beispiel von M.Rauch // In Cinema 4D (CE6) unter Menü/Fenster/Console öffnen // Dann in Console Plug-ins erneut laden // Plug-in ausführen // Achtung , diese Coffee scheiße achtet auf Groß/kleinschreibung // also nicht in dem BlitzBasic oder sonnstige Editoren öffnen die // dan Anfangsbuchstaben groß schreiben ! *GRRR* // Und an die bekloppten Semikolons denken ! // sollte eine unique ID sein , bekommt man bei www.plugincafe.com var PLUGIN_ID = 910003; // Meine Dialog Klasse var mydoc; var vec; class MyDialog : GeModalDialog { public: MyDialog(); CreateLayout(); Init(); Command(id,msg); ObjektBewegen(doc); SpeichernAls(doc); } MyDialog::MyDialog() { super(); } MyDialog::CreateLayout() { //Hier werden die Knöppe und Textboxen erzeugt SetTitle("Mein erster Dialog in C4D"); AddStaticText(3000,BFH_FIT,0,0,"Position",BORDER_THIN_IN); AddGroupBeginV(10000,0, 2, "Position", 0); AddGroupSpace(4, 4); AddGroupBorderSpace(4, 4, 4, 4); AddStaticText(3001,BFH_FIT,50,0,"X",BORDER_THIN_IN); AddEditNumber(4001,BFH_FIT,100,0); AddStaticText(3002,BFH_FIT,50,0,"Y",BORDER_THIN_IN); AddEditNumber(4002,BFH_FIT,100,0); AddStaticText(3003,BFH_FIT,50,0,"Z",BORDER_THIN_IN); AddEditNumber(4003,BFH_FIT,100,0); AddGroupEnd(); AddButton(5001, BFH_FIT,0,0,"Bewegen"); AddButton(5002, BFH_FIT,0,0,"Speichern als ..."); AddDlgGroup(DR_DLGGROUP_OK|DR_DLGGROUP_CANCEL); return TRUE; } MyDialog::Init() { SetFloat(4001,vec.x,-10000,10000,1); SetFloat(4002,vec.y,-10000,10000,1); SetFloat(4003,vec.z,-10000,10000,1); } MyDialog::Command(id,msg) { println("id=",id); // Das sind hier Ereignisse wie z.B. wenn der Benutzer den Text ändert switch (id) { case 4001: vec.x=GetFloat(id);break; case 4002: vec.y=GetFloat(id);break; case 4003: vec.z=GetFloat(id);break; case 5001: ObjektBewegen(mydoc);break; case 5002: SpeichernAls(mydoc);break; } } // register plugin in menu class MyMenuPlugin : MenuPlugin { public: MyMenuPlugin(); GetID(); GetName(); GetHelp(); Execute(doc); } MyMenuPlugin::MyMenuPlugin() { super(); } MyMenuPlugin::GetID() { return PLUGIN_ID; } MyMenuPlugin::GetName() { return "Test Menü"; } MyMenuPlugin::GetHelp() { return "Mal gucken was passiert"; } MyMenuPlugin::Execute(doc) { mydoc=doc; vec =vector(0,0,0); var d = new(MyDialog); d->Open(-1,-1); var ok; ok=d->GetResult(); println("Dialog ok=",ok); if (ok) { println("OK"); } else { println("Abbruch"); } //Dialog OK? } MyDialog::ObjektBewegen(doc) { var o ; var v ; o=GetActiveObject(doc); if (o) { println("Objekt Name = ",o->GetName()); v=o->GetPosition(); println("Pos X = ",v.x); println("Pos Y = ",v.y); println("Pos Z = ",v.z); o->SetPosition(vec); println("Neue Position"); println("Pos X = ",vec.x); println("Pos Y = ",vec.y); println("Pos Z = ",vec.z); StopAllThreads(); // VERY IMPORTANT!!! DrawViews(DA_ONLY_ACTIVE|DA_NO_THREAD|DA_NO_ANIMATION|DA_ONLY_ACTIVE_VIEW); } else { println("erstmal nen Objekt auswählen !?"); } } MyDialog::SpeichernAls(doc) { var filename = GeGetStartupPath(); filename->SetLastString("Hallo"); filename->SetSuffix("a3d"); var ok; ok=filename->FileSelect("Datei speichern unter ...", TRUE); println("ok=",ok); if (ok) { println("filename=",filename->GetFullString()); } else { println("Abbruch"); } //Speichern OK? } main() { Register(MyMenuPlugin); } |
||
2paul |
Di, Aug 24, 2004 12:57 Antworten mit Zitat |
|
---|---|---|
echt wahhhh ???
das hätt ich nicht gedacht, dass man damit exporter schreiben kann, hatte mich auch mal bei meiner schatten-frage mit coffee beschäftigt, und da war sehr häufig zu lesen, dass dieses expresso viel mächtiger is, da hab ich die recherche aufgegeben... thx for info |
||
Markus2 |
Di, Aug 24, 2004 20:04 Antworten mit Zitat |
|
---|---|---|
@2paul
Ein direktes Format geht wohl nicht . BigBug hatte sich damit eine ASCII Datei erzeugt die er eingelesen und in MD2 dann wieder gespeichert hat . Mit Coffee kann man z.B. das Problem bei dem Textureübergang am Cylinder lösen in dem man sich selbst den Cylinder macht wo die Punkte am Anfang und Ende nicht doppelt benutzt werden . |
||
BIG BUG |
Mi, Aug 25, 2004 0:27 Antworten mit Zitat |
|
---|---|---|
Ich denke der Export wäre auch gleich direkt in MD2 möglich gewesen, allerdings sind die Datentypen in Coffee ein bisschen anders als in BB. Da man zukünftig aber mehrere Sequenzen zusammenfassen können soll ist das mit Zwischenschritt einfacher und flexibler. Außerdem müssen ja noch die Vertexnormalen berechnet werden...
Das Ganze ist aber teilweise auch ein zweischneidiges Schwert. Ich habe mich damit schon so viel rumgeärgert, dass sich mein Haaransatz bestimmt einen halben Zentimeter weiter nach hinten bewegt hat. Manches habe ich einfach nicht hingekriegt z.B. den Render-Status eines Objektes abzufragen. Außerdem ist es z.B. nicht möglich bestehende Exportroutinen wie 3DS aufzurufen. Dennoch hat man viele Möglichkeiten und wer C4D viel nutzt sollte ruhig mal einen Blick riskieren. Der Compiler wird übrigens als Beispielplugin im SDK mitgeliefert. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Übersicht Ressourcen Andere Programme oder Tools
Powered by phpBB © 2001 - 2006, phpBB Group