Demoscene szempontból a legfontosabb bővítmény típus szerintem az export plugin. Ennek segítségével ültethetjük át munkánkat a demóba. A bővítmény regisztrálását a RegisterSceneSaverPlugin() függvény végzi. A negyedik paraméterrel kell átadni a SceneSaverData osztály egy leszármazottját.
A dokumentáció csak a Save() virtuális tagfüggvényt említi, de kell egy statikus gyártó metódus is konstruktor helyett. Ez a megoldás egyébként általános a Cinema4D-ben.
A Save() függvény egyik paramétere a mentés során megadott fájlnév, míg a BaseDocument osztályon keresztül az összes grafikus objektumot elérhetjük. Gyakorlatilag ez a Cinema 4D felhasználói felületén a jobb oldalon található fa struktúra. Az alábbi kód az egyszerűség kedvéért csak a legfelső szint objektumait járja végig:
BaseObject *obj = doc->GetFirstObject();
do{
switch(obj->GetType()){
case Opolygon:
break;
case Ocamera:
break;
}
}while(obj = obj->GetNext());
Az adatokat a BaseFile osztályon keresztül írhatjuk ki. A következő kódrészlet ezt demonstrálja:
BaseFile *file = BaseFile::AutoAlloc();
Filename *filename = new Filename("test.out");
file->Open(filename, FILEOPEN_WRITE, FILEDIALOG_ANY, BYTEORDER_INTEL, 0, 0);
file->WriteString("Data");
file->Close();
Gyakorlatilag az összes adattípushoz van egy metódus. Ha szöveges állományokat akarunk készíteni, akkor meglepődve tapasztalhatjuk, hogy bináris adatok is kiírásra kerülnek. Fórumokat bújva azt a megoldást találtam, hogy karakterenként kell kiírni a sztringet. Nevetséges, de tényleg ez tűnik az egyetlen járható útnak.
Fontos lehet hibakereső üzeneteket hagyni. A Cinema4D rendelkezik egy saját konzollal, ahová a bővítmények is írhatnak. Az ablak a Script -> Console menüponttal kapcsolható be. A kódban a GePrint() segítségével tudunk írni rá.
Sajnos a fejlesztés egyik hátulütője, hogy nem tudjuk közvetlenül tesztelni a megírt kódot. Lefordítjuk, elindítjuk a Cinema4D-t, lefagyasztjuk az egészet a bővítményünkkel, majd visszatérünk a Visual Studioba és átírunk valamit. Ez egy elég időigényes procedúra, különösen a tanulási fázisban, amikor még a metódusok útvesztőjében is keresgélni kell. Célszerű ezért - ahogy a dokumentáció is javasolja - defenzíven programozni és a paraméterekhez grafikus felületet fejleszteni, ahol futás időben láthatjuk a hatásaikat. A következő részben erről fogunk beszélni.