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 "text_view_facing_marker.h"
00031
00032 #include "rviz/visualization_manager.h"
00033 #include "rviz/selection/selection_manager.h"
00034 #include "marker_selection_handler.h"
00035
00036 #include <ogre_tools/movable_text.h>
00037
00038 #include <OGRE/OgreSceneNode.h>
00039 #include <OGRE/OgreSceneManager.h>
00040
00041 namespace rviz
00042 {
00043
00044 TextViewFacingMarker::TextViewFacingMarker(MarkerDisplay* owner, VisualizationManager* manager, Ogre::SceneNode* parent_node)
00045 : MarkerBase(owner, manager, parent_node)
00046 , text_(0)
00047 {
00048 }
00049
00050 TextViewFacingMarker::~TextViewFacingMarker()
00051 {
00052 delete text_;
00053 }
00054
00055 void TextViewFacingMarker::onNewMessage(const MarkerConstPtr& old_message, const MarkerConstPtr& new_message)
00056 {
00057 ROS_ASSERT(new_message->type == visualization_msgs::Marker::TEXT_VIEW_FACING);
00058
00059 if (!text_)
00060 {
00061 text_ = new ogre_tools::MovableText(new_message->text);
00062 text_->setTextAlignment(ogre_tools::MovableText::H_CENTER, ogre_tools::MovableText::V_CENTER);
00063 scene_node_->attachObject(text_);
00064
00065 vis_manager_->getSelectionManager()->removeObject(coll_);
00066 coll_ = vis_manager_->getSelectionManager()->createHandle();
00067 vis_manager_->getSelectionManager()->addPickTechnique( coll_, text_->getMaterial() );
00068 SelectionHandlerPtr handler( new MarkerSelectionHandler(this, MarkerID(new_message->ns, new_message->id)) );
00069 vis_manager_->getSelectionManager()->addObject( coll_, handler );
00070 }
00071
00072 Ogre::Vector3 pos, scale;
00073 Ogre::Quaternion orient;
00074 transform(new_message, pos, orient, scale);
00075
00076 setPosition(pos);
00077 text_->setCharacterHeight(new_message->scale.z);
00078 text_->setColor(Ogre::ColourValue(new_message->color.r, new_message->color.g, new_message->color.b, new_message->color.a));
00079 text_->setCaption(new_message->text);
00080 }
00081
00082 S_MaterialPtr TextViewFacingMarker::getMaterials()
00083 {
00084 S_MaterialPtr materials;
00085 if ( text_->getMaterial().get() )
00086 {
00087 materials.insert( text_->getMaterial() );
00088 }
00089 return materials;
00090 }
00091
00092 }
00093