41
41
#include < OgreTechnique.h>
42
42
#include < OgreTextureManager.h>
43
43
#include < OgreViewport.h>
44
+ #include < QString>
44
45
45
46
#include < algorithm>
46
47
#include < memory>
@@ -115,40 +116,14 @@ ImageDisplay::ImageDisplay(std::unique_ptr<ROSImageTextureIface> texture)
115
116
void ImageDisplay::onInitialize ()
116
117
{
117
118
ITDClass::onInitialize ();
118
-
119
119
updateNormalizeOptions ();
120
120
setupScreenRectangle ();
121
-
122
121
setupRenderPanel ();
123
122
124
123
render_panel_->getRenderWindow ()->setupSceneAfterInit (
125
124
[this ](Ogre::SceneNode * scene_node) {scene_node->attachObject (screen_rect_.get ());});
126
- }
127
-
128
- ImageDisplay::~ImageDisplay () = default ;
129
-
130
- void ImageDisplay::onEnable () {subscribe ();}
131
-
132
- void ImageDisplay::onDisable ()
133
- {
134
- unsubscribe ();
135
- clear ();
136
- }
137
-
138
- // Need a signature with pass by reference for image_transport_.subscribe
139
- void ImageDisplay::incomingMessage (const sensor_msgs::msg::Image::ConstSharedPtr & img_msg)
140
- {
141
- ImageTransportDisplay<sensor_msgs::msg::Image>::incomingMessage (img_msg);
142
- }
143
125
144
- void ImageDisplay::updateTopic ()
145
- {
146
- if (!isEnabled ()) {
147
- return ;
148
- }
149
- transport_override_property_->setStdString (" " );
150
-
151
- // Populate topic message types based on installed image_transport plugins
126
+ // Populate message types and transport overrides based on installed image_transport plugins
152
127
image_transport::ImageTransport image_transport_ (rviz_ros_node_.lock ()->get_raw_node ());
153
128
std::vector<std::string> loadable_transports = image_transport_.getLoadableTransports ();
154
129
std::vector<QString> message_types;
@@ -163,7 +138,7 @@ void ImageDisplay::updateTopic()
163
138
std::string transports_str = " " ;
164
139
rviz_common::properties::StatusProperty::Level transports_status_level =
165
140
rviz_common::properties::StatusProperty::Ok;
166
- // Populate topic message types and transport override options
141
+ transport_override_property_-> clearOptions ();
167
142
transport_override_property_->addOptionStd (" " );
168
143
for (std::string & transport : loadable_transports) {
169
144
transport = transport.substr (transport.find_last_of (' /' ) + 1 );
@@ -176,14 +151,29 @@ void ImageDisplay::updateTopic()
176
151
transports_str += " (unknown: " + transport + " ), " ;
177
152
}
178
153
}
154
+ // TODO(mjforan) setStatus doesn't work in onInitialize or updateTopic
179
155
setStatusStd (transports_status_level, " Image Transports" , transports_str);
180
156
// Remove duplicates
181
157
message_types.erase (std::unique (message_types.begin (), message_types.end ()), message_types.end ());
182
158
// Update the message types to allow in the topic_property_
183
159
((rviz_common::properties::RosTopicMultiProperty *)topic_property_)
184
160
->setMessageTypes (message_types);
161
+ }
185
162
186
- rviz_default_plugins::displays::ImageTransportDisplay<sensor_msgs::msg::Image>::updateTopic ();
163
+ ImageDisplay::~ImageDisplay () = default ;
164
+
165
+ void ImageDisplay::onEnable () {subscribe ();}
166
+
167
+ void ImageDisplay::onDisable ()
168
+ {
169
+ unsubscribe ();
170
+ clear ();
171
+ }
172
+
173
+ // Need a signature with pass by reference for image_transport_.subscribe
174
+ void ImageDisplay::incomingMessage (const sensor_msgs::msg::Image::ConstSharedPtr & img_msg)
175
+ {
176
+ ImageTransportDisplay<sensor_msgs::msg::Image>::incomingMessage (img_msg);
187
177
}
188
178
189
179
void ImageDisplay::subscribe ()
0 commit comments