Cinema 4D (CE6) und die Skriptsprache Coffee für Plug-ins !

Übersicht Ressourcen Andere Programme oder Tools

Neue Antwort erstellen

Markus2

Betreff: Cinema 4D (CE6) und die Skriptsprache Coffee für Plug-ins !

BeitragSo, Aug 22, 2004 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Erste Schritte in C.o.f.f.e.e. Smile
Was ihr braucht ist erstmal die SoftwareEntwicklerKit Hilfedatei
COFFEESDK6302.chm
bekommt ihr hier
Arrow 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

BeitragDi, Aug 24, 2004 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 24, 2004 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMi, Aug 25, 2004 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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)

Neue Antwort erstellen


Übersicht Ressourcen Andere Programme oder Tools

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group