78 :
public rviz_common::MessageFilterDisplay<navmap_ros_interfaces::msg::NavMap>
82 using MFDClass = rviz_common::MessageFilterDisplay<navmap_ros_interfaces::msg::NavMap>;
83 using NavMapMsg = navmap_ros_interfaces::msg::NavMap;
84 using NavMapLayerMsg = navmap_ros_interfaces::msg::NavMapLayer;
91 void reset()
override;
99 void updateLayerUpdateTopic();
100 void onLayerSelectionChanged();
101 void onDrawNormalsChanged();
102 void onAlphaChanged();
103 void onNormalScaleChanged();
104 void onColorSchemeChanged();
108 void subscribeToLayerTopic();
109 void unsubscribeToLayerTopic();
110 void incomingLayer(
const NavMapLayerMsg::ConstSharedPtr & msg);
113 void rebuildLayerIndex_();
114 std::string currentSelectedLayer_()
const;
115 void repopulateLayerEnum_();
116 void applyOrCacheLayer_(
const NavMapLayerMsg & layer);
119 void updateGeometry_();
120 void updateNormals_();
121 void updateColorSchemeOptions_();
124 void ensureMeshBuilt_();
126 void updateColorsOnly_();
130 rviz_common::properties::EnumProperty * layer_property_{
nullptr};
131 rviz_common::properties::RosTopicProperty * layer_topic_property_{
nullptr};
132 rviz_common::properties::QosProfileProperty * layer_profile_property_{
nullptr};
133 rviz_common::properties::EnumProperty * color_scheme_property_{
nullptr};
134 rviz_common::properties::BoolProperty * draw_normals_property_{
nullptr};
135 rviz_common::properties::FloatProperty * normal_scale_property_{
nullptr};
136 rviz_common::properties::FloatProperty * alpha_property_{
nullptr};
137 rviz_common::properties::StringProperty * info_property_{
nullptr};
140 rclcpp::QoS layer_profile_{rclcpp::QoS(5)};
141 rclcpp::Subscription<NavMapLayerMsg>::SharedPtr layer_subscription_;
142 rclcpp::Time layer_subscription_start_time_;
145 std::uint64_t navmap_msg_count_{0};
146 std::uint64_t layer_update_count_{0};
147 rclcpp::Time last_navmap_stamp_;
148 rclcpp::Time last_layer_stamp_;
151 NavMapMsg::SharedPtr last_msg_;
152 std::unordered_map<std::string, const NavMapLayerMsg *> layers_by_name_;
155 Ogre::SceneNode * root_node_{
nullptr};
156 Ogre::ManualObject * normals_obj_{
nullptr};
159 Ogre::Entity * entity_{
nullptr};
160 Ogre::SharedPtr<Ogre::Mesh> mesh_;
161 Ogre::HardwareVertexBufferSharedPtr colour_vbuf_;
162 unsigned short colour_vbuf_source_{0};
163 bool mesh_built_{
false};