Oddly enough, "osgt" also gives me the binary format, even when serializing
objects from the core library, e.g.:

osg::ref_ptr<osg::Node> test = new osg::Node;
std::ostringstream sstream;
osgDB::ReaderWriter::WriteResult wr
= 
osgDB::Registry::instance()->getReaderWriterForExtension("osgt")->writeObject(*test,
sstream, 0);
std::cout << sstream.str() << std::endl;

Results in output:

í♫ælEE¹→♥   _       ☺   0          osg::Node☺       ☻         ☺

However, e.g.:

osg::ref_ptr<osg::Node> test = new osg::Node;
std::ostringstream sstream;
osgDB::ReaderWriter::WriteResult wr
= 
osgDB::Registry::instance()->getReaderWriterForExtension("osg")->writeObject(*test,
sstream, 0);
std::cout << sstream.str() << std::endl;

Results in output:

Node {
  nodeMask 0xffffffff
  cullingActive TRUE
}

Which is what I want, but for my custom object. With that, I get equivalent
results in the first case and nothing in the second.

(I am using OpenSceneGraph 3.1.4, if that matters.)

Cheers,
Peter

On Sun, Mar 17, 2013 at 11:12 PM, Robert Osfield
<[email protected]>wrote:

> Try using the .osgt extension rather than .osg.
> On 17 Mar 2013 20:45, "peter klosowski" <[email protected]> wrote:
>
>> Hi,
>>
>> I have created a new class derived from osg::Object. I would like to add
>> the ability to serialize the class to the human readable "osg" format.
>> Currently, serialization only works for "osgb".
>>
>> Here is a simplified version of my code:
>>
>> // In "MyObject", I have:
>>
>> namespace osgMyLibrary {
>>
>> class MyObject: public osg::Object
>> {
>> public:
>> MyObject(): _symbol("") {}
>> MyObject(MyObject const& other, osg::CopyOp const& =
>> osg::CopyOp::SHALLOW_COPY): _symbol(other._symbol) {}
>>
>> std::string const& getSymbol() const { return _symbol; }
>> void setSymbol(std::string const& symbol) { _symbol = symbol; }
>>
>> META_Object(osgMyLibrary, MyObject);
>>
>> protected:
>> // Use reference counting.
>>  virtual ~MyObject();
>>
>> private:
>> std::string _symbol;
>> };
>>
>> }
>>
>> // In "MyObject.cpp", I have:
>>
>> REGISTER_OBJECT_WRAPPER(MyObject,
>> new osgMyLibrary::MyObject, osgMyLibrary::MyObject,
>> "osg::Object osgMyLibrary::MyObject")
>> {
>> ADD_STRING_SERIALIZER(Symbol, "#1");
>> }
>>
>> // In "main.cpp", I have:
>>
>> osg::ref_ptr<osgMyLibrary::MyObject> test = new osgMyLibrary::MyObject();
>> std::ostringstream sstream;
>> osgDB::ReaderWriter::WriteResult wr
>> = 
>> osgDB::Registry::instance()->getReaderWriterForExtension("osg")->writeObject(*test,
>> sstream, 0);
>> std::cout << sstream.str() << std::endl;
>>
>> However, nothing is written to the console. If I change the extension to
>> "osgb", I can see the object, but it is obviously using the binary format.
>> What do I need to change in order to get human readable serialization?
>>
>> Cheers,
>> Peter
>>
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to