24 #include <QFileDialog>
26 #include <VirtualRobot/XML/RobotIO.h>
28 #include "../KinematicSolver.h"
35 ARMARX_INFO <<
"RobotTrajectoryDesigner: SettingController on init";
46 ARMARX_INFO <<
"RobotTrajectoryDesigner: SettingController on connect";
49 QObject::connect(guiSettingTab->getSettingTab()->robotSelectionButton,
52 SLOT(openRobotSelectionDialog()));
55 QObject::connect(guiSettingTab->getSettingTab()->shortcutButton,
58 SLOT(openShortcutDialog()));
61 QObject::connect(guiSettingTab->getSettingTab()->tcpComboBox,
62 SIGNAL(activated(
int)),
67 QObject::connect(guiSettingTab->getSettingTab()->newIKSolutionButton,
70 SLOT(newIKSolution()));
73 QObject::connect(guiSettingTab->getSettingTab()->collisionModelComboBox,
74 SIGNAL(activated(
int)),
76 SLOT(selectActiveCM(
int)));
79 QObject::connect(guiSettingTab->getSettingTab()->collisionModelList,
80 SIGNAL(itemChanged(QListWidgetItem*)),
82 SLOT(setCollisionModelList(QListWidgetItem*)));
85 QObject::connect(guiSettingTab->getSettingTab()->convertToMMMButton,
88 SLOT(convertToMMMSlot()));
91 QObject::connect(guiSettingTab->getSettingTab()->importButton,
94 SLOT(openImportDialog()));
100 ARMARX_INFO <<
"RobotTrajectoryDesigner: SettingController on disconnect";
106 ARMARX_INFO <<
"RobotTrajectoryDesigner: SettingController on exit";
118 return this->guiSettingTab;
124 if (guiSettingTab != NULL)
126 this->guiSettingTab = guiSettingTab;
131 SettingController::openRobotSelectionDialog()
137 SettingController::openShortcutDialog()
152 emit
changedTCP(this->guiSettingTab->getSettingTab()->tcpComboBox->currentText());
156 enableWidgets(
false);
163 QComboBox* combobox = guiSettingTab->getSettingTab()->tcpComboBox;
164 int index = combobox->findText(tcp);
169 combobox->setCurrentIndex(
index);
174 SettingController::selectActiveCM(
int index)
176 QListWidget* cmList = this->guiSettingTab->getSettingTab()->collisionModelList;
180 for (
int i = 0; i < cmList->count(); i++)
182 QListWidgetItem* item = cmList->item(i);
183 if (i == (
index - 1))
185 item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
189 item->setFlags(item->flags() | Qt::ItemIsEnabled);
192 cmList->setEnabled(
true);
196 cmList->setEnabled(
false);
199 guiSettingTab->getSettingTab()->collisionModelComboBox->itemText(
index));
203 SettingController::setCollisionModelList(QListWidgetItem* item)
207 QComboBox* tcp = guiSettingTab->getSettingTab()->tcpComboBox;
208 QComboBox* cm = guiSettingTab->getSettingTab()->collisionModelComboBox;
211 if ((tcp->currentIndex() > 0) && (cm->currentIndex() > 0))
213 QListWidget* models = guiSettingTab->getSettingTab()->collisionModelList;
214 QStringList bodyCollisionModels;
217 for (
int i = 0; i < models->count(); i++)
219 if (models->item(i)->checkState() == Qt::Checked)
221 bodyCollisionModels.push_back(models->item(i)->text());
230 SettingController::exportTrajectorySlot()
236 SettingController::convertToMMMSlot()
242 SettingController::openImportDialog()
248 SettingController::setLanguage(
int index)
263 this->guiSettingTab->getSettingTab()->newIKSolutionButton->setEnabled(enable);
269 this->guiSettingTab->getSettingTab()->convertToMMMButton->setEnabled(enable);
276 this->guiSettingTab->getSettingTab()->collisionModelComboBox->setEnabled(enable);
277 this->guiSettingTab->getSettingTab()->collisionModelList->setEnabled(enable);
278 this->guiSettingTab->getSettingTab()->tcpComboBox->setEnabled(enable);
279 this->guiSettingTab->getSettingTab()->importButton->setEnabled(enable);
283 SettingController::newIKSolution()
287 VirtualRobot::RobotNodeSetPtr activeKinematicChain = robot->getRobotNodeSet(
288 guiSettingTab->getSettingTab()->tcpComboBox->currentText().toStdString());
289 std::vector<double> newJA =
290 kc->solveIK(activeKinematicChain,
291 PoseBasePtr(
new Pose(activeKinematicChain->getTCP()->getGlobalPose())),
292 VirtualRobot::IKSolver::CartesianSelection::All,
294 if (newJA.size() != 0)
296 activeKinematicChain->setJointValues(std::vector<float>(newJA.begin(), newJA.end()));
303 throw(
"not yet implemented");
309 guiSettingTab->getSettingTab()->robotSelectionButton->setEnabled(enable);
315 guiSettingTab->getSettingTab()->tcpComboBox->clear();
316 guiSettingTab->getSettingTab()->collisionModelComboBox->clear();
317 guiSettingTab->getSettingTab()->collisionModelList->clear();
318 this->environment = environment;
321 initTCPComboBox(robot);
322 initCMComboBox(robot);
330 SettingController::enableWidgets(
bool enable)
332 this->guiSettingTab->getSettingTab()->collisionModelComboBox->setEnabled(enable);
333 this->guiSettingTab->getSettingTab()->collisionModelList->setEnabled(enable);
341 QComboBox* tcpComboBox = this->guiSettingTab->getSettingTab()->tcpComboBox;
344 tcpComboBox->setFocusPolicy(Qt::StrongFocus);
345 tcpComboBox->installEventFilter(
new WheelEventFilter(
this));
349 tcpComboBox->clear();
352 tcpComboBox->insertItem(0, QString::fromStdString(
"- select -"));
354 auto robotNodeSets = robot->getRobotNodeSets();
357 for (VirtualRobot::RobotNodeSetPtr
s : robotNodeSets)
359 if ((
s->isKinematicChain()) && (
s->getTCP() != NULL))
361 ARMARX_DEBUG <<
"Add item " <<
s->getName() <<
" to tcp combo box";
362 tcpComboBox->addItem(QString::fromStdString(
s->getName()));
365 tcpComboBox->setEnabled(
true);
366 tcpComboBox->setCurrentIndex(0);
371 tcpComboBox->setEnabled(
false);
378 QComboBox* cmComboBox = this->guiSettingTab->getSettingTab()->collisionModelComboBox;
381 cmComboBox->setFocusPolicy(Qt::StrongFocus);
382 cmComboBox->installEventFilter(
new WheelEventFilter(
this));
389 cmComboBox->insertItem(0, QString::fromStdString(
"- select -"));
391 auto robotNodeSets = robot->getRobotNodeSets();
394 for (VirtualRobot::RobotNodeSetPtr
s : robotNodeSets)
396 if (
s->isKinematicChain())
398 ARMARX_DEBUG <<
"Add item " <<
s->getName() <<
" to collision model combo box";
399 cmComboBox->addItem(QString::fromStdString(
s->getName()));
402 cmComboBox->setCurrentIndex(0);
407 cmComboBox->setEnabled(
false);
414 QListWidget* cmList = this->guiSettingTab->getSettingTab()->collisionModelList;
419 auto robotNodeSets = robot->getRobotNodeSets();
421 for (VirtualRobot::RobotNodeSetPtr
s : robotNodeSets)
423 if (
s->isKinematicChain())
425 QListWidgetItem* item =
426 new QListWidgetItem(QString::fromStdString(
s->getName()));
427 item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
428 item->setCheckState(Qt::Unchecked);
429 ARMARX_DEBUG <<
"Add item " <<
s->getName() <<
" to collision model list";
430 cmList->addItem(item);
437 cmList->setEnabled(
false);