1 #include <boost/make_shared.hpp>
3 #include <OGRE/OgreSceneNode.h>
4 #include <OGRE/OgreSceneManager.h>
6 #include <rviz/visualization_manager.h>
7 #include <rviz/properties/color_property.h>
8 #include <rviz/properties/float_property.h>
9 #include <rviz/properties/int_property.h>
10 #include <rviz/frame_manager.h>
13 #include "../visuals/entity_visual.h"
20 float COLORS[27][3] = { { 0.6, 0.6, 0.6},
54 for (
const char& c: str)
55 hash = ((hash << 5) + hash) + c;
78 if (!item.
empty() && item[0] != delimeter)
81 return splitted_strings;
139 MFDClass::onInitialize();
154 Ogre::Quaternion frame_orientation;
155 Ogre::Vector3 frame_position;
156 if (!context_->getFrameManager()->getTransform(
"map", ros::Time::now(), frame_position, frame_orientation))
158 ROS_DEBUG(
"Error transforming from frame 'map' to frame '%s'", qPrintable(fixed_frame_));
163 for (
const ed_gui_server_msgs::EntityInfo& info: msg->entities)
165 if (info.id.size() >= 5 && (info.id.substr(info.id.size() - 5) ==
"floor" || info.id.substr(0, 5) ==
"floor"))
180 visuals_[info.id] = boost::make_shared<EntityVisual>(context_->getSceneManager(), scene_node_);
182 boost::shared_ptr<EntityVisual> visual =
visuals_[info.id];
185 Ogre::Vector3 position;
186 Ogre::Quaternion orientation;
187 position.x = info.pose.position.x;
188 position.y = info.pose.position.y;
189 position.z = info.pose.position.z;
191 orientation.x = info.pose.orientation.x;
192 orientation.y = info.pose.orientation.y;
193 orientation.z = info.pose.orientation.z;
194 orientation.w = info.pose.orientation.w;
196 visual->setFramePosition(frame_position + position);
197 visual->setFrameOrientation(frame_orientation * orientation);
199 bool visual_needs_update = info.visual_revision > visual->visualRevision();
200 bool volumes_needs_update = info.volumes_revision > visual->volumesRevision();
201 if (visual_needs_update || volumes_needs_update)
207 else if (info.visual_revision == 0)
208 visual->setConvexHull(info.polygon);
212 if (info.color.a != 0)
214 r =
static_cast<float>(info.color.r) / 255;
215 g =
static_cast<float>(info.color.g) / 255;
216 b =
static_cast<float>(info.color.b) / 255;
220 int i_color =
djb2(info.id) % 27;
232 label = info.id.
substr(0, 6);
234 if (!info.type.empty())
235 label +=
" (" + info.type +
")";
237 visual->setLabel(label);
266 visuals_[id]->setEntityMeshAndVolumes(geom);
271 ROS_ERROR(
"Could not query for meshes; does the service '%s' exist?",
service_name_property_->getStdString().c_str());
283 #include <pluginlib/class_list_macros.h>