root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osgText/IO_TextBase.cpp @ 13041

Revision 13041, 14.0 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/Text>
2#include <osgText/Font>
3
4#include <iostream>
5#include <string>
6
7#include <osg/Vec3>
8#include <osg/Vec4>
9#include <osg/io_utils>
10
11#include <osgDB/Registry>
12#include <osgDB/Input>
13#include <osgDB/Output>
14#include <osgDB/ParameterOutput>
15
16bool TextBase_readLocalData(osg::Object &obj, osgDB::Input &fr);
17bool TextBase_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
18
19REGISTER_DOTOSGWRAPPER(TextBase_Proxy)
20(
21    /*new osgText::Text*/NULL,
22    "TextBase",
23    "Object Drawable TextBase",
24    TextBase_readLocalData,
25    TextBase_writeLocalData
26);
27
28bool TextBase_readLocalData(osg::Object &obj, osgDB::Input &fr)
29{
30    osgText::Text &text = static_cast<osgText::Text &>(obj);
31    bool itAdvanced = false;
32
33    // color
34    if (fr[0].matchWord("color"))
35    {
36        osg::Vec4 c;
37        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
38        {
39            text.setColor(c);
40            fr += 4;
41            itAdvanced = true;
42        }
43    }
44
45    if (fr.matchSequence("font %w"))
46    {
47        text.setFont(fr[1].getStr());
48        fr += 2;
49        itAdvanced = true;
50    }
51
52    if (fr[0].matchWord("fontResolution") || fr[0].matchWord("fontSize"))
53    {
54        unsigned int width;
55        unsigned int height;
56        if (fr[1].getUInt(width) && fr[2].getUInt(height))
57        {
58            text.setFontResolution(width,height);
59            fr += 3;
60            itAdvanced = true;
61        }
62    }
63
64    if (fr[0].matchWord("characterSize"))
65    {
66        float height;
67        float aspectRatio;
68        if (fr[1].getFloat(height) && fr[2].getFloat(aspectRatio))
69        {
70            text.setCharacterSize(height,aspectRatio);
71            fr += 3;
72            itAdvanced = true;
73        }
74    }
75
76    if (fr.matchSequence("characterSizeMode %w"))
77    {
78        std::string str = fr[1].getStr();
79        if      (str=="OBJECT_COORDS") text.setCharacterSizeMode(osgText::Text::OBJECT_COORDS);
80        else if (str=="SCREEN_COORDS") text.setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
81        else if (str=="OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT") text.setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
82    }
83
84    // maximum dimentsions of text box.
85    if (fr[0].matchWord("maximumWidth"))
86    {
87        float width;
88        if (fr[1].getFloat(width))
89        {
90            text.setMaximumWidth(width);
91            fr += 2;
92            itAdvanced = true;
93        }
94    }
95
96    if (fr[0].matchWord("maximumHeight"))
97    {
98        float height;
99        if (fr[1].getFloat(height))
100        {
101            text.setMaximumHeight(height);
102            fr += 2;
103            itAdvanced = true;
104        }
105    }
106
107    if (fr[0].matchWord("lineSpacing"))
108    {
109        float height;
110        if (fr[1].getFloat(height))
111        {
112            text.setLineSpacing(height);
113            fr += 2;
114            itAdvanced = true;
115        }
116    }
117
118    if (fr.matchSequence("alignment %w"))
119    {
120        std::string str = fr[1].getStr();
121        if      (str=="LEFT_TOP") text.setAlignment(osgText::Text::LEFT_TOP);
122        else if (str=="LEFT_CENTER") text.setAlignment(osgText::Text::LEFT_CENTER);
123        else if (str=="LEFT_BOTTOM") text.setAlignment(osgText::Text::LEFT_BOTTOM);
124        else if (str=="CENTER_TOP") text.setAlignment(osgText::Text::CENTER_TOP);
125        else if (str=="CENTER_CENTER") text.setAlignment(osgText::Text::CENTER_CENTER);
126        else if (str=="CENTER_BOTTOM") text.setAlignment(osgText::Text::CENTER_BOTTOM);
127        else if (str=="RIGHT_TOP") text.setAlignment(osgText::Text::RIGHT_TOP);
128        else if (str=="RIGHT_CENTER") text.setAlignment(osgText::Text::RIGHT_CENTER);
129        else if (str=="RIGHT_BOTTOM") text.setAlignment(osgText::Text::RIGHT_BOTTOM);
130        else if (str=="LEFT_BASE_LINE") text.setAlignment(osgText::Text::LEFT_BASE_LINE);
131        else if (str=="CENTER_BASE_LINE") text.setAlignment(osgText::Text::CENTER_BASE_LINE);
132        else if (str=="RIGHT_BASE_LINE") text.setAlignment(osgText::Text::RIGHT_BASE_LINE);
133        else if (str=="LEFT_BOTTOM_BASE_LINE") text.setAlignment(osgText::Text::LEFT_BOTTOM_BASE_LINE);
134        else if (str=="CENTER_BOTTOM_BASE_LINE") text.setAlignment(osgText::Text::CENTER_BOTTOM_BASE_LINE);
135        else if (str=="RIGHT_BOTTOM_BASE_LINE") text.setAlignment(osgText::Text::RIGHT_BOTTOM_BASE_LINE);
136        else if (str=="BASE_LINE") text.setAlignment(osgText::Text::BASE_LINE);
137        fr += 2;
138        itAdvanced = true;
139    }
140
141    if (fr.matchSequence("axisAlignment %w"))
142    {
143        std::string str = fr[1].getStr();
144        if      (str=="XY_PLANE") text.setAxisAlignment(osgText::Text::XY_PLANE);
145        else if (str=="REVERSED_XY_PLANE") text.setAxisAlignment(osgText::Text::REVERSED_XY_PLANE);
146        else if (str=="XZ_PLANE") text.setAxisAlignment(osgText::Text::XZ_PLANE);
147        else if (str=="REVERSED_XZ_PLANE") text.setAxisAlignment(osgText::Text::REVERSED_XZ_PLANE);
148        else if (str=="YZ_PLANE") text.setAxisAlignment(osgText::Text::YZ_PLANE);
149        else if (str=="REVERSED_YZ_PLANE") text.setAxisAlignment(osgText::Text::REVERSED_YZ_PLANE);
150        else if (str=="SCREEN") text.setAxisAlignment(osgText::Text::SCREEN);
151        fr += 2;
152        itAdvanced = true;
153    }
154
155    if (fr.matchSequence("rotation"))
156    {
157        osg::Vec4 rotation;
158        if (fr[1].getFloat(rotation.x()) && fr[2].getFloat(rotation.y()) && fr[3].getFloat(rotation.z()) && fr[4].getFloat(rotation.w()))
159        {
160            text.setRotation(rotation);
161            fr += 4;
162            itAdvanced = true;
163        }
164    }
165
166    if (fr.matchSequence("autoRotateToScreen TRUE"))
167    {
168        text.setAutoRotateToScreen(true);
169        fr += 2;
170        itAdvanced = true;
171    }
172
173    if (fr.matchSequence("autoScaleToLimitScreenSizeToFontResolution TRUE"))
174    {
175        text.setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
176        fr += 2;
177        itAdvanced = true;
178    }
179
180    if (fr.matchSequence("layout %w") && fr[1].getStr())
181    {
182        std::string str = fr[1].getStr();
183        if      (str=="LEFT_TO_RIGHT") text.setLayout(osgText::Text::LEFT_TO_RIGHT);
184        else if (str=="RIGHT_TO_LEFT") text.setLayout(osgText::Text::RIGHT_TO_LEFT);
185        else if (str=="VERTICAL") text.setLayout(osgText::Text::VERTICAL);
186        fr += 2;
187        itAdvanced = true;
188    }
189
190
191    // position
192    if (fr[0].matchWord("position"))
193    {
194        osg::Vec3 p;
195        if (fr[1].getFloat(p.x()) && fr[2].getFloat(p.y()) && fr[3].getFloat(p.z()))
196        {
197            text.setPosition(p);
198            fr += 4;
199            itAdvanced = true;
200        }
201    }
202
203    // draw mode
204    if (fr[0].matchWord("drawMode"))
205    {
206        int i;
207        if (fr[1].getInt(i)) {
208            text.setDrawMode(i);
209            fr += 2;
210            itAdvanced = true;
211        }
212    }
213
214    // bounding box margin
215    if (fr[0].matchWord("BoundingBoxMargin"))
216    {
217        float margin;
218        if (fr[1].getFloat(margin)) {
219            text.setBoundingBoxMargin(margin);
220            fr += 2;
221            itAdvanced = true;
222        }
223    }
224
225    // bounding box color
226    if (fr[0].matchWord("BoundingBoxColor"))
227    {
228        osg::Vec4 c;
229        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
230        {
231            text.setBoundingBoxColor(c);
232            fr += 5;
233            itAdvanced = true;
234        }
235    }
236
237    // text
238    if (fr.matchSequence("text %s") && fr[1].getStr()) {
239        text.setText(std::string(fr[1].getStr()));
240        fr += 2;
241        itAdvanced = true;
242    }
243
244    if (fr.matchSequence("text %i {"))
245    {
246        // pre 0.9.3 releases..
247        int entry = fr[0].getNoNestedBrackets();
248
249        int capacity;
250        fr[1].getInt(capacity);
251
252        osgText::String str;
253        str.reserve(capacity);
254
255        fr += 3;
256
257        while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)
258        {
259            unsigned int c;
260            if (fr[0].getUInt(c))
261            {
262                ++fr;
263                str.push_back(c);
264            }
265            else
266            {
267                ++fr;
268            }
269        }
270
271        text.setText(str);
272
273        itAdvanced = true;
274        ++fr;
275    }
276
277    return itAdvanced;
278}
279
280//osgText::Text::CharactereSizeMode convertCharactereSizeModeStringtoEnum(std::string & str)
281//{
282//    if      (str=="OBJECT_COORDS") return osgText::Text::OBJECT_COORDS;
283//    else if (str=="SCREEN_COORDS") return osgText::Text::SCREEN_COORDS;
284//    else if (str=="OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT") return osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT;
285//    else return -1;
286//}
287//
288//std::string convertCharactereSizeModeStringtoEnum(osgText::Text::CharactereSizeMode charactereSizeMode)
289//{
290//    switch(charactereSizeMode)
291//    {
292//      case osgText::Text::OBJECT_COORDS : return "OBJECT_COORDS";
293//      case osgText::Text::SCREEN_COORDS : return "SCREEN_COORDS";
294//      case osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT: return "OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT";
295//      default : return "";
296//    }
297//}
298
299bool TextBase_writeLocalData(const osg::Object &obj, osgDB::Output &fw)
300{
301    const osgText::Text &text = static_cast<const osgText::Text &>(obj);
302
303    // color
304    osg::Vec4 c = text.getColor();
305    fw.indent() << "color " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
306
307    if (text.getFont())
308    {
309        fw.indent() << "font " << text.getFont()->getFileName() << std::endl;
310    }
311
312    // font resolution
313    fw.indent() << "fontResolution " << text.getFontWidth() << " " << text.getFontHeight() << std::endl;
314
315    // charater size.
316    fw.indent() << "characterSize " << text.getCharacterHeight() << " " << text.getCharacterAspectRatio() << std::endl;
317
318    fw.indent() << "characterSizeMode ";
319    switch(text.getCharacterSizeMode())
320    {
321      case osgText::Text::OBJECT_COORDS : fw<<"OBJECT_COORDS"<<std::endl; break;
322      case osgText::Text::SCREEN_COORDS : fw<<"SCREEN_COORDS"<<std::endl; break;
323      case osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT: fw<<"OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT"<<std::endl; break;
324    }
325
326    // maximum dimension of text box.
327    if (text.getMaximumWidth()>0.0f)
328    {
329        fw.indent() << "maximumWidth " << text.getMaximumWidth() << std::endl;
330    }
331
332    if (text.getMaximumHeight()>0.0f)
333    {
334        fw.indent() << "maximumHeight " << text.getMaximumHeight() << std::endl;
335    }
336
337    if (text.getLineSpacing()>0.0f)
338    {
339        fw.indent() << "lineSpacing " << text.getLineSpacing() << std::endl;
340    }
341
342    // alignment
343    fw.indent() << "alignment ";
344    switch(text.getAlignment())
345    {
346      case osgText::Text::LEFT_TOP:        fw << "LEFT_TOP" << std::endl; break;
347      case osgText::Text::LEFT_CENTER :    fw << "LEFT_CENTER" << std::endl; break;
348      case osgText::Text::LEFT_BOTTOM :    fw << "LEFT_BOTTOM" << std::endl; break;
349
350      case osgText::Text::CENTER_TOP:      fw << "CENTER_TOP" << std::endl; break;
351      case osgText::Text::CENTER_CENTER:   fw << "CENTER_CENTER" << std::endl; break;
352      case osgText::Text::CENTER_BOTTOM:   fw << "CENTER_BOTTOM" << std::endl; break;
353
354      case osgText::Text::RIGHT_TOP:       fw << "RIGHT_TOP" << std::endl; break;
355      case osgText::Text::RIGHT_CENTER:    fw << "RIGHT_CENTER" << std::endl; break;
356      case osgText::Text::RIGHT_BOTTOM:    fw << "RIGHT_BOTTOM" << std::endl; break;
357
358      case osgText::Text::LEFT_BASE_LINE:  fw << "LEFT_BASE_LINE" << std::endl; break;
359      case osgText::Text::CENTER_BASE_LINE:fw << "CENTER_BASE_LINE" << std::endl; break;
360      case osgText::Text::RIGHT_BASE_LINE: fw << "RIGHT_BASE_LINE" << std::endl; break;
361
362      case osgText::Text::LEFT_BOTTOM_BASE_LINE:  fw << "LEFT_BOTTOM_BASE_LINE" << std::endl; break;
363      case osgText::Text::CENTER_BOTTOM_BASE_LINE:fw << "CENTER_BOTTOM_BASE_LINE" << std::endl; break;
364      case osgText::Text::RIGHT_BOTTOM_BASE_LINE: fw << "RIGHT_BOTTOM_BASE_LINE" << std::endl; break;
365    };
366
367
368    if (!text.getRotation().zeroRotation())
369    {
370        fw.indent() << "rotation " << text.getRotation() << std::endl;
371    }
372
373    if (text.getAutoRotateToScreen())
374    {
375        fw.indent() << "autoRotateToScreen TRUE"<< std::endl;
376    }
377
378
379    // layout
380    fw.indent() << "layout ";
381    switch(text.getLayout())
382    {
383      case osgText::Text::LEFT_TO_RIGHT: fw << "LEFT_TO_RIGHT" << std::endl; break;
384      case osgText::Text::RIGHT_TO_LEFT: fw << "RIGHT_TO_LEFT" << std::endl; break;
385      case osgText::Text::VERTICAL: fw << "VERTICAL" << std::endl; break;
386    };
387
388
389    // position
390    osg::Vec3 p = text.getPosition();
391    fw.indent() << "position " << p.x() << " " << p.y() << " " << p.z() << std::endl;
392
393    // color
394//    osg::Vec4 c = text.getColor();
395//    fw.indent() << "color " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
396
397    // draw mode
398    fw.indent() << "drawMode " << text.getDrawMode() << std::endl;
399
400    // bounding box margin
401    fw.indent() << "BoundingBoxMargin " << text.getBoundingBoxMargin() << std::endl;
402
403    // bounding box color
404    osg::Vec4 bbc = text.getBoundingBoxColor();
405    fw.indent() << "BoundingBoxColor " << bbc.x() << " " << bbc.y() << " " << bbc.z() << " " << bbc.w() << std::endl;
406
407    // text
408    const osgText::String& textstring = text.getText();
409    bool isACString = true;
410    osgText::String::const_iterator itr;
411    for(itr=textstring.begin();
412        itr!=textstring.end() && isACString;
413        ++itr)
414    {
415        if (*itr==0 || *itr>256) isACString=false;
416    }
417    if (isACString)
418    {
419        std::string str;
420
421        for(itr=textstring.begin();
422            itr!=textstring.end();
423            ++itr)
424        {
425            str += (char)(*itr);
426        }
427
428        //std::copy(textstring.begin(),textstring.end(),std::back_inserter(str));
429
430        fw.indent() << "text " << fw.wrapString(str) << std::endl;
431    }
432    else
433    {
434        // do it the hardway...output each character as an int
435        fw.indent() << "text "<<textstring.size()<<std::endl;;
436        osgDB::writeArray(fw,textstring.begin(),textstring.end());
437    }
438
439    return true;
440}
Note: See TracBrowser for help on using the browser.