1
#include <osgText/Text>
2
#include <osgText/Font>
9
#include <osg/io_utils>
11
#include <osgDB/Registry>
12
#include <osgDB/Input>
13
#include <osgDB/Output>
14
#include <osgDB/ParameterOutput>
16
bool Text_readLocalData(osg::Object &obj, osgDB::Input &fr);
17
bool Text_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
19
osgDB::RegisterDotOsgWrapperProxy Text_Proxy
23
"Object Drawable TextBase Text",
29
osgText::Text::BackdropType convertBackdropTypeStringToEnum(std::string & str)
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);
43
std::string convertBackdropTypeEnumToString(osgText::Text::BackdropType backdropType)
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";
62
osgText::Text::BackdropImplementation convertBackdropImplementationStringToEnum(std::string & str)
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);
70
std::string convertBackdropImplementationEnumToString(osgText::Text::BackdropImplementation backdropImplementation)
72
switch (backdropImplementation)
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";
82
osgText::Text::ColorGradientMode convertColorGradientModeStringToEnum(std::string & str)
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);
89
std::string convertColorGradientModeEnumToString(osgText::Text::ColorGradientMode colorGradientMode)
91
switch (colorGradientMode)
93
case osgText::Text::SOLID: return "SOLID";
94
case osgText::Text::PER_CHARACTER: return "PER_CHARACTER";
95
case osgText::Text::OVERALL: return "OVERALL";
101
bool Text_readLocalData(osg::Object &obj, osgDB::Input &fr)
103
osgText::Text &text = static_cast<osgText::Text &>(obj);
104
bool itAdvanced = false;
107
if (fr.matchSequence("font %w"))
109
text.setFont(fr[1].getStr());
116
if (fr[0].matchWord("color"))
119
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
128
if (fr[0].matchWord("backdropType"))
130
std::string str = fr[1].getStr();
131
osgText::Text::BackdropType backdropType = convertBackdropTypeStringToEnum(str);
133
if (backdropType != static_cast<osgText::Text::BackdropType>(-1))
134
text.setBackdropType(backdropType);
140
float backdropHorizontalOffset = text.getBackdropHorizontalOffset();
141
float backdropVerticalOffset = text.getBackdropVerticalOffset();
143
// backdropHorizontalOffset
144
if (fr[0].matchWord("backdropHorizontalOffset"))
146
if (fr[1].getFloat(backdropHorizontalOffset))
153
// backdropVerticalOffset
154
if (fr[0].matchWord("backdropVerticalOffset"))
156
if (fr[1].getFloat(backdropVerticalOffset))
162
text.setBackdropOffset(backdropHorizontalOffset, backdropVerticalOffset);
165
if (fr[0].matchWord("backdropColor"))
168
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
170
text.setBackdropColor(c);
176
// backdropImplementation
177
if (fr[0].matchWord("backdropImplementation"))
179
std::string str = fr[1].getStr();
180
osgText::Text::BackdropImplementation backdropImplementation = convertBackdropImplementationStringToEnum(str);
182
if (backdropImplementation != static_cast<osgText::Text::BackdropImplementation>(-1))
183
text.setBackdropImplementation(backdropImplementation);
190
if (fr[0].matchWord("colorGradientMode"))
192
std::string str = fr[1].getStr();
193
osgText::Text::ColorGradientMode colorGradientMode = convertColorGradientModeStringToEnum(str);
195
if (colorGradientMode != static_cast<osgText::Text::ColorGradientMode>(-1))
196
text.setColorGradientMode(colorGradientMode);
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();
208
// colorGradientTopLeft
209
if (fr[0].matchWord("colorGradientTopLeft"))
212
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
214
colorGradientTopLeft = c;
220
// colorGradientBottomLeft
221
if (fr[0].matchWord("colorGradientBottomLeft"))
224
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
226
colorGradientBottomLeft = c;
232
// colorGradientBottomRight
233
if (fr[0].matchWord("colorGradientBottomRight"))
236
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
238
colorGradientBottomRight = c;
244
// colorGradientTopRight
245
if (fr[0].matchWord("colorGradientTopRight"))
248
if (fr[1].getFloat(c.x()) && fr[2].getFloat(c.y()) && fr[3].getFloat(c.z()) && fr[4].getFloat(c.w()))
250
colorGradientTopRight = c;
256
text.setColorGradientCorners(colorGradientTopLeft, colorGradientBottomLeft, colorGradientBottomRight, colorGradientTopRight);
261
bool Text_writeLocalData(const osg::Object &obj, osgDB::Output &fw)
263
const osgText::Text &text = static_cast<const osgText::Text &>(obj);
267
fw.indent() << "font " << text.getFont()->getFileName() << std::endl;
271
osg::Vec4 c = text.getColor();
272
fw.indent() << "color " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
275
fw.indent() << "backdropType " << convertBackdropTypeEnumToString(text.getBackdropType()) << std::endl;
277
// backdropHorizontalOffset
278
fw.indent() << "backdropHorizontalOffset " << text.getBackdropHorizontalOffset() << std::endl;
280
// backdropVerticalOffset
281
fw.indent() << "backdropVerticalOffset " << text.getBackdropVerticalOffset() << std::endl;
284
c = text.getBackdropColor();
285
fw.indent() << "backdropColor " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
287
// backdropImplementation
288
fw.indent() << "backdropImplementation " << convertBackdropImplementationEnumToString(text.getBackdropImplementation()) << std::endl;
291
fw.indent() << "colorGradientMode " << convertColorGradientModeEnumToString(text.getColorGradientMode()) << std::endl;
293
// colorGradientTopLeft
294
c = text.getColorGradientTopLeft();
295
fw.indent() << "colorGradientTopLeft " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
297
// colorGradientBottomLeft
298
c = text.getColorGradientBottomLeft();
299
fw.indent() << "colorGradientBottomLeft " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
301
// colorGradientBottomRight
302
c = text.getColorGradientBottomRight();
303
fw.indent() << "colorGradientBottomRight " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;
305
// colorGradientTopRight
306
c = text.getColorGradientTopRight();
307
fw.indent() << "colorGradientTopRight " << c.x() << " " << c.y() << " " << c.z() << " " << c.w() << std::endl;