~ubuntu-branches/debian/experimental/openscenegraph/experimental

« back to all changes in this revision

Viewing changes to OpenSceneGraph/src/osgPlugins/osgText/IO_Text.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alberto Luaces
  • Date: 2011-01-29 11:36:29 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20110129113629-qisrm2kdqlurc7t3
Tags: 2.9.11-1
* Removed bug-555869-ftbfs_with_binutils_gold.dpatch since upstream has
  already taken care of the issue.
* Removed bug-528229.dpatch since the pkgconfig files are now also split
  in upstream.
* Removed explicit dependency on GLU.
* Upstream no longer includes osgIntrospection (Closes: #592420).
* Disabled zip plugin as its implementation stores an embedded copy of
  zlib.
* Enabled Qt support. Thanks James Goppert.
* Enabled SVG and PDF plugins. Thanks James Goppert.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 
16
 
bool Text_readLocalData(osg::Object &obj, osgDB::Input &fr);
17
 
bool Text_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
18
 
 
19
 
osgDB::RegisterDotOsgWrapperProxy Text_Proxy
20
 
(
21
 
    new osgText::Text,
22
 
    "Text",
23
 
    "Object Drawable TextBase Text",
24
 
    Text_readLocalData,
25
 
    Text_writeLocalData
26
 
);
27
 
 
28
 
 
29
 
osgText::Text::BackdropType convertBackdropTypeStringToEnum(std::string & str)
30
 
{
31
 
    if      (str=="DROP_SHADOW_BOTTOM_RIGHT") return osgText::Text::DROP_SHADOW_BOTTOM_RIGHT;
32
 
    else if (str=="DROP_SHADOW_CENTER_RIGHT") return osgText::Text::DROP_SHADOW_CENTER_RIGHT;
33
 
    else if (str=="DROP_SHADOW_TOP_RIGHT") return osgText::Text::DROP_SHADOW_TOP_RIGHT;
34
 
    else if (str=="DROP_SHADOW_BOTTOM_CENTER") return osgText::Text::DROP_SHADOW_BOTTOM_CENTER;
35
 
    else if (str=="DROP_SHADOW_TOP_CENTER") return osgText::Text::DROP_SHADOW_TOP_CENTER;
36
 
    else if (str=="DROP_SHADOW_BOTTOM_LEFT") return osgText::Text::DROP_SHADOW_BOTTOM_LEFT;
37
 
    else if (str=="DROP_SHADOW_CENTER_LEFT") return osgText::Text::DROP_SHADOW_CENTER_LEFT;
38
 
    else if (str=="DROP_SHADOW_TOP_LEFT") return osgText::Text::DROP_SHADOW_TOP_LEFT;
39
 
    else if (str=="OUTLINE") return osgText::Text::OUTLINE;
40
 
    else if (str=="NONE") return osgText::Text::NONE;
41
 
    else return static_cast<osgText::Text::BackdropType>(-1);       
42
 
}
43
 
std::string convertBackdropTypeEnumToString(osgText::Text::BackdropType backdropType)
44
 
{
45
 
    switch (backdropType)
46
 
    {
47
 
    case osgText::Text::DROP_SHADOW_BOTTOM_RIGHT: return "DROP_SHADOW_BOTTOM_RIGHT";
48
 
    case osgText::Text::DROP_SHADOW_CENTER_RIGHT: return "DROP_SHADOW_CENTER_RIGHT";
49
 
    case osgText::Text::DROP_SHADOW_TOP_RIGHT: return "DROP_SHADOW_TOP_RIGHT";
50
 
    case osgText::Text::DROP_SHADOW_BOTTOM_CENTER: return "DROP_SHADOW_BOTTOM_CENTER";
51
 
    case osgText::Text::DROP_SHADOW_TOP_CENTER: return "DROP_SHADOW_TOP_CENTER";
52
 
    case osgText::Text::DROP_SHADOW_BOTTOM_LEFT: return "DROP_SHADOW_BOTTOM_LEFT";
53
 
    case osgText::Text::DROP_SHADOW_CENTER_LEFT: return "DROP_SHADOW_CENTER_LEFT";
54
 
    case osgText::Text::DROP_SHADOW_TOP_LEFT: return "DROP_SHADOW_TOP_LEFT";
55
 
    case osgText::Text::OUTLINE: return "OUTLINE";
56
 
    case osgText::Text::NONE: return "NONE";
57
 
    default : return "";
58
 
    }
59
 
}
60
 
    
61
 
    
62
 
osgText::Text::BackdropImplementation convertBackdropImplementationStringToEnum(std::string & str)
63
 
{
64
 
    if      (str=="POLYGON_OFFSET") return osgText::Text::POLYGON_OFFSET;
65
 
    else if (str=="NO_DEPTH_BUFFER") return osgText::Text::NO_DEPTH_BUFFER;
66
 
    else if (str=="DEPTH_RANGE") return osgText::Text::DEPTH_RANGE;
67
 
    else if (str=="STENCIL_BUFFER") return osgText::Text::STENCIL_BUFFER;
68
 
    else return static_cast<osgText::Text::BackdropImplementation>(-1);       
69
 
}
70
 
std::string convertBackdropImplementationEnumToString(osgText::Text::BackdropImplementation backdropImplementation)
71
 
{
72
 
    switch (backdropImplementation)
73
 
    {
74
 
    case osgText::Text::POLYGON_OFFSET: return "POLYGON_OFFSET";
75
 
    case osgText::Text::NO_DEPTH_BUFFER: return "NO_DEPTH_BUFFER";
76
 
    case osgText::Text::DEPTH_RANGE: return "DEPTH_RANGE";
77
 
    case osgText::Text::STENCIL_BUFFER: return "STENCIL_BUFFER";
78
 
    default : return "";
79
 
    }
80
 
}
81
 
 
82
 
osgText::Text::ColorGradientMode convertColorGradientModeStringToEnum(std::string & str)
83
 
{
84
 
    if      (str=="SOLID") return osgText::Text::SOLID;
85
 
    else if (str=="PER_CHARACTER") return osgText::Text::PER_CHARACTER;
86
 
    else if (str=="OVERALL") return osgText::Text::OVERALL;
87
 
    else return static_cast<osgText::Text::ColorGradientMode>(-1);       
88
 
}
89
 
std::string convertColorGradientModeEnumToString(osgText::Text::ColorGradientMode colorGradientMode)
90
 
{
91
 
    switch (colorGradientMode)
92
 
    {
93
 
    case osgText::Text::SOLID: return "SOLID";
94
 
    case osgText::Text::PER_CHARACTER: return "PER_CHARACTER";
95
 
    case osgText::Text::OVERALL: return "OVERALL";
96
 
    default : return "";
97
 
    }
98
 
}
99
 
 
100
 
 
101
 
bool Text_readLocalData(osg::Object &obj, osgDB::Input &fr)
102
 
{
103
 
    osgText::Text &text = static_cast<osgText::Text &>(obj);
104
 
    bool itAdvanced = false;
105
 
 
106
 
 
107
 
    if (fr.matchSequence("font %w"))
108
 
    { 
109
 
        text.setFont(fr[1].getStr());
110
 
        fr += 2;
111
 
        itAdvanced = true;
112
 
        
113
 
    }
114
 
 
115
 
    // color
116
 
    if (fr[0].matchWord("color"))
117
 
    {
118
 
        osg::Vec4 c;
119
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
120
 
        {
121
 
            text.setColor(c);
122
 
            fr += 4;
123
 
            itAdvanced = true;
124
 
        }
125
 
    }
126
 
 
127
 
    // backdropType
128
 
    if (fr[0].matchWord("backdropType"))
129
 
    {
130
 
        std::string str = fr[1].getStr();
131
 
        osgText::Text::BackdropType backdropType = convertBackdropTypeStringToEnum(str);
132
 
        
133
 
        if (backdropType != static_cast<osgText::Text::BackdropType>(-1))
134
 
            text.setBackdropType(backdropType);
135
 
    
136
 
        fr += 2;
137
 
        itAdvanced = true;
138
 
    }
139
 
    
140
 
    float backdropHorizontalOffset = text.getBackdropHorizontalOffset();
141
 
    float backdropVerticalOffset = text.getBackdropVerticalOffset();
142
 
    
143
 
    // backdropHorizontalOffset
144
 
    if (fr[0].matchWord("backdropHorizontalOffset"))
145
 
    {
146
 
        if (fr[1].getFloat(backdropHorizontalOffset))
147
 
        {
148
 
            fr += 2;
149
 
            itAdvanced = true;
150
 
        }
151
 
    }
152
 
 
153
 
    // backdropVerticalOffset
154
 
    if (fr[0].matchWord("backdropVerticalOffset"))
155
 
    {
156
 
        if (fr[1].getFloat(backdropVerticalOffset))
157
 
        {
158
 
            fr += 2;
159
 
            itAdvanced = true;
160
 
        }
161
 
    }
162
 
    text.setBackdropOffset(backdropHorizontalOffset, backdropVerticalOffset);
163
 
    
164
 
    // backdropColor
165
 
    if (fr[0].matchWord("backdropColor"))
166
 
    {
167
 
        osg::Vec4 c;
168
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
169
 
        {
170
 
            text.setBackdropColor(c);
171
 
            fr += 4;
172
 
            itAdvanced = true;
173
 
        }
174
 
    }
175
 
    
176
 
    // backdropImplementation
177
 
    if (fr[0].matchWord("backdropImplementation"))
178
 
    {
179
 
        std::string str = fr[1].getStr();
180
 
        osgText::Text::BackdropImplementation backdropImplementation = convertBackdropImplementationStringToEnum(str);
181
 
        
182
 
        if (backdropImplementation != static_cast<osgText::Text::BackdropImplementation>(-1))
183
 
            text.setBackdropImplementation(backdropImplementation);
184
 
    
185
 
        fr += 2;
186
 
        itAdvanced = true;
187
 
    }
188
 
  
189
 
    // ColorGradientMode
190
 
    if (fr[0].matchWord("colorGradientMode"))
191
 
    {
192
 
        std::string str = fr[1].getStr();
193
 
        osgText::Text::ColorGradientMode colorGradientMode = convertColorGradientModeStringToEnum(str);
194
 
      
195
 
        if (colorGradientMode != static_cast<osgText::Text::ColorGradientMode>(-1))
196
 
            text.setColorGradientMode(colorGradientMode);
197
 
  
198
 
        fr += 2;
199
 
        itAdvanced = true;
200
 
    }
201
 
    
202
 
    // ** get default value;
203
 
    osg::Vec4 colorGradientTopLeft = text.getColorGradientTopLeft();
204
 
    osg::Vec4 colorGradientBottomLeft = text.getColorGradientBottomLeft();
205
 
    osg::Vec4 colorGradientBottomRight = text.getColorGradientBottomRight();
206
 
    osg::Vec4 colorGradientTopRight = text.getColorGradientTopRight();
207
 
    
208
 
    // colorGradientTopLeft
209
 
    if (fr[0].matchWord("colorGradientTopLeft"))
210
 
    {
211
 
        osg::Vec4 c;
212
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
213
 
        {
214
 
            colorGradientTopLeft = c;
215
 
            fr += 4;
216
 
            itAdvanced = true;
217
 
        }
218
 
    }
219
 
 
220
 
    // colorGradientBottomLeft
221
 
    if (fr[0].matchWord("colorGradientBottomLeft"))
222
 
    {
223
 
        osg::Vec4 c;
224
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
225
 
        {
226
 
            colorGradientBottomLeft = c;
227
 
            fr += 4;
228
 
            itAdvanced = true;
229
 
        }
230
 
    }
231
 
    
232
 
    // colorGradientBottomRight
233
 
    if (fr[0].matchWord("colorGradientBottomRight"))
234
 
    {
235
 
        osg::Vec4 c;
236
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
237
 
        {
238
 
            colorGradientBottomRight = c;
239
 
            fr += 4;
240
 
            itAdvanced = true;
241
 
        }
242
 
    }
243
 
    
244
 
    // colorGradientTopRight
245
 
    if (fr[0].matchWord("colorGradientTopRight"))
246
 
    {
247
 
        osg::Vec4 c;
248
 
        if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
249
 
        {
250
 
            colorGradientTopRight = c;
251
 
            fr += 4;
252
 
            itAdvanced = true;
253
 
        }
254
 
    }
255
 
    
256
 
    text.setColorGradientCorners(colorGradientTopLeft, colorGradientBottomLeft, colorGradientBottomRight, colorGradientTopRight);
257
 
    
258
 
    return itAdvanced;
259
 
}
260
 
 
261
 
bool Text_writeLocalData(const osg::Object &obj, osgDB::Output &fw)
262
 
{
263
 
    const osgText::Text &text = static_cast<const osgText::Text &>(obj);
264
 
 
265
 
    if (text.getFont())
266
 
    {
267
 
        fw.indent() << "font " << text.getFont()->getFileName() << std::endl;
268
 
    }
269
 
 
270
 
    // color
271
 
    osg::Vec4 c = text.getColor();
272
 
    fw.indent() << "color " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
273
 
 
274
 
    // backdropType
275
 
    fw.indent() << "backdropType " << convertBackdropTypeEnumToString(text.getBackdropType()) << std::endl;
276
 
    
277
 
    // backdropHorizontalOffset
278
 
    fw.indent() << "backdropHorizontalOffset " << text.getBackdropHorizontalOffset() << std::endl;
279
 
    
280
 
    // backdropVerticalOffset
281
 
    fw.indent() << "backdropVerticalOffset " << text.getBackdropVerticalOffset() << std::endl;
282
 
    
283
 
    // backdropColor
284
 
    c = text.getBackdropColor();
285
 
    fw.indent() << "backdropColor " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
286
 
    
287
 
    // backdropImplementation
288
 
    fw.indent() << "backdropImplementation " << convertBackdropImplementationEnumToString(text.getBackdropImplementation()) << std::endl;
289
 
    
290
 
    // colorGradientMode
291
 
    fw.indent() << "colorGradientMode " << convertColorGradientModeEnumToString(text.getColorGradientMode()) << std::endl;
292
 
    
293
 
    // colorGradientTopLeft
294
 
    c = text.getColorGradientTopLeft();
295
 
    fw.indent() << "colorGradientTopLeft " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
296
 
    
297
 
    // colorGradientBottomLeft
298
 
    c = text.getColorGradientBottomLeft();
299
 
    fw.indent() << "colorGradientBottomLeft " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
300
 
    
301
 
    // colorGradientBottomRight
302
 
    c = text.getColorGradientBottomRight();
303
 
    fw.indent() << "colorGradientBottomRight " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
304
 
        
305
 
    // colorGradientTopRight
306
 
    c = text.getColorGradientTopRight();
307
 
    fw.indent() << "colorGradientTopRight " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
308
 
    
309
 
    return true;
310
 
}