//--------------------------------------------------------------------------- // // Project: OpenWalnut ( http://www.openwalnut.org ) // // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS // For more information see http://www.openwalnut.org/copying // // This file is part of OpenWalnut. // // OpenWalnut is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // OpenWalnut is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with OpenWalnut. If not, see . // //--------------------------------------------------------------------------- #ifndef WMHUD_H #define WMHUD_H #include #include #include #include #include #include "../../kernel/WModule.h" #include "../../graphicsEngine/WGEGroupNode.h" /** * This module implements several onscreen status displays * \ingroup modules */ class WMHud : public WModule, public osg::Referenced { public: /** * standard constructor */ WMHud(); /** * destructor */ virtual ~WMHud(); /** * \par Description * Gives back the name of this module. * \return the module's name. */ virtual const std::string getName() const; /** * \par Description * Gives back a description of this module. * \return description to module. */ virtual const std::string getDescription() const; /** * Sets pick text member vairable * * \param text the pick text */ void updatePickText( std::string text ); protected: /** * \par Description * Entry point after loading the module. Runs in separate thread. */ virtual void moduleMain(); /** * Initialize the connectors this module is using. */ virtual void connectors(); /** * Initialize the properties for this module. */ virtual void properties(); /** * Due to the prototype design pattern used to build modules, this method returns a new instance of this method. NOTE: it * should never be initialized or modified in some other way. A simple new instance is required. * * \return the prototype used to create every module in OpenWalnut. */ virtual boost::shared_ptr< WModule > factory() const; private: boost::shared_mutex m_updateLock; //!< Lock to prevent concurrent threads trying to update the osg node /** * Projection node for defining view frustrum for HUD */ osg::ref_ptr m_rootNode; /** * Geometry group for all hud related things */ osg::ref_ptr< WGEGroupNode > m_HUDs; /** * Text instance that will show up in the HUD */ osg::ref_ptr< osgText::Text > m_osgPickText; /** * string to store the pick result from the picking method */ std::string m_pickText; /** * init method */ void init(); /** * update method */ void update(); /** * Gets signaled from the properties object when something was changed. Now, only m_active is used. This method therefore simply * activates/deactivates the HUD. */ void activate(); /** * Node callback to handle updates properly */ class HUDNodeCallback : public osg::NodeCallback { public: // NOLINT /** * operator () * * \param node the osg node * \param nv the node visitor */ virtual void operator()( osg::Node* node, osg::NodeVisitor* nv ) { osg::ref_ptr< WMHud > module = static_cast< WMHud* > ( node->getUserData() ); if ( module ) { module->update(); } traverse( node, nv ); } }; }; #endif // WMHUD_H