[osg-users] XML serialisation issues / examples

Robert Osfield robert.osfield at gmail.com
Tue Jan 16 01:55:19 PST 2018


Hi Hartwig,

I'm really busy right now so can't look into it.  Hopefully I'll be
able to look into later this week.

What versions of the OSG have you tried?  Do the ascii and binary
serializers work OK?

Robert.

On 15 January 2018 at 23:54, Hartwig Wiesmann
<hartwig.wiesmann at skywind.eu> wrote:
> 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
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


More information about the osg-users mailing list