|
43 | 43 | #include <rviz/properties/property_tree_model.h> |
44 | 44 | #include <rviz/properties/string_property.h> |
45 | 45 | #include <rviz/properties/float_property.h> |
| 46 | +#include <rviz/properties/vector_property.h> |
| 47 | + |
| 48 | +#include <geometry_msgs/Vector3Stamped.h> |
46 | 49 |
|
47 | 50 | namespace mtc = ::moveit::task_constructor; |
48 | 51 |
|
49 | 52 | namespace moveit_rviz_plugin { |
50 | 53 |
|
51 | | -static rviz::StringProperty* stringFactory(const QString& name, mtc::Property& mtc_prop, |
52 | | - const planning_scene::PlanningScene* /*unused*/, |
53 | | - rviz::DisplayContext* /*unused*/) { |
54 | | - std::string value; |
55 | | - if (!mtc_prop.value().empty()) |
56 | | - value = boost::any_cast<std::string>(mtc_prop.value()); |
57 | | - rviz::StringProperty* rviz_prop = |
| 54 | +namespace { |
| 55 | + |
| 56 | +rviz::Property* stringFactory(const QString& name, mtc::Property& mtc_prop, |
| 57 | + const planning_scene::PlanningScene* /*scene*/, rviz::DisplayContext* /*context*/) { |
| 58 | + std::string value{ mtc_prop.defined() ? mtc_prop.value<std::string>() : "" }; |
| 59 | + auto* rviz_prop = |
58 | 60 | new rviz::StringProperty(name, QString::fromStdString(value), QString::fromStdString(mtc_prop.description())); |
59 | 61 | QObject::connect(rviz_prop, &rviz::StringProperty::changed, |
60 | 62 | [rviz_prop, &mtc_prop]() { mtc_prop.setValue(rviz_prop->getStdString()); }); |
61 | 63 | return rviz_prop; |
62 | 64 | } |
| 65 | + |
63 | 66 | template <typename T> |
64 | | -static rviz::FloatProperty* floatFactory(const QString& name, mtc::Property& mtc_prop, |
65 | | - const planning_scene::PlanningScene* /*unused*/, |
66 | | - rviz::DisplayContext* /*unused*/) { |
67 | | - T value = !mtc_prop.value().empty() ? boost::any_cast<T>(mtc_prop.value()) : T(); |
| 67 | +static rviz::Property* floatFactory(const QString& name, mtc::Property& mtc_prop, |
| 68 | + const planning_scene::PlanningScene* /*unused*/, rviz::DisplayContext* /*unused*/) { |
| 69 | + T value{ mtc_prop.defined() ? mtc_prop.value<T>() : static_cast<T>(0.0) }; |
68 | 70 | rviz::FloatProperty* rviz_prop = |
69 | 71 | new rviz::FloatProperty(name, value, QString::fromStdString(mtc_prop.description())); |
70 | 72 | QObject::connect(rviz_prop, &rviz::FloatProperty::changed, |
71 | 73 | [rviz_prop, &mtc_prop]() { mtc_prop.setValue(T(rviz_prop->getFloat())); }); |
72 | 74 | return rviz_prop; |
73 | 75 | } |
74 | 76 |
|
| 77 | +rviz::Property* vector3Factory(const QString& name, mtc::Property& mtc_prop, |
| 78 | + const planning_scene::PlanningScene* /*scene*/, rviz::DisplayContext* /*context*/) { |
| 79 | + auto value{ mtc_prop.defined() ? mtc_prop.value<geometry_msgs::Vector3Stamped>() : geometry_msgs::Vector3Stamped{} }; |
| 80 | + |
| 81 | + auto* rviz_prop = |
| 82 | + new rviz::VectorProperty(name, Ogre::Vector3::ZERO, QString::fromStdString(mtc_prop.description())); |
| 83 | + rviz_prop->setVector(Ogre::Vector3{ static_cast<Ogre::Real>(value.vector.x), static_cast<Ogre::Real>(value.vector.y), |
| 84 | + static_cast<Ogre::Real>(value.vector.z) }); |
| 85 | + |
| 86 | + return rviz_prop; |
| 87 | +} |
| 88 | + |
| 89 | +} // namespace |
| 90 | + |
75 | 91 | PropertyFactory::PropertyFactory() { |
76 | | - // register some standard types |
| 92 | + // register standard types |
| 93 | + registerType<std::string>(&stringFactory); |
77 | 94 | registerType<float>(&floatFactory<float>); |
78 | 95 | registerType<double>(&floatFactory<double>); |
79 | | - registerType<std::string>(&stringFactory); |
| 96 | + registerType<geometry_msgs::Vector3Stamped>(&vector3Factory); |
80 | 97 | } |
81 | 98 |
|
82 | 99 | PropertyFactory& PropertyFactory::instance() { |
|
0 commit comments