Hi,

as previously mentioned there are some issues when using serialisation with 
XML. Here is a small code snippet:

Code:

#define USE_BRACKETS 1
#define USE_USER_SERIALIZER 1

namespace TestOSG
{
        class TestStruct : public osg::Object
        {
        public:
                TestStruct(void)
                {
                }
                TestStruct(TestStruct const& test, osg::CopyOp const& 
copyOperator=osg::CopyOp::SHALLOW_COPY)
                                                        
:osg::Object(test,copyOperator),
                                                         m_From(test.m_From), 
m_Till(test.m_Till)
                {
                }
                
                META_Object(TestOSG,TestStruct);
                
                osg::Vec3 m_From;
                osg::Vec3 m_Till;
                
                osg::Vec3 const& getFrom(void) const {return m_From;}
                osg::Vec3 const& getTill(void) const {return m_Till;}
                
                void setFrom(osg::Vec3 const& from) {m_From = from;}
                void setTill(osg::Vec3 const& till) {m_Till = till;}
        };
}

namespace
{
        bool checkTestSerialization(TestOSG::TestStruct const&)
        {
                return true;
        }

        bool readTestSerialization(osgDB::InputStream& inputStream, 
TestOSG::TestStruct& testData)
        {
                inputStream >> inputStream.BEGIN_BRACKET;
                inputStream >> inputStream.PROPERTY("From") >> testData.m_From;
                inputStream >> inputStream.PROPERTY("Till") >> testData.m_Till;
                inputStream >> inputStream.END_BRACKET;
                return true;
        }
        
        bool writeTestSerialization(osgDB::OutputStream& outputStream, 
TestOSG::TestStruct const& testData)
        {
#if (USE_BRACKETS)
                outputStream << outputStream.BEGIN_BRACKET << std::endl;
#endif
                outputStream << outputStream.PROPERTY("From") << 
testData.m_From << std::endl;
                outputStream << outputStream.PROPERTY("Till") << 
testData.m_Till << std::endl;
#if (USE_BRACKETS)
                outputStream << outputStream.END_BRACKET << std::endl;
#endif
                return true;
        }
}

#if (USE_USER_SERIALIZER)
REGISTER_OBJECT_WRAPPER(TestStruct,
                                                                                
                new TestOSG::TestStruct,
                                                                                
                TestOSG::TestStruct,
                                                                                
                "osg::Object TestOSG::TestStruct")
{
        ADD_USER_SERIALIZER(TestSerialization);
}
#else
REGISTER_OBJECT_WRAPPER(TestStruct,
                                                                                
                new TestOSG::TestStruct,
                                                                                
                TestOSG::TestStruct,
                                                                                
                "osg::Object TestOSG::TestStruct")
{
        ADD_VEC3_SERIALIZER(From,osg::Vec3(1,0,0));
        ADD_VEC3_SERIALIZER(Till,osg::Vec3(1,0,0));
}
#endif

extern "C" void wrapper_serializer_library_TestOSG(void)
{
}

USE_SERIALIZER_WRAPPER(TestStruct)




The output depends on the flags.

USE_BRACKETS == 1
USE_USER_SERIALIZER == 0 (OK):

< ?xml version="1.0" encoding="UTF-8" ?>
< TestOSG::TestStruct>
  < UniqueID attribute="1&nl;">
    < From attribute="0 0 0" />
    < Till attribute="0 0 0&nl;&nl;" />
  < /UniqueID>
< /TestOSG::TestStruct>

USE_BRACKETS == 1
USE_USER_SERIALIZER == 1 (wrong):

< ?xml version="1.0" encoding="UTF-8" ?>
< TestOSG::TestStruct>
  < UniqueID attribute="1&nl;">
    < TestSerialization attribute="&nl;">
      < From attribute="0 0 0&nl;">
        < Till attribute="0 0 0&nl;&nl;&nl;" />
      < /From>
    < /TestSerialization>
  < /UniqueID>
< /TestOSG::TestStruct>


USE_BRACKETS == 0
USE_USER_SERIALIZER == 1 (wrong):

< ?xml version="1.0" encoding="UTF-8" ?>
< TestOSG::TestStruct>
  < UniqueID attribute="1&nl;">
    < TestSerialization />
    < From attribute="0 0 0" />
    < Till attribute="0 0 0&nl;&nl;" />
  < /UniqueID>
< /TestOSG::TestStruct>

PS: I have added the space between "<" and the following xml text because 
otherwise the output does not show up.

Cheers,
Hartwig[/quote]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=72761#72761





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to