8 #include <OgreSceneManager.h>
9 #include <OgreSceneNode.h>
10 #include <tf2_msgs/TF2Error.h>
17 msg_.reset(
new visualization_msgs::Marker(marker));
19 msg_->frame_locked =
false;
26 for (
const auto& marker : markers) {
28 ROS_WARN_ONCE(
"unknown frame '%s' for solution marker in namespace '%s'", marker.header.frame_id.c_str(),
42 if (pair.second.ns_node_)
43 pair.second.ns_node_->getCreator()->destroySceneNode(pair.second.ns_node_);
47 void setVisibility(Ogre::SceneNode* node, Ogre::SceneNode* parent,
bool visible) {
48 if (visible && node->getParent() != parent)
49 parent->addChild(node);
50 else if (!visible && node->getParent())
51 node->getParent()->removeChild(node);
58 setVisibility(it->second.ns_node_, parent_scene_node, visible);
67 Ogre::Quaternion
quat;
68 Ogre::Vector3 pos = Ogre::Vector3::ZERO;
72 geometry_msgs::TransformStamped tm;
74 auto q = tm.transform.rotation;
75 auto p = tm.transform.translation;
76 quat = Ogre::Quaternion(
q.w, -
q.x, -
q.y, -
q.z);
77 pos = Ogre::Vector3(p.x, p.y, p.z);
89 if (ns_it->second.ns_node_ ==
nullptr)
90 ns_it->second.ns_node_ = parent_scene_node->getCreator()->createSceneNode();
91 Ogre::SceneNode* node = ns_it->second.ns_node_;
94 auto frame_it = ns_it->second.frames_.insert(std::make_pair(
data.msg_->header.frame_id,
nullptr)).first;
95 if (frame_it->second ==
nullptr)
96 frame_it->second = node->createChildSceneNode();
97 node = frame_it->second;
108 const std::string msg_frame =
data.msg_->header.frame_id;
110 data.marker_->setMessage(
data.msg_);
111 data.msg_->header.frame_id = msg_frame;
114 data.marker_->setOrientation(
quat *
data.marker_->getOrientation());
115 data.marker_->setPosition(
quat *
data.marker_->getPosition() + pos);
125 const visualization_msgs::Marker& marker = *
data.msg_;
130 Eigen::Affine3d pose;
136 ROS_WARN_ONCE_NAMED(
"MarkerVisualization",
"unknown frame '%s' for solution marker in namespace '%s'",
137 marker.header.frame_id.c_str(), marker.ns.c_str());
143 auto frame_it = ns_it->second.frames_.find(marker.header.frame_id);
144 Q_ASSERT(frame_it != ns_it->second.frames_.end());
146 const Eigen::Quaterniond
q{ pose.linear() };
147 const Eigen::Vector3d& p = pose.translation();
148 frame_it->second->setOrientation(Ogre::Quaternion(
q.w(),
q.x(),
q.y(),
q.z()));
149 frame_it->second->setPosition(Ogre::Vector3(p.x(), p.y(), p.z()));
159 :
rviz::BoolProperty(
name, true,
"Enable/disable markers", parent) {
161 new rviz::BoolProperty(
"All at once?",
false,
"Show all markers of multiple subsolutions at once?",
this,
196 for (
const auto& pair : markers->namespaces()) {
197 QString ns = QString::fromStdString(pair.first);
199 auto ns_it =
namespaces_.insert(std::make_pair(ns,
nullptr)).first;
200 if (ns_it->second ==
nullptr) {
201 ns_it->second =
new rviz::BoolProperty(ns,
true,
"Show/hide markers of this namespace",
this,
204 Q_ASSERT(pair.second.ns_node_);
206 if (ns_it->second->getBool())
214 if (!markers->created())
217 markers->update(scene, robot_state);
231 const QString& ns = ns_property->
getName();
232 bool visible = ns_property->
getBool();