root/OpenSceneGraph/trunk/src/osgWrappers/serializers/osgText/TextBase.cpp @ 13041

Revision 13041, 7.5 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
Line 
1#include <osgText/TextBase>
2#include <osgDB/ObjectWrapper>
3#include <osgDB/InputStream>
4#include <osgDB/OutputStream>
5
6// _font
7static bool checkFont( const osgText::TextBase& text )
8{
9    return text.getFont()!=NULL;
10}
11
12static bool readFont( osgDB::InputStream& is, osgText::TextBase& text )
13{
14    std::string fontName; is.readWrappedString( fontName );
15    text.setFont( osgText::readFontFile(fontName) );
16    return true;
17}
18
19static bool writeFont( osgDB::OutputStream& os, const osgText::TextBase& text )
20{
21    os.writeWrappedString( text.getFont()->getFileName() );
22    os << std::endl;
23    return true;
24}
25
26// _fontSize
27static bool checkFontSize( const osgText::TextBase& text )
28{
29    return true;
30}
31
32static bool readFontSize( osgDB::InputStream& is, osgText::TextBase& text )
33{
34    unsigned int width, height; is >> width >> height;
35    text.setFontResolution( width, height );
36    return true;
37}
38
39static bool writeFontSize( osgDB::OutputStream& os, const osgText::TextBase& text )
40{
41    os << text.getFontWidth() << text.getFontHeight() << std::endl;
42    return true;
43}
44
45// _characterHeight, _characterAspectRatio
46static bool checkCharacterSize( const osgText::TextBase& text )
47{
48    return true;
49}
50
51static bool readCharacterSize( osgDB::InputStream& is, osgText::TextBase& text )
52{
53    float height, aspectRatio; is >> height >> aspectRatio;
54    text.setCharacterSize( height, aspectRatio );
55    return true;
56}
57
58static bool writeCharacterSize( osgDB::OutputStream& os, const osgText::TextBase& text )
59{
60    os << text.getCharacterHeight() << text.getCharacterAspectRatio() << std::endl;
61    return true;
62}
63
64// _text
65static bool checkText( const osgText::TextBase& text )
66{
67    return text.getText().size()>0;
68}
69
70static bool readText( osgDB::InputStream& is, osgText::TextBase& text )
71{
72    bool isACString; is >> isACString;
73    if ( isACString )
74    {
75        std::string acString; is.readWrappedString( acString );
76        text.setText( acString );
77    }
78    else
79    {
80        osg::UIntArray* array = dynamic_cast<osg::UIntArray*>( is.readArray() );
81        if ( array )
82        {
83            osgText::String string;
84            for ( osg::UIntArray::iterator itr=array->begin(); itr!=array->end(); ++itr )
85            {
86                string.push_back( *itr );
87            }
88            text.setText( string );
89        }
90    }
91    return true;
92}
93
94static bool writeText( osgDB::OutputStream& os, const osgText::TextBase& text )
95{
96    bool isACString = true;
97    const osgText::String& string = text.getText();
98    for ( osgText::String::const_iterator itr=string.begin(); itr!=string.end(); ++itr )
99    {
100        if ( *itr==0 || *itr>256 )
101        {
102            isACString = false;
103            break;
104        }
105    }
106
107    os << isACString;
108    if ( isACString )
109    {
110        std::string acString;
111        for ( osgText::String::const_iterator itr=string.begin(); itr!=string.end(); ++itr )
112        {
113            acString += (char)(*itr);
114        }
115        os.writeWrappedString( acString );
116        os << std::endl;
117    }
118    else
119    {
120        osg::ref_ptr<osg::UIntArray> array = new osg::UIntArray( string.begin(), string.end() );
121        os << array.get();
122    }
123    return true;
124}
125
126// _drawMode
127static bool checkDrawMode( const osgText::TextBase& text )
128{
129    return text.getDrawMode()!=osgText::TextBase::TEXT;
130}
131
132static bool readDrawMode( osgDB::InputStream& is, osgText::TextBase& text )
133{
134    unsigned int mask = osgText::TextBase::TEXT;
135    if ( is.isBinary() )
136        is >> mask;
137    else
138    {
139        std::string maskSetString; is >> maskSetString;
140        osgDB::StringList maskList; osgDB::split( maskSetString, maskList, '|' );
141        for ( unsigned int i=0; i<maskList.size(); ++i )
142        {
143            const std::string& maskValue = maskList[i];
144            if ( maskValue=="TEXT" ) mask |= osgText::TextBase::TEXT;
145            else if ( maskValue=="BOUND" ) mask |= osgText::TextBase::BOUNDINGBOX;
146            else if ( maskValue=="FILLED" ) mask |= osgText::TextBase::FILLEDBOUNDINGBOX;
147            else if ( maskValue=="ALIGNMENT" ) mask |= osgText::TextBase::ALIGNMENT;
148        }
149    }
150    text.setDrawMode( mask );
151    return true;
152}
153
154static bool writeDrawMode( osgDB::OutputStream& os, const osgText::TextBase& text )
155{
156    unsigned int mask = text.getDrawMode();
157    if ( os.isBinary() )
158        os << mask;
159    else
160    {
161        std::string maskString;
162        if ( mask==osgText::TextBase::TEXT ) maskString += std::string("TEXT|");
163        if ( mask==osgText::TextBase::BOUNDINGBOX ) maskString += std::string("BOUND|");
164        if ( mask==osgText::TextBase::FILLEDBOUNDINGBOX ) maskString += std::string("FILLED|");
165        if ( mask==osgText::TextBase::ALIGNMENT ) maskString += std::string("ALIGNMENT|");
166        if ( !maskString.size() ) maskString = std::string("NONE|");
167        os << maskString.substr(0, maskString.size()-1) << std::endl;
168    }
169    return true;
170}
171
172REGISTER_OBJECT_WRAPPER( osgText_TextBase,
173                         /*new osgText::TextBase*/NULL,
174                         osgText::TextBase,
175                         "osg::Object osg::Drawable osgText::TextBase" )
176{
177    ADD_USER_SERIALIZER( Font );  // _font
178    ADD_USER_SERIALIZER( FontSize );  // _fontSize
179    ADD_USER_SERIALIZER( CharacterSize );  // _characterHeight, _characterAspectRatio
180
181    BEGIN_ENUM_SERIALIZER( CharacterSizeMode, OBJECT_COORDS );
182        ADD_ENUM_VALUE( OBJECT_COORDS );
183        ADD_ENUM_VALUE( SCREEN_COORDS );
184        ADD_ENUM_VALUE( OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT );
185    END_ENUM_SERIALIZER();  // _characterSizeMode
186
187    ADD_FLOAT_SERIALIZER( MaximumWidth, 0.0f );  // _maximumWidth
188    ADD_FLOAT_SERIALIZER( MaximumHeight, 0.0f );  // _maximumHeight
189    ADD_FLOAT_SERIALIZER( LineSpacing, 0.0f );  // _lineSpacing
190    ADD_USER_SERIALIZER( Text );  // _text
191    ADD_VEC3_SERIALIZER( Position, osg::Vec3() );  // _position
192
193    BEGIN_ENUM_SERIALIZER2( Alignment, osgText::TextBase::AlignmentType, LEFT_BASE_LINE );
194        ADD_ENUM_VALUE( LEFT_TOP );
195        ADD_ENUM_VALUE( LEFT_CENTER );
196        ADD_ENUM_VALUE( LEFT_BOTTOM );
197        ADD_ENUM_VALUE( CENTER_TOP );
198        ADD_ENUM_VALUE( CENTER_CENTER );
199        ADD_ENUM_VALUE( CENTER_BOTTOM );
200        ADD_ENUM_VALUE( RIGHT_TOP );
201        ADD_ENUM_VALUE( RIGHT_CENTER );
202        ADD_ENUM_VALUE( RIGHT_BOTTOM );
203        ADD_ENUM_VALUE( LEFT_BASE_LINE );
204        ADD_ENUM_VALUE( CENTER_BASE_LINE );
205        ADD_ENUM_VALUE( RIGHT_BASE_LINE );
206        ADD_ENUM_VALUE( LEFT_BOTTOM_BASE_LINE );
207        ADD_ENUM_VALUE( CENTER_BOTTOM_BASE_LINE );
208        ADD_ENUM_VALUE( RIGHT_BOTTOM_BASE_LINE );
209    END_ENUM_SERIALIZER();  // _alignment
210
211    BEGIN_ENUM_SERIALIZER( AxisAlignment, XY_PLANE );
212        ADD_ENUM_VALUE( XY_PLANE );
213        ADD_ENUM_VALUE( REVERSED_XY_PLANE );
214        ADD_ENUM_VALUE( XZ_PLANE );
215        ADD_ENUM_VALUE( REVERSED_XZ_PLANE );
216        ADD_ENUM_VALUE( YZ_PLANE );
217        ADD_ENUM_VALUE( REVERSED_YZ_PLANE );
218        ADD_ENUM_VALUE( SCREEN );
219        ADD_ENUM_VALUE( USER_DEFINED_ROTATION );
220    END_ENUM_SERIALIZER();  // _axisAlignment
221
222    ADD_QUAT_SERIALIZER( Rotation, osg::Quat() );  // _rotation
223    ADD_BOOL_SERIALIZER( AutoRotateToScreen, false );  // _autoRotateToScreen
224
225    BEGIN_ENUM_SERIALIZER( Layout, LEFT_TO_RIGHT );
226        ADD_ENUM_VALUE( LEFT_TO_RIGHT );
227        ADD_ENUM_VALUE( RIGHT_TO_LEFT );
228        ADD_ENUM_VALUE( VERTICAL );
229    END_ENUM_SERIALIZER();  // _layout
230
231    ADD_USER_SERIALIZER( DrawMode );  // _drawMode
232    ADD_FLOAT_SERIALIZER( BoundingBoxMargin, 0.0f );  // _textBBMargin
233    ADD_VEC4_SERIALIZER( BoundingBoxColor, osg::Vec4() );  // _textBBColor
234}
Note: See TracBrowser for help on using the browser.