wiki:SerializationNotes

Version 1 (modified by Torben Dannhauer, 12 years ago) (diff)

--


Funktion des ADD_LIST_SERIALIZER(NAME, TYPE):

NAME: Name der public Funktion, unter der der Vector gelesen und geschrieben werden kann TYPE: Typ der Liste. Um es übersichtlich zu halten, muss ein public Typedef durchgeführt werden. dieser kann gemäss c++ syntax mit node::typedef genutzt werden.

Bsp: ADD_LIST_SERIALIZER( ClipPlaneList?, osg::ClipNode::ClipPlaneList? );

Name der Get/Set? Funktionen:

  • getClipPlaneList();
  • setClipPlaneList(..);

Typdefinition des vectors:

zu finden ist dieser Typ gemäß c++ Syntax mit namespace::classname::type (daher muss der typedef public sein, sonst ist er ja von aussen nicht sichtbar)

->zu serialisierendes Element wäre dann im Beispiel: osg::Clipnode::ClipPlaneList?

Wichtig bei enums:

enum <typename> {VA1, VAL2, ...}

variable muss dann anders heißen als der type. Der wrapper NAME muss identisch lauten wie der enum Typ.


osgDB::ReaderWriter?* rw = osgDB::Registry::instance()->getReaderWriterForExtension("osgb"); if ( rw ) {

osgDB::ReaderWriter::WriteResult? wr = rw->writeNode( *scene, ostream );

osgDB::ReaderWriter::ReadResult? rr = rw->readNode( istream ); return rr.takeNode(); Node mit takeNode entgegennehmen.

}


Um die Nodes zu komprimieren, muss osgDB::ReaderWriter?->readNode(..) und osgDB::ReaderWriter?->writeNode(..) die entsprechende Option mitgegeben werden: "compressor=zlib"

Bsp: osgDB::ReaderWriter::WriteResult? wr = rw->writeNode( *scene, ostream, new osgDB::Options("WriteImageHint?=IncludeData? Compressor=zlib") ); osgDB::ReaderWriter::ReadResult? rr = rw->readNode( istream, new osgDB::Options("WriteImageHint?=IncludeData? Compressor=zlib") );