7290f793f1
list of text drawables as a paragraph block, handles breaking of text into individual lines automatically. Changed the osg::Node::setUserData so that the data type has to be an osg::Referenced, and removes the dependancy on osg::MemoryAdapter. I have done this since it simplifies the OSG side of the interface and makes it less like that the user might abuse the memory managment of the data. It does however mean that user data will have by subclassed from Referenced, and therefor may require users to have their own adapter to do this. However, this little nuasance is worth the extra cleaness and robustness afforded by going the osg::Referenced route.
141 lines
3.4 KiB
Plaintext
141 lines
3.4 KiB
Plaintext
//C++ header - Open Scene Graph - Copyright (C) 1998-2001 Robert Osfield
|
|
//Distributed under the terms of the GNU Library General Public License (LGPL)
|
|
//as published by the Free Software Foundation.
|
|
|
|
/* --------------------------------------------------------------------------
|
|
*
|
|
* openscenegraph textLib / FTGL wrapper
|
|
*
|
|
* --------------------------------------------------------------------------
|
|
*
|
|
* prog: max rheiner;mrn@paus.ch
|
|
* date: 4/25/2001 (m/d/y)
|
|
*
|
|
* --------------------------------------------------------------------------
|
|
*
|
|
* --------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
#ifndef OSGTEXT_TEXT
|
|
#define OSGTEXT_TEXT 1
|
|
|
|
#include <string>
|
|
|
|
#include <osg/GL>
|
|
#include <osg/Drawable>
|
|
#include <osg/Vec3>
|
|
#include <osg/Vec2>
|
|
|
|
// http://homepages.paradise.net.nz/henryj/code/
|
|
|
|
#include <osgText/Font>
|
|
|
|
namespace osgText {
|
|
|
|
class OSGTEXT_EXPORT Text : public osg::Drawable
|
|
{
|
|
public:
|
|
|
|
enum AlignmentType
|
|
{ // from left to right, top to bottom
|
|
LEFT_TOP,
|
|
LEFT_CENTER,
|
|
LEFT_BOTTOM,
|
|
|
|
CENTER_TOP,
|
|
CENTER_CENTER,
|
|
CENTER_BOTTOM,
|
|
|
|
RIGHT_TOP,
|
|
RIGHT_CENTER,
|
|
RIGHT_BOTTOM,
|
|
};
|
|
|
|
enum BoundingBoxType
|
|
{
|
|
GEOMETRY,
|
|
GLYPH,
|
|
};
|
|
|
|
enum DrawModeType
|
|
{ // from left to right, top to bottom
|
|
TEXT = 1<<0,
|
|
BOUNDINGBOX = 1<<1,
|
|
ALIGNEMENT = 1<<2,
|
|
DEFAULT = TEXT,
|
|
};
|
|
|
|
Text();
|
|
Text(Font* font);
|
|
|
|
META_Object(Text);
|
|
|
|
void setPosition(const osg::Vec2& pos);
|
|
void setPosition(const osg::Vec3& pos);
|
|
const osg::Vec3& getPosition() const { return _pos; }
|
|
|
|
void setDrawMode(int mode) { _drawMode=mode; }
|
|
int getDrawMode() const { return _drawMode; }
|
|
|
|
void setBoundingBox(int mode);
|
|
int getBoundingBox() const { return _boundingBoxType; }
|
|
|
|
void setAlignment(int alignment);
|
|
int getAlignment() const { return _alignment; }
|
|
|
|
void setFont(Font* font);
|
|
Font* getFont() { return _font.get(); }
|
|
const Font* getFont() const { return _font.get(); }
|
|
|
|
void setText(const char* text) { _text=text; }
|
|
void setText(const std::string& text) { _text=text; }
|
|
const std::string& getText() const { return _text; }
|
|
|
|
virtual void drawImmediateMode(osg::State& state);
|
|
virtual void drawBoundingBox(void);
|
|
virtual void drawAlignment(void);
|
|
|
|
const osg::Vec3& getAlignmentPos() const { return _alignmentPos; };
|
|
|
|
|
|
protected:
|
|
|
|
enum FontType
|
|
{
|
|
UNDEF,
|
|
BITMAP,
|
|
PIXMAP,
|
|
OUTLINE,
|
|
POLYGON,
|
|
TEXTURE,
|
|
};
|
|
|
|
virtual ~Text();
|
|
|
|
virtual void setDefaults(void);
|
|
virtual const bool computeBound(void) const;
|
|
virtual void calcBounds(osg::Vec3* min,osg::Vec3* max) const;
|
|
void initAlignment(osg::Vec3* min,osg::Vec3* max);
|
|
bool initAlignment(void);
|
|
|
|
osg::ref_ptr<Font> _font;
|
|
|
|
bool _init;
|
|
bool _initAlignment;
|
|
std::string _text;
|
|
int _fontType;
|
|
int _alignment;
|
|
int _drawMode;
|
|
int _boundingBoxType;
|
|
|
|
osg::Vec3 _pos;
|
|
osg::Vec3 _alignmentPos;
|
|
};
|
|
// Text
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
};
|
|
|
|
#endif // OSGTEXT_TEXT
|