250 lines
7.6 KiB
C++
250 lines
7.6 KiB
C++
|
/*
|
||
|
* Copyright (C) 2012 Open Source Robotics Foundation
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
*/
|
||
|
/* Desc: Middleman between OGRE and Gazebo
|
||
|
* Author: indepedentCreations@gmail.com
|
||
|
* Date: 13 Feb 2006
|
||
|
*/
|
||
|
|
||
|
#ifndef _MOVABLETEXT_HH_
|
||
|
#define _MOVABLETEXT_HH_
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
// TODO: remove this line
|
||
|
#include "gazebo/rendering/ogre_gazebo.h"
|
||
|
|
||
|
#include "gazebo/common/CommonTypes.hh"
|
||
|
#include "gazebo/common/Color.hh"
|
||
|
#include "gazebo/math/MathTypes.hh"
|
||
|
#include "gazebo/util/system.hh"
|
||
|
|
||
|
namespace boost
|
||
|
{
|
||
|
class recursive_mutex;
|
||
|
}
|
||
|
|
||
|
namespace gazebo
|
||
|
{
|
||
|
namespace rendering
|
||
|
{
|
||
|
/// \addtogroup gazebo_rendering
|
||
|
/// \{
|
||
|
|
||
|
/// \class MovableText MovableText.hh rendering/rendering.hh
|
||
|
/// \brief Movable text
|
||
|
class GZ_RENDERING_VISIBLE MovableText
|
||
|
: public Ogre::MovableObject, public Ogre::Renderable
|
||
|
{
|
||
|
/// \enum HorizAlign
|
||
|
/// \brief Horizontal alignment
|
||
|
public: enum HorizAlign {
|
||
|
/// \brief Left alignment
|
||
|
H_LEFT,
|
||
|
/// \brief Center alignment
|
||
|
H_CENTER
|
||
|
};
|
||
|
|
||
|
/// \enum VertAlign
|
||
|
/// \brief vertical alignment
|
||
|
public: enum VertAlign {
|
||
|
/// \brief Align below
|
||
|
V_BELOW,
|
||
|
/// \brief Align above
|
||
|
V_ABOVE
|
||
|
};
|
||
|
|
||
|
/// \brief Constructor
|
||
|
public: MovableText();
|
||
|
|
||
|
/// \brief Destructor
|
||
|
public: virtual ~MovableText();
|
||
|
|
||
|
/// \brief Loads text and font info
|
||
|
/// \param[in] _name Name of the text object
|
||
|
/// \param[in] _text Text to render
|
||
|
/// \param[in] _fontName Font to use
|
||
|
/// \param[in] _charHeight Height of the characters
|
||
|
/// \param[in] _color Text color
|
||
|
public: void Load(const std::string &_name,
|
||
|
const std::string &_text,
|
||
|
const std::string &_fontName = "Arial",
|
||
|
float _charHeight = 1.0,
|
||
|
const common::Color &_color = common::Color::White);
|
||
|
|
||
|
/// \brief Set the font
|
||
|
/// \param[in] _font Name of the font
|
||
|
public: void SetFontName(const std::string &_font);
|
||
|
|
||
|
/// \brief Get the font
|
||
|
/// \return The font name
|
||
|
public: const std::string &GetFont() const;
|
||
|
|
||
|
/// \brief Set the text to display.
|
||
|
/// \param[in] _text The text to display.
|
||
|
public: void SetText(const std::string &_text);
|
||
|
|
||
|
/// \brief Get the displayed text.
|
||
|
/// \return The displayed text.
|
||
|
public: const std::string &GetText() const;
|
||
|
|
||
|
/// \brief Set the text color.
|
||
|
/// \param[in] _color Text color.
|
||
|
public: void SetColor(const common::Color &_color);
|
||
|
|
||
|
/// \brief Get the text color.
|
||
|
/// \return Texture color.
|
||
|
public: const common::Color &GetColor() const;
|
||
|
|
||
|
/// \brief Set the height of a character.
|
||
|
/// \param[in] _height Height of the characters.
|
||
|
public: void SetCharHeight(float _height);
|
||
|
|
||
|
/// \brief Set the height of a characters
|
||
|
/// return Height of the characters.
|
||
|
public: float GetCharHeight() const;
|
||
|
|
||
|
/// \brief Set the width of a space.
|
||
|
/// \param[in] _width space width
|
||
|
public:void SetSpaceWidth(float _width);
|
||
|
|
||
|
/// \brief Get the width of a space
|
||
|
/// \return Space width
|
||
|
public: float GetSpaceWidth() const;
|
||
|
|
||
|
/// \brief Set the alignment of the text
|
||
|
/// \param[in] _hAlign Horizontal alignment
|
||
|
/// \param[in] _vAlign Vertical alignment
|
||
|
public: void SetTextAlignment(const HorizAlign &_hAlign,
|
||
|
const VertAlign &_vAlign);
|
||
|
|
||
|
/// \brief Set the baseline height of the text
|
||
|
/// \param[in] _height Baseline height
|
||
|
public: void SetBaseline(float _height);
|
||
|
|
||
|
/// \brief Get the baseline height
|
||
|
/// \return Baseline height
|
||
|
public: float GetBaseline() const;
|
||
|
|
||
|
/// \brief True = text always is displayed ontop.
|
||
|
/// \param[in] _show Set to true to render the text on top of
|
||
|
/// all other drawables.
|
||
|
public: void SetShowOnTop(bool _show);
|
||
|
|
||
|
/// \brief True = text is displayed on top.
|
||
|
/// \return True if MovableText::SetShownOnTop(true) was called.
|
||
|
public: bool GetShowOnTop() const;
|
||
|
|
||
|
/// \brief Get the axis aligned bounding box of the text.
|
||
|
/// \return The axis aligned bounding box.
|
||
|
public: math::Box GetAABB();
|
||
|
|
||
|
/// \brief Update the text.
|
||
|
public: void Update();
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Method to allow a caller to abstractly iterate over the
|
||
|
/// renderable instances.
|
||
|
/// \param[in] _visitor Renderable instances to visit
|
||
|
/// \param[in] _debug True if set to debug
|
||
|
public: virtual void visitRenderables(Ogre::Renderable::Visitor* _visitor,
|
||
|
bool _debug = false);
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief setup the geometry (from MovableText)
|
||
|
protected: void _setupGeometry();
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief update the color(from MovableText)
|
||
|
protected: void _updateColors();
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the world transform (from MovableObject)
|
||
|
protected: void getWorldTransforms(Ogre::Matrix4 *xform) const;
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the bounding radiu (from MovableObject)
|
||
|
protected: float getBoundingRadius() const;
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the squared view depth (from MovableObject)
|
||
|
protected: float getSquaredViewDepth(const Ogre::Camera *cam) const;
|
||
|
|
||
|
/// \internal
|
||
|
private: const Ogre::Quaternion &getWorldOrientation(void) const;
|
||
|
/// \internal
|
||
|
private: const Ogre::Vector3 &getWorldPosition(void) const;
|
||
|
/// \internal
|
||
|
private: const Ogre::AxisAlignedBox &getBoundingBox(void) const;
|
||
|
/// \internal
|
||
|
private: const Ogre::String &getMovableType() const;
|
||
|
|
||
|
/// \internal
|
||
|
private: void _notifyCurrentCamera(Ogre::Camera *cam);
|
||
|
|
||
|
/// \internal
|
||
|
private: void _updateRenderQueue(Ogre::RenderQueue* queue);
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the render operation
|
||
|
protected: void getRenderOperation(Ogre::RenderOperation &op);
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the material
|
||
|
protected: const Ogre::MaterialPtr &getMaterial(void) const;
|
||
|
|
||
|
/// \internal
|
||
|
/// \brief Get the lights
|
||
|
protected: const Ogre::LightList &getLights(void) const;
|
||
|
|
||
|
private: std::string fontName;
|
||
|
private: std::string text;
|
||
|
|
||
|
private: common::Color color;
|
||
|
private: Ogre::RenderOperation renderOp;
|
||
|
private: Ogre::AxisAlignedBox *aabb;
|
||
|
private: Ogre::LightList lightList;
|
||
|
|
||
|
private: float charHeight;
|
||
|
|
||
|
private: bool needUpdate;
|
||
|
|
||
|
private: float radius;
|
||
|
|
||
|
private: Ogre::Camera *camera;
|
||
|
private: Ogre::RenderWindow *renderWindow;
|
||
|
private: Ogre::Font *font;
|
||
|
private: Ogre::MaterialPtr material;
|
||
|
private: Ogre::MaterialPtr backgroundMaterial;
|
||
|
|
||
|
private: float viewportAspectCoef;
|
||
|
private: float spaceWidth;
|
||
|
private: bool updateColors;
|
||
|
private: VertAlign vertAlign;
|
||
|
private: HorizAlign horizAlign;
|
||
|
private: bool onTop;
|
||
|
private: float baseline;
|
||
|
|
||
|
private: bool dirty;
|
||
|
|
||
|
private: boost::recursive_mutex *mutex;
|
||
|
private: Ogre::SimpleRenderable *renderable;
|
||
|
};
|
||
|
/// \}
|
||
|
}
|
||
|
}
|
||
|
#endif
|