virtual_joints_widget.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2012, Willow Garage, Inc.
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 Willow Garage 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 
35 /* Author: Dave Coleman */
36 
37 // SA
38 #include "virtual_joints_widget.h"
39 #include "header_widget.h"
40 
41 // Qt
42 #include <QApplication>
43 #include <QComboBox>
44 #include <QFormLayout>
45 #include <QHBoxLayout>
46 #include <QLabel>
47 #include <QLineEdit>
48 #include <QMessageBox>
49 #include <QPushButton>
50 #include <QStackedWidget>
51 #include <QString>
52 #include <QTableWidget>
53 #include <QVBoxLayout>
54 
55 namespace moveit_setup_assistant
56 {
57 // ******************************************************************************************
58 // Constructor
59 // ******************************************************************************************
60 VirtualJointsWidget::VirtualJointsWidget(QWidget* parent, const MoveItConfigDataPtr& config_data)
61  : SetupScreenWidget(parent), config_data_(config_data)
62 {
63  // Basic widget container
64  QVBoxLayout* layout = new QVBoxLayout();
65 
66  // Top Header Area ------------------------------------------------
67 
68  HeaderWidget* header =
69  new HeaderWidget("Define Virtual Joints",
70  "Create a virtual joint between the base robot link and an external frame of reference. "
71  "This allows to place the robot in the world or on a mobile platform.",
72  this);
73  layout->addWidget(header);
74 
75  // Create contents screens ---------------------------------------
76 
77  vjoint_list_widget_ = createContentsWidget();
78  vjoint_edit_widget_ = createEditWidget();
79 
80  // Create Widget wrapper for layout
81  stacked_widget_ = new QStackedWidget(this);
82  stacked_widget_->addWidget(vjoint_list_widget_); // screen index 0
83  stacked_widget_->addWidget(vjoint_edit_widget_); // screen index 1
84  layout->addWidget(stacked_widget_);
85 
86  // Finish Layout --------------------------------------------------
87  this->setLayout(layout);
88 }
89 
90 // ******************************************************************************************
91 // Create the main content widget
92 // ******************************************************************************************
94 {
95  // Main widget
96  QWidget* content_widget = new QWidget(this);
97 
98  // Basic widget container
99  QVBoxLayout* layout = new QVBoxLayout(this);
100 
101  // Table ------------ ------------------------------------------------
102 
103  data_table_ = new QTableWidget(this);
104  data_table_->setColumnCount(4);
105  data_table_->setSortingEnabled(true);
106  data_table_->setSelectionBehavior(QAbstractItemView::SelectRows);
107  connect(data_table_, &QTableWidget::cellDoubleClicked, this, &VirtualJointsWidget::editDoubleClicked);
108  connect(data_table_, &QTableWidget::cellClicked, this, &VirtualJointsWidget::previewClicked);
109  layout->addWidget(data_table_);
110 
111  // Set header labels
112  QStringList header_list;
113  header_list.append("Virtual Joint Name");
114  header_list.append("Child Link");
115  header_list.append("Parent Frame");
116  header_list.append("Type");
117  data_table_->setHorizontalHeaderLabels(header_list);
118 
119  // Bottom Buttons --------------------------------------------------
120 
121  QHBoxLayout* controls_layout = new QHBoxLayout();
122 
123  // Spacer
124  controls_layout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
125 
126  // Edit Selected Button
127  btn_edit_ = new QPushButton("&Edit Selected", this);
128  btn_edit_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
129  btn_edit_->setMaximumWidth(300);
130  btn_edit_->hide(); // show once we know if there are existing poses
131  connect(btn_edit_, &QPushButton::clicked, this, &VirtualJointsWidget::editSelected);
132  controls_layout->addWidget(btn_edit_);
133  controls_layout->setAlignment(btn_edit_, Qt::AlignRight);
134 
135  // Delete Selected Button
136  btn_delete_ = new QPushButton("&Delete Selected", this);
137  connect(btn_delete_, &QPushButton::clicked, this, &VirtualJointsWidget::deleteSelected);
138  controls_layout->addWidget(btn_delete_);
139  controls_layout->setAlignment(btn_delete_, Qt::AlignRight);
140 
141  // Add VJoint Button
142  QPushButton* btn_add = new QPushButton("&Add Virtual Joint", this);
143  btn_add->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
144  btn_add->setMaximumWidth(300);
145  connect(btn_add, &QPushButton::clicked, this, &VirtualJointsWidget::showNewScreen);
146  controls_layout->addWidget(btn_add);
147  controls_layout->setAlignment(btn_add, Qt::AlignRight);
148 
149  // Add layout
150  layout->addLayout(controls_layout);
151 
152  // Set layout -----------------------------------------------------
153  content_widget->setLayout(layout);
154 
155  return content_widget;
156 }
157 
158 // ******************************************************************************************
159 // Create the edit widget
160 // ******************************************************************************************
162 {
163  // Main widget
164  QWidget* edit_widget = new QWidget(this);
165  // Layout
166  QVBoxLayout* layout = new QVBoxLayout();
167 
168  // Simple form -------------------------------------------
169  QFormLayout* form_layout = new QFormLayout();
170  // form_layout->setContentsMargins( 0, 15, 0, 15 );
171  form_layout->setRowWrapPolicy(QFormLayout::WrapAllRows);
172 
173  // Name input
174  vjoint_name_field_ = new QLineEdit(this);
175  form_layout->addRow("Virtual Joint Name:", vjoint_name_field_);
176 
177  // Child Link input
178  child_link_field_ = new QComboBox(this);
179  child_link_field_->setEditable(false);
180  form_layout->addRow("Child Link:", child_link_field_);
181 
182  // Parent frame name input
183  parent_name_field_ = new QLineEdit(this);
184  form_layout->addRow("Parent Frame Name:", parent_name_field_);
185 
186  // Type input
187  joint_type_field_ = new QComboBox(this);
188  joint_type_field_->setEditable(false);
189  loadJointTypesComboBox(); // only do this once
190  // connect( joint_type_field_, &QComboBox::currentTextChanged,
191  // this, &VirtualJointsWidget::loadJoinSliders);
192  form_layout->addRow("Joint Type:", joint_type_field_);
193 
194  layout->addLayout(form_layout);
195 
196  // Bottom Buttons --------------------------------------------------
197 
198  QHBoxLayout* controls_layout = new QHBoxLayout();
199  controls_layout->setContentsMargins(0, 25, 0, 15);
200 
201  // Spacer
202  controls_layout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
203 
204  // Save
205  QPushButton* btn_save = new QPushButton("&Save", this);
206  btn_save->setMaximumWidth(200);
207  connect(btn_save, &QPushButton::clicked, this, &VirtualJointsWidget::doneEditing);
208  controls_layout->addWidget(btn_save);
209  controls_layout->setAlignment(btn_save, Qt::AlignRight);
210 
211  // Cancel
212  QPushButton* btn_cancel = new QPushButton("&Cancel", this);
213  btn_cancel->setMaximumWidth(200);
214  connect(btn_cancel, &QPushButton::clicked, this, &VirtualJointsWidget::cancelEditing);
215  controls_layout->addWidget(btn_cancel);
216  controls_layout->setAlignment(btn_cancel, Qt::AlignRight);
217 
218  // Add layout
219  layout->addLayout(controls_layout);
220 
221  // Set layout -----------------------------------------------------
222  edit_widget->setLayout(layout);
223 
224  return edit_widget;
225 }
226 
227 // ******************************************************************************************
228 // Show edit screen for creating a new vjoint
229 // ******************************************************************************************
231 {
232  // Remember that this is a new vjoint
233  current_edit_vjoint_.clear();
234 
235  // Clear previous data
236  vjoint_name_field_->setText("");
237  parent_name_field_->setText("");
238  child_link_field_->clearEditText();
239  joint_type_field_->clearEditText(); // actually this just chooses first option
240 
241  // Switch to screen
242  stacked_widget_->setCurrentIndex(1);
243 
244  // Announce that this widget is in modal mode
245  Q_EMIT isModal(true);
246 }
247 
248 // ******************************************************************************************
249 // Edit whatever element is selected
250 // ******************************************************************************************
251 void VirtualJointsWidget::editDoubleClicked(int /*row*/, int /*column*/)
252 {
253  editSelected();
254 }
255 
256 // ******************************************************************************************
257 // Preview whatever element is selected
258 // ******************************************************************************************
259 void VirtualJointsWidget::previewClicked(int /*row*/, int /*column*/)
260 {
261 }
262 
263 // ******************************************************************************************
264 // Edit whatever element is selected
265 // ******************************************************************************************
267 {
268  // Get list of all selected items
269  QList<QTableWidgetItem*> selected = data_table_->selectedItems();
270 
271  // Check that an element was selected
272  if (selected.empty())
273  return;
274 
275  // Get selected name and edit it
276  edit(selected[0]->text().toStdString());
277 }
278 
279 // ******************************************************************************************
280 // Edit vjoint
281 // ******************************************************************************************
282 void VirtualJointsWidget::edit(const std::string& name)
283 {
284  // Remember what we are editing
286 
287  // Find the selected in datastruture
289 
290  // Set vjoint name
291  vjoint_name_field_->setText(vjoint->name_.c_str());
292  parent_name_field_->setText(vjoint->parent_frame_.c_str());
293 
294  // Set vjoint child link
295  int index = child_link_field_->findText(vjoint->child_link_.c_str());
296  if (index == -1)
297  {
298  QMessageBox::critical(this, "Error Loading", "Unable to find child link in drop down box");
299  return;
300  }
301  child_link_field_->setCurrentIndex(index);
302 
303  // Set joint type
304  index = joint_type_field_->findText(vjoint->type_.c_str());
305  if (index == -1)
306  {
307  QMessageBox::critical(this, "Error Loading", "Unable to find joint type in drop down box");
308  return;
309  }
310  joint_type_field_->setCurrentIndex(index);
311 
312  // Switch to screen
313  stacked_widget_->setCurrentIndex(1);
314 
315  // Announce that this widget is in modal mode
316  Q_EMIT isModal(true);
317 }
318 
319 // ******************************************************************************************
320 // Populate the combo dropdown box with joint types
321 // ******************************************************************************************
323 {
324  // Remove all old items
325  joint_type_field_->clear();
326 
327  // joint types (hard coded)
328  joint_type_field_->addItem("fixed");
329  joint_type_field_->addItem("floating");
330  joint_type_field_->addItem("planar");
331 }
332 
333 // ******************************************************************************************
334 // Populate the combo dropdown box with avail child links
335 // ******************************************************************************************
337 {
338  // Remove all old links
339  child_link_field_->clear();
340 
341  // Get all links in robot model
342  std::vector<const moveit::core::LinkModel*> link_models = config_data_->getRobotModel()->getLinkModels();
343 
344  // Add all links to combo box
345  for (std::vector<const moveit::core::LinkModel*>::const_iterator link_it = link_models.begin();
346  link_it < link_models.end(); ++link_it)
347  {
348  child_link_field_->addItem((*link_it)->getName().c_str());
349  }
350 }
351 
352 // ******************************************************************************************
353 // Find the associated data by name
354 // ******************************************************************************************
356 {
357  // Find the group state we are editing based on the vjoint name
358  srdf::Model::VirtualJoint* searched_group = nullptr; // used for holding our search results
359 
360  for (srdf::Model::VirtualJoint& virtual_joint : config_data_->srdf_->virtual_joints_)
361  {
362  if (virtual_joint.name_ == name) // string match
363  {
364  searched_group = &virtual_joint; // convert to pointer from iterator
365  break; // we are done searching
366  }
367  }
368 
369  // Check if vjoint was found
370  if (searched_group == nullptr) // not found
371  {
372  QMessageBox::critical(this, "Error Saving", "An internal error has occured while saving. Quitting.");
373  QApplication::quit();
374  }
375 
376  return searched_group;
377 }
378 
379 // ******************************************************************************************
380 // Delete currently editing item
381 // ******************************************************************************************
383 {
384  // Get list of all selected items
385  QList<QTableWidgetItem*> selected = data_table_->selectedItems();
386 
387  // Check that an element was selected
388  if (selected.empty())
389  return;
390 
391  // Get selected name and edit it
392  current_edit_vjoint_ = selected[0]->text().toStdString();
393 
394  // Confirm user wants to delete group
395  if (QMessageBox::question(this, "Confirm Virtual Joint Deletion",
396  QString("Are you sure you want to delete the virtual joint '")
397  .append(current_edit_vjoint_.c_str())
398  .append("'?"),
399  QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel)
400  {
401  return;
402  }
403 
404  // Delete vjoint from vector
405  for (std::vector<srdf::Model::VirtualJoint>::iterator vjoint_it = config_data_->srdf_->virtual_joints_.begin();
406  vjoint_it != config_data_->srdf_->virtual_joints_.end(); ++vjoint_it)
407  {
408  // check if this is the group we want to delete
409  if (vjoint_it->name_ == current_edit_vjoint_) // string match
410  {
411  config_data_->srdf_->virtual_joints_.erase(vjoint_it);
412  break;
413  }
414  }
415 
416  // Reload main screen table
417  loadDataTable();
419  Q_EMIT referenceFrameChanged();
420 }
421 
422 // ******************************************************************************************
423 // Save editing changes
424 // ******************************************************************************************
426 {
427  // Get a reference to the supplied strings
428  const std::string vjoint_name = vjoint_name_field_->text().trimmed().toStdString();
429  const std::string parent_name = parent_name_field_->text().trimmed().toStdString();
430 
431  // Used for editing existing groups
432  srdf::Model::VirtualJoint* searched_data = nullptr;
433 
434  // Check that name field is not empty
435  if (vjoint_name.empty())
436  {
437  QMessageBox::warning(this, "Error Saving", "A name must be given for the virtual joint!");
438  return;
439  }
440 
441  // Check that parent frame name field is not empty
442  if (parent_name.empty())
443  {
444  QMessageBox::warning(this, "Error Saving", "A name must be given for the parent frame");
445  return;
446  }
447 
448  // Check if this is an existing vjoint
449  if (!current_edit_vjoint_.empty())
450  {
451  // Find the group we are editing based on the goup name string
452  searched_data = findVJointByName(current_edit_vjoint_);
453  }
454 
455  // Check that the vjoint name is unique
456  for (const auto& virtual_joint : config_data_->srdf_->virtual_joints_)
457  {
458  if (virtual_joint.name_.compare(vjoint_name) == 0) // the names are the same
459  {
460  // is this our existing vjoint? check if vjoint pointers are same
461  if (&virtual_joint != searched_data)
462  {
463  QMessageBox::warning(this, "Error Saving", "A virtual joint already exists with that name!");
464  return;
465  }
466  }
467  }
468 
469  // Check that a joint type was selected
470  if (joint_type_field_->currentText().isEmpty())
471  {
472  QMessageBox::warning(this, "Error Saving", "A joint type must be chosen!");
473  return;
474  }
475 
476  // Check that a child link was selected
477  if (child_link_field_->currentText().isEmpty())
478  {
479  QMessageBox::warning(this, "Error Saving", "A child link must be chosen!");
480  return;
481  }
482 
484 
485  // Save the new vjoint name or create the new vjoint ----------------------------
486  bool is_new = false;
487 
488  if (searched_data == nullptr) // create new
489  {
490  is_new = true;
491  searched_data = new srdf::Model::VirtualJoint();
492  }
493 
494  // Copy name data ----------------------------------------------------
495  searched_data->name_ = vjoint_name;
496  searched_data->parent_frame_ = parent_name;
497  searched_data->child_link_ = child_link_field_->currentText().toStdString();
498  searched_data->type_ = joint_type_field_->currentText().toStdString();
499 
500  bool emit_frame_notice = false;
501 
502  // Insert new vjoints into group state vector --------------------------
503  if (is_new)
504  {
505  if (searched_data->child_link_ == config_data_->getRobotModel()->getRootLinkName())
506  emit_frame_notice = true;
507  config_data_->srdf_->virtual_joints_.push_back(*searched_data);
508  config_data_->updateRobotModel();
509  delete searched_data;
510  }
511 
512  // Finish up ------------------------------------------------------
513 
514  // Reload main screen table
515  loadDataTable();
516 
517  // Switch to screen
518  stacked_widget_->setCurrentIndex(0);
519 
520  // Announce that this widget is not in modal mode
521  Q_EMIT isModal(false);
522 
523  // if the root frame changed for the robot, emit the signal
524  if (emit_frame_notice)
525  {
526  Q_EMIT referenceFrameChanged();
527  }
528 }
529 
530 // ******************************************************************************************
531 // Cancel changes
532 // ******************************************************************************************
534 {
535  // Switch to screen
536  stacked_widget_->setCurrentIndex(0);
537 
538  // Announce that this widget is not in modal mode
539  Q_EMIT isModal(false);
540 }
541 
542 // ******************************************************************************************
543 // Load the virtual joints into the table
544 // ******************************************************************************************
546 {
547  // Disable Table
548  data_table_->setUpdatesEnabled(false); // prevent table from updating until we are completely done
549  data_table_->setDisabled(true); // make sure we disable it so that the cellChanged event is not called
550  data_table_->clearContents();
551 
552  // Set size of datatable
553  data_table_->setRowCount(config_data_->srdf_->virtual_joints_.size());
554 
555  // Loop through every virtual joint
556  int row = 0;
557  for (const auto& virtual_joint : config_data_->srdf_->virtual_joints_)
558  {
559  // Create row elements
560  QTableWidgetItem* data_name = new QTableWidgetItem(virtual_joint.name_.c_str());
561  data_name->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
562  QTableWidgetItem* child_link_name = new QTableWidgetItem(virtual_joint.child_link_.c_str());
563  child_link_name->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
564  QTableWidgetItem* parent_frame_name = new QTableWidgetItem(virtual_joint.parent_frame_.c_str());
565  parent_frame_name->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
566  QTableWidgetItem* type_name = new QTableWidgetItem(virtual_joint.type_.c_str());
567  type_name->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
568 
569  // Add to table
570  data_table_->setItem(row, 0, data_name);
571  data_table_->setItem(row, 1, child_link_name);
572  data_table_->setItem(row, 2, parent_frame_name);
573  data_table_->setItem(row, 3, type_name);
574 
575  // Increment counter
576  ++row;
577  }
578 
579  // Reenable
580  data_table_->setUpdatesEnabled(true); // prevent table from updating until we are completely done
581  data_table_->setDisabled(false); // make sure we disable it so that the cellChanged event is not called
582 
583  // Resize header
584  data_table_->resizeColumnToContents(0);
585  data_table_->resizeColumnToContents(1);
586  data_table_->resizeColumnToContents(2);
587  data_table_->resizeColumnToContents(3);
588 
589  // Show edit button if applicable
590  if (!config_data_->srdf_->virtual_joints_.empty())
591  btn_edit_->show();
592 }
593 
594 // ******************************************************************************************
595 // Called when setup assistant navigation switches to this screen
596 // ******************************************************************************************
598 {
599  // Show the current vjoints screen
600  stacked_widget_->setCurrentIndex(0);
601 
602  // Load the data to the tree
603  loadDataTable();
604 
605  // Load the avail groups to the combo box
607 }
608 
609 } // namespace moveit_setup_assistant
moveit_setup_assistant::VirtualJointsWidget::showNewScreen
void showNewScreen()
Show edit screen.
Definition: virtual_joints_widget.cpp:262
moveit_setup_assistant::VirtualJointsWidget::joint_type_field_
QComboBox * joint_type_field_
Definition: virtual_joints_widget.h:82
moveit_setup_assistant::VirtualJointsWidget::btn_edit_
QPushButton * btn_edit_
Definition: virtual_joints_widget.h:74
moveit_setup_assistant::VirtualJointsWidget::config_data_
moveit_setup_assistant::MoveItConfigDataPtr config_data_
Contains all the configuration data for the setup assistant.
Definition: virtual_joints_widget.h:128
srdf::Model::VirtualJoint::name_
std::string name_
moveit_setup_assistant::VirtualJointsWidget::doneEditing
void doneEditing()
Save editing changes.
Definition: virtual_joints_widget.cpp:457
moveit_setup_assistant::VirtualJointsWidget::current_edit_vjoint_
std::string current_edit_vjoint_
Orignal name of vjoint currently being edited. This is used to find the element in the vector.
Definition: virtual_joints_widget.h:131
moveit_setup_assistant::VirtualJointsWidget::deleteSelected
void deleteSelected()
Delete currently editing ite.
Definition: virtual_joints_widget.cpp:414
moveit_setup_assistant::VirtualJointsWidget::loadJointTypesComboBox
void loadJointTypesComboBox()
Definition: virtual_joints_widget.cpp:354
moveit_setup_assistant::VirtualJointsWidget::createContentsWidget
QWidget * createContentsWidget()
Definition: virtual_joints_widget.cpp:125
moveit_setup_assistant::VirtualJointsWidget::child_link_field_
QComboBox * child_link_field_
Definition: virtual_joints_widget.h:81
SetupScreenWidget::isModal
void isModal(bool isModal)
Event for when the current screen is in modal view. Essential disabled the left navigation.
srdf::Model::VirtualJoint::parent_frame_
std::string parent_frame_
moveit_setup_assistant::VirtualJointsWidget::referenceFrameChanged
void referenceFrameChanged()
Event sent when this widget updated the root joint, which changes the frame of reference for the mode...
moveit_setup_assistant::VirtualJointsWidget::cancelEditing
void cancelEditing()
Cancel changes.
Definition: virtual_joints_widget.cpp:565
moveit_setup_assistant::VirtualJointsWidget::parent_name_field_
QLineEdit * parent_name_field_
Definition: virtual_joints_widget.h:80
moveit_setup_assistant::VirtualJointsWidget::findVJointByName
srdf::Model::VirtualJoint * findVJointByName(const std::string &name)
Definition: virtual_joints_widget.cpp:387
SetupScreenWidget
Definition: setup_screen_widget.h:44
moveit_setup_assistant::VirtualJointsWidget::previewClicked
void previewClicked(int row, int column)
Preview whatever element is selected.
Definition: virtual_joints_widget.cpp:291
name
name
header_widget.h
moveit_setup_assistant
Definition: compute_default_collisions.h:46
text
text
moveit_setup_assistant::VirtualJointsWidget::focusGiven
void focusGiven() override
Received when this widget is chosen from the navigation menu.
Definition: virtual_joints_widget.cpp:629
moveit_setup_assistant::MoveItConfigData::VIRTUAL_JOINTS
@ VIRTUAL_JOINTS
Definition: moveit_config_data.h:229
srdf::Model::VirtualJoint
append
ROSCPP_DECL std::string append(const std::string &left, const std::string &right)
moveit_setup_assistant::VirtualJointsWidget::editDoubleClicked
void editDoubleClicked(int row, int column)
Edit the double clicked element.
Definition: virtual_joints_widget.cpp:283
srdf::Model::VirtualJoint::child_link_
std::string child_link_
index
unsigned int index
moveit_setup_assistant::VirtualJointsWidget::edit
void edit(const std::string &name)
Definition: virtual_joints_widget.cpp:314
moveit_setup_assistant::VirtualJointsWidget::loadDataTable
void loadDataTable()
Definition: virtual_joints_widget.cpp:577
header
const std::string header
moveit_setup_assistant::VirtualJointsWidget::editSelected
void editSelected()
Edit whatever element is selected.
Definition: virtual_joints_widget.cpp:298
moveit_setup_assistant::VirtualJointsWidget::btn_delete_
QPushButton * btn_delete_
Definition: virtual_joints_widget.h:75
moveit_setup_assistant::VirtualJointsWidget::data_table_
QTableWidget * data_table_
Definition: virtual_joints_widget.h:73
moveit_setup_assistant::VirtualJointsWidget::VirtualJointsWidget
VirtualJointsWidget(QWidget *parent, const MoveItConfigDataPtr &config_data)
Definition: virtual_joints_widget.cpp:92
moveit_setup_assistant::VirtualJointsWidget::stacked_widget_
QStackedWidget * stacked_widget_
Definition: virtual_joints_widget.h:78
moveit_setup_assistant::VirtualJointsWidget::createEditWidget
QWidget * createEditWidget()
Definition: virtual_joints_widget.cpp:193
virtual_joints_widget.h
moveit_setup_assistant::VirtualJointsWidget::vjoint_name_field_
QLineEdit * vjoint_name_field_
Definition: virtual_joints_widget.h:79
moveit_setup_assistant::VirtualJointsWidget::loadChildLinksComboBox
void loadChildLinksComboBox()
Definition: virtual_joints_widget.cpp:368
srdf::Model::VirtualJoint::type_
std::string type_


moveit_setup_assistant
Author(s): Dave Coleman
autogenerated on Sat May 3 2025 02:28:05