modify_poses.cpp
Go to the documentation of this file.
2 
3 namespace ram_qt_guis
4 {
5 ModifyPoses::ModifyPoses(QVBoxLayout* layout,
6  const unsigned mode) :
7  layout_(layout),
8  mode_(mode)
9 {
10  setObjectName("Modify poses");
12 
13  if (mode > 1)
14  {
15  QLabel *label =
16  new QLabel(
17  "The selection contains poses in Joint mode and Linear mode, it is thus not allowed to modified the robot speed.");
18  label->setWordWrap(true);
19  layout_->addWidget(label);
20  }
21 
22  layout_->addWidget(new QLabel("<b>Geometric pose:</b>"));
23  QGridLayout* geometric_pose_grid = new QGridLayout;
24  layout_->addLayout(geometric_pose_grid);
25 
26  // Pose
27  pose_widget_ = new QWidget;
28  QVBoxLayout *pose_layout = new QVBoxLayout;
29  pose_widget_->setLayout(pose_layout);
30 
31  pose_modify_ = new QCheckBox;
32  pose_ = new Pose("");
33  // Make sure these widgets take as much space as available
34  pose_->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
35 
36  pose_abs_rel_ = new QComboBox;
37  pose_abs_rel_->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
38  pose_abs_rel_->addItem("Relative");
39  pose_abs_rel_->addItem("Absolute");
40  connect(pose_abs_rel_, SIGNAL(currentIndexChanged(int)), this, SLOT(poseAbsRel(int)));
41  pose_abs_rel_->setCurrentIndex(1);
42 
43  pose_layout->addWidget(pose_abs_rel_);
44  pose_layout->addLayout(pose_->getLayout());
45 
46  geometric_pose_grid->addWidget(pose_modify_, 0, 0);
47  geometric_pose_grid->addWidget(pose_widget_, 0, 1);
48  connect(pose_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyPose()));
49  layout_->addWidget(new QLabel("<b>Pose:</b>"));
50  QGridLayout* pose_grid = new QGridLayout;
51  layout_->addLayout(pose_grid);
52 
53  // Polygon start
54  polygon_start_modify_ = new QCheckBox;
55  polygon_start_ = new QComboBox;
56  polygon_start_->addItem("False");
57  polygon_start_->addItem("True");
58  // Make sure these widgets take as much space as available
59  polygon_start_->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
60 
61  polygon_start_widget_ = new QWidget;
62  QVBoxLayout *polygon_start_layout = new QVBoxLayout;
63  polygon_start_widget_->setLayout(polygon_start_layout);
64 
65  polygon_start_layout->addWidget(new QLabel("Polygon start:"));
66  polygon_start_layout->addWidget(polygon_start_);
67 
68  pose_grid->addWidget(polygon_start_modify_, 0, 0);
69  pose_grid->addWidget(polygon_start_widget_, 0, 1);
70  connect(polygon_start_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyPolygonStart()));
71 
72  // Polygon end
73  polygon_end_modify_ = new QCheckBox;
74  polygon_end_ = new QComboBox;
75  polygon_end_->addItem("False");
76  polygon_end_->addItem("True");
77 
78  polygon_end_widget_ = new QWidget;
79  QVBoxLayout *polygon_end_layout = new QVBoxLayout;
80  polygon_end_widget_->setLayout(polygon_end_layout);
81 
82  polygon_end_layout->addWidget(new QLabel("Polygon end:"));
83  polygon_end_layout->addWidget(polygon_end_);
84 
85  pose_grid->addWidget(polygon_end_modify_);
86  pose_grid->addWidget(polygon_end_widget_);
87  connect(polygon_end_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyPolygonEnd()));
88 
89  layout_->addWidget(new QLabel("<b>Parameters:</b>"));
90 
91  QGridLayout* parameters_grid = new QGridLayout;
92  layout_->addLayout(parameters_grid);
93 
94  // Movement type
95  movement_type_modify_ = new QCheckBox;
96  movement_type_ = new QComboBox;
97  movement_type_->addItem("Joint");
98  movement_type_->addItem("Linear");
99  // Make sure these widgets take as much space as available
100  movement_type_->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
101  connect(movement_type_modify_, SIGNAL(stateChanged(int)), this, SLOT(movementTypeChanged()));
102 
103  movement_type_widget_ = new QWidget;
104  QVBoxLayout *movement_type_layout = new QVBoxLayout;
105  movement_type_widget_->setLayout(movement_type_layout);
106 
107  movement_type_layout->addWidget(new QLabel("Movement type:"));
108  movement_type_layout->addWidget(movement_type_);
109 
110  parameters_grid->addWidget(movement_type_modify_, 0, 0);
111  parameters_grid->addWidget(movement_type_widget_, 0, 1);
112  connect(movement_type_, SIGNAL(currentIndexChanged(int)), this, SLOT(movementTypeChanged()));
113  connect(movement_type_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyMovementType()));
114 
115  // Approach type
116  approach_type_modify_ = new QCheckBox;
117  approach_type_ = new QComboBox;
118  approach_type_->addItem("Stop/go");
119  approach_type_->addItem("Blend radius");
120 
121  approach_type_widget_ = new QWidget;
122  QVBoxLayout *approach_type_layout = new QVBoxLayout;
123  approach_type_widget_->setLayout(approach_type_layout);
124 
125  approach_type_layout->addWidget(new QLabel("Approach type:"));
126  approach_type_layout->addWidget(approach_type_);
127 
128  parameters_grid->addWidget(approach_type_modify_);
129  parameters_grid->addWidget(approach_type_widget_);
130  connect(approach_type_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyApproachType()));
131 
132  // Blend radius
133  blend_radius_modify_ = new QCheckBox;
134  blend_radius_ = new QSpinBox;
135  blend_radius_->setSingleStep(5);
136  blend_radius_->setSuffix(" %");
137 
138  blend_radius_abs_rel_ = new QComboBox;
139  blend_radius_abs_rel_->addItem("Relative");
140  blend_radius_abs_rel_->addItem("Absolute");
141  connect(blend_radius_abs_rel_, SIGNAL(currentIndexChanged(int)), this, SLOT(blendRadiusAbsRel(int)));
142  blend_radius_abs_rel_->setCurrentIndex(1);
143 
144  blend_radius_widget_ = new QWidget;
145  QVBoxLayout *blend_radius_layout = new QVBoxLayout;
146  blend_radius_widget_->setLayout(blend_radius_layout);
147 
148  blend_radius_layout->addWidget(new QLabel("Blend radius:"));
149  blend_radius_layout->addWidget(blend_radius_abs_rel_);
150  blend_radius_layout->addWidget(blend_radius_);
151 
152  parameters_grid->addWidget(blend_radius_modify_);
153  parameters_grid->addWidget(blend_radius_widget_);
154  connect(blend_radius_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyBlendRadius()));
155 
156  // Speed
157  speed_modify_ = new QCheckBox;
158  speed_ = new QDoubleSpinBox;
159  speed_->setSingleStep(1);
160  speed_->setDecimals(3);
161 
162  speed_abs_rel_ = new QComboBox;
163  speed_abs_rel_->addItem("Relative");
164  speed_abs_rel_->addItem("Absolute");
165  connect(speed_abs_rel_, SIGNAL(currentIndexChanged(int)), this, SLOT(speedAbsRel(int)));
166  speed_abs_rel_->setCurrentIndex(1);
167 
168  speed_widget_ = new QWidget;
169  QVBoxLayout *speed_layout = new QVBoxLayout;
170  speed_widget_->setLayout(speed_layout);
171 
172  if (mode < 2)
173  {
174  speed_layout->addWidget(new QLabel("Speed:"));
175  speed_layout->addWidget(speed_abs_rel_);
176  speed_layout->addWidget(speed_);
177 
178  parameters_grid->addWidget(speed_modify_);
179  parameters_grid->addWidget(speed_widget_);
180  connect(speed_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifySpeed()));
181  }
182 
183  // Laser power
184  laser_power_modify_ = new QCheckBox;
185  laser_power_ = new QSpinBox;
186  laser_power_->setSingleStep(100);
187  laser_power_->setSuffix(" W");
188 
189  laser_power_abs_rel_ = new QComboBox;
190  laser_power_abs_rel_->addItem("Relative");
191  laser_power_abs_rel_->addItem("Absolute");
192  connect(laser_power_abs_rel_, SIGNAL(currentIndexChanged(int)), this, SLOT(laserPowerAbsRel(int)));
193  laser_power_abs_rel_->setCurrentIndex(1);
194 
195  laser_power_widget_ = new QWidget;
196  QVBoxLayout *laser_power_layout = new QVBoxLayout;
197  laser_power_widget_->setLayout(laser_power_layout);
198 
199  laser_power_layout->addWidget(new QLabel("Laser power:"));
200  laser_power_layout->addWidget(laser_power_abs_rel_);
201  laser_power_layout->addWidget(laser_power_);
202 
203  parameters_grid->addWidget(laser_power_modify_);
204  parameters_grid->addWidget(laser_power_widget_);
205  connect(laser_power_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyLaserPower()));
206 
207  // Feed rate
208  feed_rate_modify_ = new QCheckBox;
209  feed_rate_ = new QDoubleSpinBox;
210  speed_->setDecimals(3);
211  feed_rate_->setSingleStep(0.1);
212  feed_rate_->setSuffix(" meters/min");
213 
214  feed_rate_abs_rel_ = new QComboBox;
215  feed_rate_abs_rel_->addItem("Relative");
216  feed_rate_abs_rel_->addItem("Absolute");
217  connect(feed_rate_abs_rel_, SIGNAL(currentIndexChanged(int)), this, SLOT(feedRateAbsRel(int)));
218  feed_rate_abs_rel_->setCurrentIndex(1);
219 
220  feed_rate_widget_ = new QWidget;
221  QVBoxLayout *feed_rate_layout = new QVBoxLayout;
222  feed_rate_widget_->setLayout(feed_rate_layout);
223 
224  feed_rate_layout->addWidget(new QLabel("Feed rate:"));
225  feed_rate_layout->addWidget(feed_rate_abs_rel_);
226  feed_rate_layout->addWidget(feed_rate_);
227 
228  parameters_grid->addWidget(feed_rate_modify_);
229  parameters_grid->addWidget(feed_rate_widget_);
230  connect(feed_rate_modify_, SIGNAL(stateChanged(int)), this, SLOT(modifyFeedRate()));
231 
232  Q_EMIT modifyPose();
233  Q_EMIT modifyPolygonStart();
234  Q_EMIT modifyPolygonEnd();
235  Q_EMIT modifyMovementType();
236  Q_EMIT modifyApproachType();
237  Q_EMIT modifyBlendRadius();
238  Q_EMIT modifySpeed();
239  Q_EMIT modifyLaserPower();
240  Q_EMIT feed_rate_abs_rel_->currentIndexChanged(0);
241  Q_EMIT modifyFeedRate();
242 
243  button_box_ = new QDialogButtonBox(QDialogButtonBox::Ok
244  | QDialogButtonBox::Cancel);
245  layout_->addStretch(1);
246  layout_->addWidget(button_box_);
247 
248  switch (mode)
249  {
250  case 0: // All poses are Joint
251  movement_type_->setCurrentIndex(0);
252  break;
253  case 1: // All poses are Linear
254  movement_type_->setCurrentIndex(1);
255  break;
256  default: // Mixed posed
257  speed_modify_->setEnabled(false);
258  break;
259  }
260  Q_EMIT movementTypeChanged();
261 }
262 
264 {
265 }
266 
267 void
269 {
270  pose_widget_->setEnabled(pose_modify_->isChecked());
271 }
272 
273 void
275 {
276  pose_->resetPose();
277 }
278 
279 void
281 {
282  polygon_start_widget_->setEnabled(polygon_start_modify_->isChecked());
283 }
284 
285 void
287 {
288  polygon_end_widget_->setEnabled(polygon_end_modify_->isChecked());
289 }
290 
291 void
293 {
294  movement_type_widget_->setEnabled(movement_type_modify_->isChecked());
295 
296  if (movement_type_modify_->isChecked())
297  return;
298 
299  if (mode_ == 0)
300  movement_type_->setCurrentIndex(0);
301  else if (mode_ == 1)
302  movement_type_->setCurrentIndex(1);
303 
304  QStandardItemModel *model = dynamic_cast<QStandardItemModel *>(speed_abs_rel_->model());
305  model->item(0, 0)->setEnabled(true);
306  model->item(1, 0)->setEnabled(true);
307 }
308 
309 void
311 {
312  Q_EMIT setEnabled(false);
313 
314  // Change speed
315  switch (movement_type_->currentIndex())
316  {
317  case 0: // Modify poses to: Joint
318  {
319  speed_->setSuffix(" %");
321 
322  if (mode_ == 0) // All poses are joint
323  {
324  QStandardItemModel *model = dynamic_cast<QStandardItemModel *>(speed_abs_rel_->model());
325  model->item(0, 0)->setEnabled(true);
326  model->item(1, 0)->setEnabled(true);
327  }
328  else
329  {
330  QStandardItemModel *model = dynamic_cast<QStandardItemModel *>(speed_abs_rel_->model());
331  model->item(0, 0)->setEnabled(false); // Relative
332  model->item(1, 0)->setEnabled(true); // Absolute
333  speed_abs_rel_->setCurrentIndex(1);
334  }
335  break;
336  }
337  case 1: // Modify poses to: Linear
338  {
339  speed_->setSuffix(" meters/min");
340  speed_conversion_factor_ = 1 / 60.0; // meters/min > meters / sec
341 
342  if (mode_ == 0) // All poses are joint
343  {
344  QStandardItemModel *model = dynamic_cast<QStandardItemModel *>(speed_abs_rel_->model());
345  model->item(0, 0)->setEnabled(false);
346  model->item(1, 0)->setEnabled(true);
347  speed_abs_rel_->setCurrentIndex(1);
348  }
349  else
350  {
351  QStandardItemModel *model = dynamic_cast<QStandardItemModel *>(speed_abs_rel_->model());
352  model->item(0, 0)->setEnabled(true);
353  model->item(1, 0)->setEnabled(true);
354  }
355  break;
356  }
357  }
358  Q_EMIT setEnabled(true);
359 }
360 
361 void
363 {
364  approach_type_widget_->setEnabled(approach_type_modify_->isChecked());
365 }
366 
367 void
369 {
370  blend_radius_widget_->setEnabled(blend_radius_modify_->isChecked());
371 }
372 
373 void
375 {
376  switch (index)
377  {
378  case 0:
379  blend_radius_->setRange(-100, 100);
380  break;
381  default:
382  blend_radius_->setRange(0, 100);
383  break;
384  }
385 }
386 
387 void
389 {
390  speed_widget_->setEnabled(speed_modify_->isChecked());
391 }
392 
393 void
394 ModifyPoses::speedAbsRel(const int index)
395 {
396  switch (index)
397  {
398  case 0:
399  speed_->setRange(-100, 100);
400  break;
401  default:
402  speed_->setRange(0.001, 100);
403  break;
404  }
405 }
406 
407 void
409 {
410  laser_power_widget_->setEnabled(laser_power_modify_->isChecked());
411 }
412 
413 void
415 {
416  switch (index)
417  {
418  case 0:
419  laser_power_->setRange(-32000, 32000);
420  break;
421  default:
422  laser_power_->setRange(0, 32000);
423  break;
424  }
425 }
426 
427 void
429 {
430  feed_rate_widget_->setEnabled(feed_rate_modify_->isChecked());
431 }
432 
433 void
435 {
436  switch (index)
437  {
438  case 0:
439  feed_rate_->setRange(-10, 10);
440  break;
441  default:
442  feed_rate_->setRange(0, 10);
443  break;
444  }
445 }
446 
447 }
QComboBox * feed_rate_abs_rel_
QCheckBox * approach_type_modify_
QCheckBox * polygon_end_modify_
QDoubleSpinBox * speed_
QComboBox * blend_radius_abs_rel_
void speedAbsRel(const int index)
QCheckBox * movement_type_modify_
QDoubleSpinBox * feed_rate_
ModifyPoses(QVBoxLayout *layout, const unsigned mode)
Definition: modify_poses.cpp:5
QCheckBox * polygon_start_modify_
QCheckBox * laser_power_modify_
void feedRateAbsRel(const int index)
void poseAbsRel(const int index)
QVBoxLayout * getLayout()
void blendRadiusAbsRel(const int index)
void setEnabled(bool enabled)
QDialogButtonBox * button_box_
void laserPowerAbsRel(const int index)
QCheckBox * blend_radius_modify_
QComboBox * laser_power_abs_rel_


ram_qt_guis
Author(s): Victor Lamoine - Institut Maupertuis
autogenerated on Mon Jun 10 2019 14:50:11