00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <OGRE/OgreSceneNode.h>
00031 #include <OGRE/OgreSceneManager.h>
00032
00033 #include <ros/assert.h>
00034
00035 #include "rviz/default_plugin/markers/marker_selection_handler.h"
00036 #include "rviz/display_context.h"
00037 #include "rviz/ogre_helpers/movable_text.h"
00038 #include "rviz/selection/selection_manager.h"
00039
00040 #include "rviz/default_plugin/markers/text_view_facing_marker.h"
00041
00042 namespace rviz
00043 {
00044
00045 TextViewFacingMarker::TextViewFacingMarker(MarkerDisplay* owner, DisplayContext* context, Ogre::SceneNode* parent_node)
00046 : MarkerBase(owner, context, parent_node)
00047 , text_(0)
00048 {
00049 }
00050
00051 TextViewFacingMarker::~TextViewFacingMarker()
00052 {
00053 delete text_;
00054 }
00055
00056 void TextViewFacingMarker::onNewMessage(const MarkerConstPtr& old_message, const MarkerConstPtr& new_message)
00057 {
00058 ROS_ASSERT(new_message->type == visualization_msgs::Marker::TEXT_VIEW_FACING);
00059
00060 if (!text_)
00061 {
00062 text_ = new MovableText(new_message->text);
00063 text_->setTextAlignment(MovableText::H_CENTER, MovableText::V_CENTER);
00064 scene_node_->attachObject(text_);
00065
00066 context_->getSelectionManager()->removeObject(coll_);
00067 coll_ = context_->getSelectionManager()->createHandle();
00068 context_->getSelectionManager()->addPickTechnique( coll_, text_->getMaterial() );
00069 SelectionHandlerPtr handler( new MarkerSelectionHandler(this, MarkerID(new_message->ns, new_message->id)) );
00070 context_->getSelectionManager()->addObject( coll_, handler );
00071 }
00072
00073 Ogre::Vector3 pos, scale;
00074 Ogre::Quaternion orient;
00075 transform(new_message, pos, orient, scale);
00076
00077 setPosition(pos);
00078 text_->setCharacterHeight(new_message->scale.z);
00079 text_->setColor(Ogre::ColourValue(new_message->color.r, new_message->color.g, new_message->color.b, new_message->color.a));
00080 text_->setCaption(new_message->text);
00081 }
00082
00083 S_MaterialPtr TextViewFacingMarker::getMaterials()
00084 {
00085 S_MaterialPtr materials;
00086 if ( text_->getMaterial().get() )
00087 {
00088 materials.insert( text_->getMaterial() );
00089 }
00090 return materials;
00091 }
00092
00093 }
00094