bounding_box_display.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2013, Ryohei Ueda and JSK Lab
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of the JSK Lab nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
36 #include "bounding_box_display.h"
37 #include <jsk_topic_tools/color_utils.h>
38 
39 namespace jsk_rviz_plugins
40 {
41 
43  {
45  "coloring", "Flat color",
46  "coloring method",
47  this, SLOT(updateColoring()));
48  coloring_property_->addOption("Flat color", 0);
49  coloring_property_->addOption("Label", 1);
50  coloring_property_->addOption("Value", 2);
51 
53  "alpha_method", "flat", "alpha method",
54  this, SLOT(updateAlphaMethod()));
56  alpha_method_property_->addOption("value", 1);
57 
59  "color", QColor(25, 255, 0),
60  "color to draw the bounding boxes",
61  this, SLOT(updateColor()));
63  "alpha", 0.8,
64  "alpha value to draw the bounding boxes",
65  this, SLOT(updateAlpha()));
67  "alpha min", 0.0,
68  "alpha value corresponding to value = 0",
69  this, SLOT(updateAlphaMin()));
71  "alpha max", 1.0,
72  "alpha value corresponding to value = 1",
73  this, SLOT(updateAlphaMax()));
75  "only edge", false,
76  "show only the edges of the boxes",
77  this, SLOT(updateOnlyEdge()));
79  "line width", 0.005,
80  "line width of the edges",
81  this, SLOT(updateLineWidth()));
83  "show coords", false,
84  "show coordinate of bounding box",
85  this, SLOT(updateShowCoords()));
87  "value threshold", 0.0,
88  "filter all boxes with value < threshold",
89  this, SLOT(updateValueThreshold()));
90  }
91 
93  {
94  delete color_property_;
95  delete alpha_property_;
96  delete alpha_min_property_;
97  delete alpha_max_property_;
98  delete only_edge_property_;
99  delete coloring_property_;
100  delete alpha_method_property_;
101  delete show_coords_property_;
103  }
104 
106  {
108  scene_node_ = scene_manager_->getRootSceneNode()->createChildSceneNode();
109 
110  updateColor();
111  updateAlpha();
112  updateAlphaMin();
113  updateAlphaMax();
114  updateOnlyEdge();
115  updateColoring();
117  updateLineWidth();
120  }
121 
123  {
125  if (latest_msg_) {
127  }
128  }
129 
131  {
133  if (latest_msg_) {
135  }
136  }
137 
139  {
141  if (latest_msg_) {
143  }
144  }
145 
147  {
149  {
150  ROS_WARN("alpha_min must be <= alpha_max");
152  return;
153  }
155  if (latest_msg_) {
157  }
158  }
159 
161  {
163  {
164  ROS_WARN("alpha_min must be <= alpha_max");
166  return;
167  }
169  if (latest_msg_) {
171  }
172  }
173 
175  {
177  if (only_edge_) {
179  }
180  else {
182  }
183  if (latest_msg_) {
185  }
186  }
187 
189  {
190  if (coloring_property_->getOptionInt() == 0) {
191  coloring_method_ = "flat";
193  }
194  else if (coloring_property_->getOptionInt() == 1) {
195  coloring_method_ = "label";
197  }
198  else if (coloring_property_->getOptionInt() == 2) {
199  coloring_method_ = "value";
201  }
202 
203  if (latest_msg_) {
205  }
206  }
207 
209  {
210  if (alpha_method_property_->getOptionInt() == 0) {
211  alpha_method_ = "flat";
215  }
216  else if (alpha_method_property_->getOptionInt() == 1) {
217  alpha_method_ = "value";
221  }
222 
223  if (latest_msg_) {
225  }
226  }
227 
229  {
231  // Immediately apply show_coords attribute
232  if (!show_coords_) {
233  hideCoords();
234  }
235  else if (latest_msg_) {
237  }
238  }
239 
241  {
242  MFDClass::reset();
243  shapes_.clear();
244  edges_.clear();
245  coords_nodes_.clear();
246  coords_objects_.clear();
247  latest_msg_.reset();
248  }
249 
251  const jsk_recognition_msgs::BoundingBox::ConstPtr& msg)
252  {
253  // Store latest message
254  latest_msg_ = msg;
255 
256  // Convert bbox to bbox_array to show it
257  jsk_recognition_msgs::BoundingBoxArrayPtr bbox_array_msg(new jsk_recognition_msgs::BoundingBoxArray);
258  bbox_array_msg->header = msg->header;
259  std::vector<jsk_recognition_msgs::BoundingBox> boxes;
260  boxes.push_back(*msg);
261  bbox_array_msg->boxes = boxes;
262 
263  if (!only_edge_) {
264  showBoxes(bbox_array_msg);
265  }
266  else {
267  showEdges(bbox_array_msg);
268  }
269 
270  if (show_coords_) {
271  showCoords(bbox_array_msg);
272  }
273  else {
274  hideCoords();
275  }
276  }
277 
279  {
281  {
282  ROS_WARN("value threshold must be in [0,1]");
284  return;
285  }
287  if (latest_msg_) {
289  }
290  }
291 
292 } // namespace jsk_rviz_plugins
293 
rviz::BoolProperty::getBool
virtual bool getBool() const
rviz::EnumProperty::getOptionInt
virtual int getOptionInt()
jsk_rviz_plugins::BoundingBoxDisplay::updateShowCoords
void updateShowCoords()
Definition: bounding_box_display.cpp:260
rviz::ColorProperty::getColor
virtual QColor getColor() const
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::alpha_method_
std::string alpha_method_
Definition: bounding_box_display_common.h:143
rviz::MessageFilterDisplay< MessageType >::reset
void reset() override
msg
msg
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::showCoords
void showCoords(const jsk_recognition_msgs::BoundingBoxArray::ConstPtr &msg)
Definition: bounding_box_display_common.h:443
jsk_rviz_plugins::BoundingBoxDisplay::processMessage
void processMessage(const jsk_recognition_msgs::BoundingBox::ConstPtr &msg)
Definition: bounding_box_display.cpp:282
jsk_rviz_plugins::BoundingBoxDisplay::reset
virtual void reset()
Definition: bounding_box_display.cpp:272
jsk_rviz_plugins::BoundingBoxDisplay::updateAlpha
void updateAlpha()
Definition: bounding_box_display.cpp:170
rviz::Property::show
void show()
rviz::BoolProperty
jsk_rviz_plugins::BoundingBoxDisplay::line_width_property_
rviz::FloatProperty * line_width_property_
Definition: bounding_box_display.h:140
jsk_rviz_plugins::BoundingBoxDisplay::latest_msg_
jsk_recognition_msgs::BoundingBox::ConstPtr latest_msg_
Definition: bounding_box_display.h:144
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::coords_objects_
std::vector< std::vector< ArrowPtr > > coords_objects_
Definition: bounding_box_display_common.h:147
jsk_rviz_plugins::BoundingBoxDisplay::color_property_
rviz::ColorProperty * color_property_
Definition: bounding_box_display.h:134
jsk_rviz_plugins::BoundingBoxDisplay
Definition: bounding_box_display.h:88
jsk_rviz_plugins::BoundingBoxDisplay::~BoundingBoxDisplay
virtual ~BoundingBoxDisplay()
Definition: bounding_box_display.cpp:124
jsk_rviz_plugins::BoundingBoxDisplay::show_coords_
bool show_coords_
Definition: bounding_box_display.h:131
jsk_rviz_plugins::BoundingBoxDisplay::updateValueThreshold
void updateValueThreshold()
Definition: bounding_box_display.cpp:310
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::coords_nodes_
std::vector< Ogre::SceneNode * > coords_nodes_
Definition: bounding_box_display_common.h:148
rviz::ColorProperty
rviz::Display
rviz::EnumProperty
rviz::FloatProperty
class_list_macros.h
jsk_rviz_plugins::BoundingBoxDisplay::updateColoring
void updateColoring()
Definition: bounding_box_display.cpp:220
jsk_rviz_plugins::BoundingBoxDisplay::alpha_property_
rviz::FloatProperty * alpha_property_
Definition: bounding_box_display.h:136
rviz::Property::hide
void hide()
jsk_rviz_plugins::BoundingBoxDisplay::updateAlphaMin
void updateAlphaMin()
Definition: bounding_box_display.cpp:178
jsk_rviz_plugins::BoundingBoxDisplay::alpha_method_property_
rviz::EnumProperty * alpha_method_property_
Definition: bounding_box_display.h:135
jsk_rviz_plugins::BoundingBoxDisplay::only_edge_
bool only_edge_
Definition: bounding_box_display.h:130
rviz::FloatProperty::getFloat
virtual float getFloat() const
rviz::EnumProperty::addOption
virtual void addOption(const QString &option, int value=0)
bounding_box_display_common.h
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::showEdges
void showEdges(const jsk_recognition_msgs::BoundingBoxArray::ConstPtr &msg)
Definition: bounding_box_display_common.h:341
rviz::Display::scene_node_
Ogre::SceneNode * scene_node_
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::alpha_max_
double alpha_max_
Definition: bounding_box_display_common.h:142
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::edges_
std::vector< BillboardLinePtr > edges_
Definition: bounding_box_display_common.h:149
jsk_rviz_plugins::BoundingBoxDisplay::updateOnlyEdge
void updateOnlyEdge()
Definition: bounding_box_display.cpp:206
jsk_rviz_plugins::BoundingBoxDisplay::only_edge_property_
rviz::BoolProperty * only_edge_property_
Definition: bounding_box_display.h:139
rviz::Display::scene_manager_
Ogre::SceneManager * scene_manager_
jsk_rviz_plugins::BoundingBoxDisplay::onInitialize
void onInitialize()
Definition: bounding_box_display.cpp:137
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::alpha_
double alpha_
Definition: bounding_box_display_common.h:140
ROS_WARN
#define ROS_WARN(...)
jsk_rviz_plugins::BoundingBoxDisplay::updateLineWidth
void updateLineWidth()
Definition: bounding_box_display.cpp:154
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::hideCoords
void hideCoords()
Definition: bounding_box_display_common.h:525
jsk_rviz_plugins::BoundingBoxDisplay::updateAlphaMethod
void updateAlphaMethod()
Definition: bounding_box_display.cpp:240
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::showBoxes
void showBoxes(const jsk_recognition_msgs::BoundingBoxArray::ConstPtr &msg)
Definition: bounding_box_display_common.h:274
rviz::MessageFilterDisplay< MessageType >::onInitialize
void onInitialize() override
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::line_width_
double line_width_
Definition: bounding_box_display_common.h:144
PLUGINLIB_EXPORT_CLASS
PLUGINLIB_EXPORT_CLASS(jsk_rviz_plugins::PictogramArrayDisplay, rviz::Display)
jsk_rviz_plugins::BoundingBoxDisplay::show_coords_property_
rviz::BoolProperty * show_coords_property_
Definition: bounding_box_display.h:141
bounding_box_display.h
jsk_rviz_plugins::BoundingBoxDisplay::alpha_min_property_
rviz::FloatProperty * alpha_min_property_
Definition: bounding_box_display.h:137
jsk_rviz_plugins::BoundingBoxDisplay::updateAlphaMax
void updateAlphaMax()
Definition: bounding_box_display.cpp:192
rviz::FloatProperty::setFloat
bool setFloat(float new_value)
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::color_
QColor color_
Definition: bounding_box_display_common.h:138
jsk_rviz_plugins::BoundingBoxDisplay::coloring_property_
rviz::EnumProperty * coloring_property_
Definition: bounding_box_display.h:133
jsk_rviz_plugins::BoundingBoxDisplay::alpha_max_property_
rviz::FloatProperty * alpha_max_property_
Definition: bounding_box_display.h:138
jsk_rviz_plugins::BoundingBoxDisplay::value_threshold_property_
rviz::FloatProperty * value_threshold_property_
Definition: bounding_box_display.h:142
jsk_rviz_plugins::BoundingBoxDisplay::BoundingBoxDisplay
BoundingBoxDisplay()
Definition: bounding_box_display.cpp:74
jsk_rviz_plugins::BoundingBoxDisplay::updateColor
void updateColor()
Definition: bounding_box_display.cpp:162
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::alpha_min_
double alpha_min_
Definition: bounding_box_display_common.h:141
jsk_rviz_plugins
Definition: __init__.py:1
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::shapes_
std::vector< ShapePtr > shapes_
Definition: bounding_box_display_common.h:150
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::value_threshold_
double value_threshold_
Definition: bounding_box_display_common.h:145
jsk_rviz_plugins::BoundingBoxDisplayCommon< jsk_recognition_msgs::BoundingBox >::coloring_method_
std::string coloring_method_
Definition: bounding_box_display_common.h:139


jsk_rviz_plugins
Author(s): Kei Okada , Yohei Kakiuchi , Shohei Fujii , Ryohei Ueda
autogenerated on Fri Dec 13 2024 03:49:56