00001 /* 00002 * Copyright (c) 2008, Willow Garage, Inc. 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * * Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * * Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * * Neither the name of the Willow Garage, Inc. nor the names of its 00014 * contributors may be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00018 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00021 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00022 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00023 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00026 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00027 * POSSIBILITY OF SUCH DAMAGE. 00028 */ 00029 00030 // Adapted from: http://www.ogre3d.org/wiki/index.php/MovableText 00031 // Original authors: 00032 /* 00033 * File: MovableText.h 00034 * 00035 * description: This create create a billboarding object that display a text. 00036 * 00037 * @author 2003 by cTh see gavocanov@rambler.ru 00038 * @update 2006 by barraq see nospam@barraquand.com 00039 */ 00040 00041 #ifndef OGRE_TOOLS_MOVABLE_TEXT_H 00042 #define OGRE_TOOLS_MOVABLE_TEXT_H 00043 00044 #include <OGRE/OgreMovableObject.h> 00045 #include <OGRE/OgreRenderable.h> 00046 #include <OGRE/OgreVector3.h> 00047 #include <OGRE/OgreQuaternion.h> 00048 00049 namespace Ogre 00050 { 00051 class RenderQueue; 00052 class Camera; 00053 } 00054 00055 namespace ogre_tools 00056 { 00057 00058 class MovableText : public Ogre::MovableObject, public Ogre::Renderable 00059 { 00060 /******************************** MovableText data ****************************/ 00061 public: 00062 enum HorizontalAlignment 00063 { 00064 H_LEFT, H_CENTER 00065 }; 00066 enum VerticalAlignment 00067 { 00068 V_BELOW, V_ABOVE, V_CENTER 00069 }; 00070 00071 protected: 00072 Ogre::String mFontName; 00073 Ogre::String mType; 00074 Ogre::String mName; 00075 Ogre::String mCaption; 00076 HorizontalAlignment mHorizontalAlignment; 00077 VerticalAlignment mVerticalAlignment; 00078 00079 Ogre::ColourValue mColor; 00080 Ogre::RenderOperation mRenderOp; 00081 Ogre::AxisAlignedBox mAABB; 00082 Ogre::LightList mLList; 00083 00084 Ogre::Real mCharHeight; 00085 Ogre::Real mLineSpacing; 00086 Ogre::Real mSpaceWidth; 00087 00088 bool mNeedUpdate; 00089 bool mUpdateColors; 00090 bool mOnTop; 00091 00092 Ogre::Real mTimeUntilNextToggle; 00093 Ogre::Real mRadius; 00094 00095 Ogre::Vector3 mGlobalTranslation; 00096 Ogre::Vector3 mLocalTranslation; 00097 00098 Ogre::Camera *mpCam; 00099 Ogre::RenderWindow *mpWin; 00100 Ogre::Font *mpFont; 00101 Ogre::MaterialPtr mpMaterial; 00102 Ogre::MaterialPtr mpBackgroundMaterial; 00103 00104 /******************************** public methods ******************************/ 00105 public: 00106 MovableText(const Ogre::String &caption, const Ogre::String &fontName = "Arial", Ogre::Real charHeight = 1.0, 00107 const Ogre::ColourValue &color = Ogre::ColourValue::White); 00108 virtual ~MovableText(); 00109 00110 #if (OGRE_VERSION_MAJOR >= 1 && OGRE_VERSION_MINOR >= 6) 00111 virtual void visitRenderables(Ogre::Renderable::Visitor* visitor, bool debugRenderables = false); 00112 #endif 00113 00114 // Set settings 00115 void setFontName(const Ogre::String &fontName); 00116 void setCaption(const Ogre::String &caption); 00117 void setColor(const Ogre::ColourValue &color); 00118 void setCharacterHeight(Ogre::Real height); 00119 void setLineSpacing(Ogre::Real height); 00120 void setSpaceWidth(Ogre::Real width); 00121 void setTextAlignment(const HorizontalAlignment& horizontalAlignment, 00122 const VerticalAlignment& verticalAlignment); 00123 void setGlobalTranslation(Ogre::Vector3 trans); 00124 void setLocalTranslation(Ogre::Vector3 trans); 00125 void showOnTop(bool show = true); 00126 00127 // Get settings 00128 const Ogre::String &getFontName() const 00129 { 00130 return mFontName; 00131 } 00132 const Ogre::String &getCaption() const 00133 { 00134 return mCaption; 00135 } 00136 const Ogre::ColourValue &getColor() const 00137 { 00138 return mColor; 00139 } 00140 00141 Ogre::Real getCharacterHeight() const 00142 { 00143 return mCharHeight; 00144 } 00145 Ogre::Real getSpaceWidth() const 00146 { 00147 return mSpaceWidth; 00148 } 00149 Ogre::Vector3 getGlobalTranslation() const 00150 { 00151 return mGlobalTranslation; 00152 } 00153 Ogre::Vector3 getLocalTranslation() const 00154 { 00155 return mLocalTranslation; 00156 } 00157 bool getShowOnTop() const 00158 { 00159 return mOnTop; 00160 } 00161 Ogre::AxisAlignedBox GetAABB(void) 00162 { 00163 return mAABB; 00164 } 00165 00166 /******************************** protected methods and overload **************/ 00167 protected: 00168 00169 // from MovableText, create the object 00170 void _setupGeometry(); 00171 void _updateColors(); 00172 00173 // from Ogre::MovableObject 00174 void getWorldTransforms(Ogre::Matrix4 *xform) const; 00175 Ogre::Real getBoundingRadius(void) const 00176 { 00177 return mRadius; 00178 } 00179 ; 00180 Ogre::Real getSquaredViewDepth(const Ogre::Camera *cam) const 00181 { 00182 return 0; 00183 } 00184 ; 00185 const Ogre::Quaternion &getWorldOrientation(void) const; 00186 const Ogre::Vector3 &getWorldPosition(void) const; 00187 const Ogre::AxisAlignedBox &getBoundingBox(void) const 00188 { 00189 return mAABB; 00190 } 00191 ; 00192 const Ogre::String &getName(void) const 00193 { 00194 return mName; 00195 } 00196 ; 00197 const Ogre::String &getMovableType(void) const 00198 { 00199 static Ogre::String movType = "MovableText"; 00200 return movType; 00201 } 00202 ; 00203 00204 void _notifyCurrentCamera(Ogre::Camera *cam); 00205 void _updateRenderQueue(Ogre::RenderQueue* queue); 00206 00207 // from renderable 00208 void getRenderOperation(Ogre::RenderOperation &op); 00209 const Ogre::MaterialPtr &getMaterial(void) const 00210 { 00211 assert(!mpMaterial.isNull()); 00212 return mpMaterial; 00213 } 00214 ; 00215 const Ogre::LightList &getLights(void) const 00216 { 00217 return mLList; 00218 } 00219 ; 00220 }; 00221 00222 } 00223 00224 #endif