osgEarth 2.1.1
|
Public Member Functions | |
LabelControl (const std::string &value="", float fontSize=18.0f, const osg::Vec4f &foreColor=osg::Vec4f(1, 1, 1, 1)) | |
LabelControl (const std::string &value, const osg::Vec4f &foreColor) | |
void | setText (const std::string &value) |
const std::string & | text () const |
void | setFont (osgText::Font *font) |
osgText::Font * | font () const |
void | setFontSize (float value) |
float | fontSize () const |
void | setHaloColor (const osg::Vec4f &value) |
const optional< osg::Vec4f > & | haloColor () const |
virtual void | calcSize (const ControlContext &context, osg::Vec2f &out_size) |
virtual void | draw (const ControlContext &context, DrawableList &out_drawables) |
Private Attributes | |
std::string | _text |
osg::ref_ptr< osgText::Font > | _font |
float | _fontSize |
osg::ref_ptr< osgText::Text > | _drawable |
osg::Vec3 | _bmin |
osg::Vec3 | _bmax |
optional< osg::Vec4f > | _haloColor |
LabelControl::LabelControl | ( | const std::string & | value = "" , |
float | fontSize = 18.0f , |
||
const osg::Vec4f & | foreColor = osg::Vec4f(1,1,1,1) |
||
) |
Definition at line 466 of file Controls.cpp.
{ setText( text ); setFont( osgText::readFontFile( "arial.ttf" ) ); // TODO: cache this? setFontSize( fontSize ); setBackColor( osg::Vec4f(0,0,0,0) ); setForeColor( foreColor ); }
LabelControl::LabelControl | ( | const std::string & | value, |
const osg::Vec4f & | foreColor | ||
) |
Definition at line 477 of file Controls.cpp.
{ setText( text ); setFont( osgText::readFontFile( "arial.ttf" ) ); // TODO: cache this? setFontSize( 18.0f ); setBackColor( osg::Vec4f(0,0,0,0) ); setForeColor( foreColor ); }
void LabelControl::calcSize | ( | const ControlContext & | context, |
osg::Vec2f & | out_size | ||
) | [virtual] |
Reimplemented from osgEarth::Util::Controls::Control.
Definition at line 524 of file Controls.cpp.
{ if ( visible() == true ) { // we have to create the drawable during the layout pass so we can calculate its size. LabelText* t = new LabelText(); #if 1 // needs a special shader // todo: doesn't work. why? osg::Program* program = new osg::Program(); program->addShader( new osg::Shader( osg::Shader::VERTEX, s_controlVertexShader ) ); program->addShader( new osg::Shader( osg::Shader::FRAGMENT, s_labelControlFragmentShader ) ); t->getOrCreateStateSet()->setAttributeAndModes( program, osg::StateAttribute::ON ); #endif t->setText( _text ); // yes, object coords. screen coords won't work becuase the bounding box will be wrong. t->setCharacterSizeMode( osgText::Text::OBJECT_COORDS ); t->setCharacterSize( _fontSize ); // always align to top. layout alignment gets calculated layer in Control::calcPos(). t->setAlignment( osgText::Text::LEFT_TOP ); t->setColor( foreColor().value() ); if ( _font.valid() ) t->setFont( _font.get() ); if ( haloColor().isSet() ) { t->setBackdropType( osgText::Text::OUTLINE ); t->setBackdropOffset( 0.03 ); t->setBackdropColor( haloColor().value() ); } osg::BoundingBox bbox = t->getTextBB(); if ( cx._viewContextID != ~0u ) { //the Text's autoTransformCache matrix puts some mojo on the bounding box osg::Matrix m = t->getATMatrix( cx._viewContextID ); _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() ) * m; _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() ) * m; } else { _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() ); _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() ); } _renderSize.set( (_bmax.x() - _bmin.x()) + padding().x(), (_bmax.y() - _bmin.y()) + padding().y() ); _drawable = t; out_size.set( margin().x() + _renderSize.x(), margin().y() + _renderSize.y() ); } else { out_size.set(0,0); } //_dirty = false; }
void LabelControl::draw | ( | const ControlContext & | context, |
DrawableList & | out_drawables | ||
) | [virtual] |
Reimplemented from osgEarth::Util::Controls::Control.
Definition at line 590 of file Controls.cpp.
{ if ( _drawable.valid() && visible() == true ) { Control::draw( cx, out ); float vph = cx._vp->height(); // - padding().bottom(); LabelText* t = static_cast<LabelText*>( _drawable.get() ); osg::BoundingBox bbox = t->getTextBB(); t->setPosition( osg::Vec3( _renderPos.x(), vph - _renderPos.y(), 0 ) ); out.push_back( _drawable.get() ); } }
osgText::Font* osgEarth::Util::Controls::LabelControl::font | ( | ) | const [inline] |
float osgEarth::Util::Controls::LabelControl::fontSize | ( | ) | const [inline] |
const optional<osg::Vec4f>& osgEarth::Util::Controls::LabelControl::haloColor | ( | ) | const [inline] |
Definition at line 286 of file Controls.
{ return _haloColor; }
void LabelControl::setFont | ( | osgText::Font * | font | ) |
Definition at line 497 of file Controls.cpp.
void LabelControl::setFontSize | ( | float | value | ) |
Definition at line 506 of file Controls.cpp.
void LabelControl::setHaloColor | ( | const osg::Vec4f & | value | ) |
Definition at line 515 of file Controls.cpp.
{ if ( !_haloColor.isSet() || *_haloColor != value ) { _haloColor = value; dirty(); } }
void LabelControl::setText | ( | const std::string & | value | ) |
Definition at line 488 of file Controls.cpp.
const std::string& osgEarth::Util::Controls::LabelControl::text | ( | ) | const [inline] |
osg::Vec3 osgEarth::Util::Controls::LabelControl::_bmax [private] |
osg::Vec3 osgEarth::Util::Controls::LabelControl::_bmin [private] |
osg::ref_ptr<osgText::Text> osgEarth::Util::Controls::LabelControl::_drawable [private] |
osg::ref_ptr<osgText::Font> osgEarth::Util::Controls::LabelControl::_font [private] |
float osgEarth::Util::Controls::LabelControl::_fontSize [private] |
optional<osg::Vec4f> osgEarth::Util::Controls::LabelControl::_haloColor [private] |
std::string osgEarth::Util::Controls::LabelControl::_text [private] |