SimoxCSpaceVisualizerWidgetController.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package RobotComponents
19  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
20  * @date 2015
21  * @copyright http://www.gnu.org/licenses/gpl.txt
22  * GNU General Public License
23  */
24 
25 #include <utility>
26 #include <unordered_set>
27 
28 #include <QWidget>
29 #include <QString>
30 #include <QSlider>
31 #include <QLabel>
32 #include <QDoubleSpinBox>
33 #include <QSpinBox>
34 #include <QComboBox>
35 #include <QPushButton>
36 #include <QGroupBox>
37 #include <QTableWidget>
38 #include <QTableWidgetItem>
39 #include <QFileDialog>
40 
41 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
42 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
43 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.h>
44 #include <VirtualRobot/Robot.h>
45 #include <VirtualRobot/RobotNodeSet.h>
46 
49 
51 #include <RobotComponents/interface/components/MotionPlanning/Tasks/MotionPlanningTask.h>
53 #include <VirtualRobot/Visualization/Visualization.h>
54 #include <MotionPlanning/CSpace/CSpaceSampled.h>
55 
57 #include <VirtualRobot/Robot.h>
58 
59 void clearLayout(QLayout* layout, bool deleteWidgets = true)
60 {
61  while (QLayoutItem* item = layout->takeAt(0))
62  {
63  if (deleteWidgets)
64  {
65  if (QWidget* widget = item->widget())
66  {
67  widget->deleteLater();
68  }
69  }
70  if (QLayout* childLayout = item->layout())
71  {
72  clearLayout(childLayout, deleteWidgets);
73  }
74  delete item;
75  }
76 }
77 
78 using namespace armarx;
79 
80 static const float EDGE_WIDTH
81 {
82  1.f
83 };
84 static const armarx::DrawColor EDGE_COLOR_TREE
85 {
86  0.f, 1.f, 0.f, 1.f
87 };
88 static const armarx::DrawColor EDGE_COLOR_PATH
89 {
90  0.f, 0.f, 1.f, 1.f
91 };
92 
94 {
95  widget.setupUi(getWidget());
96 
97  visuRoot = nullptr;
98  mutex3D.reset(new RecursiveMutex());
99 
100  //global widget settings
101  widget.sliderPathPosition->setScalePosition(QwtSlider::LeadingScale);
102  widget.sliderPathPosition->setScaleStepSize(0.001);
103 
104  //add list for server tasks
105 
106  motionPlanningServerTaskList = new MotionPlanningServerTaskList {};
107  widget.loadFromServerLayout->addWidget(motionPlanningServerTaskList);
108 
109  updateCollisionStateTimer.setSingleShot(true);
110 
111  connect(&updateCollisionStateTimer, SIGNAL(timeout()), this, SLOT(updateCollisionState()));
112 }
113 
115 {
116  motionPlanningServerProxyName = settings->value("motionPlanningServerProxyName", QString::fromStdString(motionPlanningServerProxyName)).toString().toStdString();
117 }
118 
120 {
121  settings->setValue("motionPlanningServerProxyName", QString::fromStdString(motionPlanningServerProxyName));
122 }
123 
125 {
126  return "MotionPlanning.SimoxCSpaceVisualizer";
127 }
128 
130 {
131  visuRoot = new SoSeparator();
132  visuRoot->ref();
133 
134  // visu agent needs to be at top of tree if coin so that its selection node is found first
135  visuAgent = new SoSeparator();
136  visuAgent->ref();
137  visuRoot->addChild(visuAgent);
138 
139  // create the debugdrawer
140  std::string debugDrawerComponentName = generateSubObjectName("DebugDrawer");
141  ARMARX_INFO << "Creating debug drawer component " << debugDrawerComponentName;
142  debugDrawer = Component::create<armarx::DebugDrawerComponent>(getIceProperties(), debugDrawerComponentName);
143 
144  if (mutex3D)
145  {
146  debugDrawer->setMutex(mutex3D);
147  }
148  else
149  {
150  ARMARX_ERROR << " No 3d mutex available...";
151  }
152 
153  getArmarXManager()->addObject(debugDrawer);
154 
155  {
156  std::unique_lock lock(*mutex3D);
157  visuRoot->addChild(debugDrawer->getVisualization());
158  }
159 
160  setEnabledSimoxCSpace(false);
161  connectSlots();
162 
163  usingProxy(motionPlanningServerProxyName);
164 }
165 
167 {
168  if (!dialog)
169  {
170  dialog = new SimpleConfigDialog(parent);
171  dialog->addProxyFinder<MotionPlanningServerInterfacePrx>({"MotionPlanningServer", "The MotionPlanningServer (empty for none)", "*Server"});
172  }
173  return qobject_cast<SimpleConfigDialog*>(dialog);
174 }
175 
177 {
178  motionPlanningServerProxy = getProxy<MotionPlanningServerInterfacePrx>(motionPlanningServerProxyName);
179  motionPlanningServerTaskList->setMotionPlanningServer(motionPlanningServerProxy);
180  motionPlanningServerTaskList->enableAutoUpdate(true);
182 }
183 
185 {
186  if (visuRoot)
187  {
188  std::cout << "Returning scene = " << visuRoot->getName() << std::endl;
189  }
190 
191  return visuRoot;
192 }
193 
195 {
196  this->mutex3D = mutex3D;
197 
198  if (debugDrawer)
199  {
200  debugDrawer->setMutex(mutex3D);
201  }
202 }
203 
205 {
206  connect(widget.pushButtonLoadTask, SIGNAL(clicked()), this, SLOT(loadTask()));
207 
208  connect(widget.checkBoxShowTreeEdges, SIGNAL(clicked()), this, SLOT(updateEdgeVisibility()));
209  connect(widget.checkBoxDrawTrace, SIGNAL(clicked(bool)), this, SLOT(drawEdges(bool)));
210 
211  connect(widget.doubleSpinBoxTraceStep, SIGNAL(valueChanged(double)), this, SLOT(traceStepChanged()));
212  connect(widget.pushButtonHideAllPaths, SIGNAL(clicked()), this, SLOT(hideAllPaths()));
213 
214  connect(widget.pushButtonSetConfig, SIGNAL(clicked()), this, SLOT(setCurrentConfig()));
215  connect(widget.spinBoxPathNumber, SIGNAL(valueChanged(int)), this, SLOT(setCurrentPath()));
216  connect(widget.sliderPathPosition, SIGNAL(valueChanged(double)), this, SLOT(setCurrentPathPosition()));
217  connect(widget.sliderPathPosition, SIGNAL(valueChanged(double)), this, SLOT(setCurrentPathPosition()));
218  connect(widget.checkBoxCollisionNodeHighlighting, SIGNAL(toggled(bool)), this, SLOT(highlightCollisionNodes(bool)));
219  startTimer(timerPeriod);
220 }
221 
223 {
224  if (widget.checkBoxDrawTrace->isChecked())
225  {
226  drawEdges(true);
227  }
228 }
229 
231 {
232  for (std::size_t pIdx = 0; pIdx < paths.size(); ++pIdx)
233  {
234  auto&& path = paths.at(pIdx);
235  debugDrawer->enableLayerVisu(PathData::getEdgeLayerName(pIdx), path.visible && widget.checkBoxShowTreeEdges->isChecked());
236  }
237 }
238 
240 {
241  //switch here if new sources are added
243 }
244 
246 {
248  int newPath = widget.spinBoxPathNumber->value() - 1;
249 
250  if (newPath < 0)
251  {
252  return;
253  }
254 
255  widget.sliderPathPosition->setScale(0.0, getCurrentPath().getLength());
256  widget.sliderPathPosition->setValue(0);
257  widget.sliderPathPosition->setScaleStepSize(getCurrentPath().getLength() * 0.3);
258  widget.sliderPathPosition->setTotalSteps(100);
259  widget.labelCurrentPathNodeCount->setText(QString::number(getCurrentPath().path.size()));
260  widget.labelCurrentPathTotalLen->setText(QString::number(getCurrentPath().getLength()));
262 }
263 
265 {
266  if (!widget.spinBoxPathNumber->value())
267  {
268  widget.labelCurrentPathCurrentLen->setText(QString::number(0));
269  return;
270  }
271  const auto& path = getCurrentPath().path;
272  const auto& pathAcc = getCurrentPath().accPathLength;
273  const auto val = widget.sliderPathPosition->value();
274  widget.labelCurrentPathCurrentLen->setText(QString::number(val));
275  auto indexTo = std::distance(pathAcc.begin(), std::upper_bound(pathAcc.begin(), pathAcc.end(), val));
276  widget.labelCurrentPathCurrentNode->setText(QString::number(indexTo));
277 
278  assert(indexTo >= 0);
279  assert(static_cast<std::size_t>(indexTo) <= path.size());
280 
281  if (indexTo == 0)
282  {
283  setAndApplyConfig(path.front());
284  return;
285  }
286 
287  if (static_cast<std::size_t>(indexTo) == path.size())
288  {
289  setAndApplyConfig(path.back());
290  return;
291  }
292 
293  auto indexFrom = indexTo - 1;
294  auto cfgFrom = path.at(indexFrom);
295  auto cfgTo = path.at(indexTo);
296 
297  auto t = (val - pathAcc.at(indexFrom)) / (pathAcc.at(indexTo) - pathAcc.at(indexFrom));
298  VectorXf cfgToSet;
299 
300 
301  SimoxCSpacePtr simoxcspace = SimoxCSpacePtr::dynamicCast(cspaceUtil);
302  if (!simoxcspace)
303  {
304  CSpaceAdaptorBasePtr simoxcspaceadapter = CSpaceAdaptorBasePtr::dynamicCast(cspaceUtil);
305  if (simoxcspaceadapter)
306  {
307  simoxcspace = SimoxCSpacePtr::dynamicCast(simoxcspaceadapter->getOriginalCSpace());
308  }
309  }
310  if (simoxcspace)
311  {
312  // do robot specific interpolation
313  VirtualRobot::RobotNodeSetPtr rns = VirtualRobot::RobotNodeSet::createRobotNodeSet(simoxcspace->getAgentSceneObj(), "tmp",
314  simoxcspace->getAgentJointNames());
315  Saba::CSpaceSampled tmpCSpace(simoxcspace->getAgentSceneObj(), VirtualRobot::CDManagerPtr(new VirtualRobot::CDManager(simoxcspace->getCD())), rns);
316  Eigen::VectorXf from = Eigen::Map<Eigen::VectorXf>(cfgFrom.data(), cfgFrom.size());
317  Eigen::VectorXf to = Eigen::Map<Eigen::VectorXf>(cfgTo.data(), cfgTo.size());
318  auto config = tmpCSpace.interpolate(from, to, t);
319  cfgToSet = (VectorXf {config.data(), config.data() + config.rows()});
320 
321  }
322  else
323  {
324  std::transform(cfgFrom.begin(), cfgFrom.end(), cfgTo.begin(), std::back_inserter(cfgToSet),
325  [t](float from, float to)
326  {
327  return t * to + (1 - t) * from;
328  }
329  );
330  }
331  setAndApplyConfig(cfgToSet);
332 }
333 
335 {
336  if (!cspaceVisu)
337  {
338  return;
339  }
340 
341  VectorXf cfg(cspaceVisu->getDimensionality());
342 
343  for (std::size_t i = 0; i < cfg.size(); ++i)
344  {
345  cfg.at(i) = dynamic_cast<QDoubleSpinBox*>(widget.tableWidgetDims->cellWidget(i, 2))->value();
346  }
347 
348  ARMARX_DEBUG_S << "Setting visu config to: " << cfg;
349 
350  const float* it = cfg.data();
351  cspaceVisu->setConfig(it);
352  widget.labelCurrentMinObjDist->setText("loading...");
353  widget.labelCurrentCollisionState->setText("loading...");
354  updateCollisionStateTimer.start(100);
355 }
356 
358 {
359  widget.labelCurrentMinObjDist->setText(QString::number(cspaceVisu->getCD().getDistance()));
360  widget.labelCurrentCollisionState->setText(cspaceVisu->getCD().isInCollision() ? QString {"in collision"}: QString {"no collision"});
361 
362 }
363 
365 {
366  std::vector<std::string> nodeNames;
367  nodeNames.reserve(robotNodes.size());
368  for (const auto& node : robotNodes)
369  {
370  if (node.second)
371  {
372  nodeNames.emplace_back(node.first->getName());
373  }
374  }
375 
376  for (std::size_t idxPath = 0; idxPath < paths.size(); ++idxPath)
377  {
378  const auto& pDat = paths.at(idxPath);
379  const auto& p = pDat.path;
380 
381  const auto layer = PathData::getEdgeLayerName(idxPath);
382 
383  if (p.empty())
384  {
385  continue;
386  }
387 
388  //extract poses for each node and cfg
389  const float traceStep = drawTrace ? static_cast<float>(widget.doubleSpinBoxTraceStep->value()) : std::numeric_limits<float>::infinity();
390  auto traces = cspaceUtil->getTraceVisu(p, nodeNames, traceStep);
391 
392  //draw
393  for (std::size_t i = 0; i < traces.size(); ++i)
394  {
395  DebugDrawerLineSet& trace = traces.at(i);
396  trace.colorFullIntensity = EDGE_COLOR_PATH;
397  trace.colorNoIntensity = EDGE_COLOR_PATH;
398  trace.lineWidth = EDGE_WIDTH;
399  trace.intensities.assign(trace.points.size() / 2, 1);
400  debugDrawer->setLineSetVisu(layer, "trace:" + nodeNames.at(i), trace);
401  }
402  }
403 }
404 
406 {
407  auto&& path = paths.at(index);
408  const bool vis = (state == Qt::Checked);
409  path.visible = vis;
410  debugDrawer->enableLayerVisu(PathData::getEdgeLayerName(index), vis && widget.checkBoxShowTreeEdges->isChecked());
411 }
412 
414 {
415  for (int i = 0; static_cast<std::size_t>(i) < paths.size(); ++i)
416  {
417  dynamic_cast<QCheckBox*>(widget.tableWidgetPaths->cellWidget(i, 0))->setChecked(false);
418  }
419 }
420 
422 {
423  if (!motionPlanningServerProxy)
424  {
425  return;
426  }
427  const auto taskId = motionPlanningServerTaskList->getSelectedId();
428 
429  if (!taskId)
430  {
431  return;
432  }
433 
434  auto taskCSpaceAndPaths = motionPlanningServerProxy->getTaskCSpaceAndPathsById(*taskId);
435 
436  auto& taskCSpace = taskCSpaceAndPaths.cspace;
437 
438  if (!taskCSpace)
439  {
440  ARMARX_ERROR_S << "Task with id " << *taskId << " returned an empty cspace!";
441  return;
442  }
443 
444  //unwrap cspace adaptors
445  while (taskCSpace->ice_isA(CSpaceAdaptor::ice_staticId()))
446  {
447  if (taskCSpace->ice_isA(ScaledCSpace::ice_staticId()))
448  {
449  auto scalingCSpace = ScaledCSpacePtr::dynamicCast(taskCSpace);
450  for (auto& path : taskCSpaceAndPaths.paths)
451  {
452  scalingCSpace->unscalePath(path);
453  }
454  }
455 
456  taskCSpace = CSpaceAdaptorPtr::dynamicCast(taskCSpace)->getOriginalCSpace();
457  }
458 
459  if (taskCSpace->ice_isA(SimoxCSpace::ice_staticId()))
460  {
461  SimoxCSpacePtr cspace = SimoxCSpacePtr::dynamicCast(taskCSpace);
462  setSimoxCSpace(cspace);
463  setPaths(std::move(taskCSpaceAndPaths.paths));
464  }
465 }
466 
468 {
469  soSeparatorRemoveFromRoot(toRemove);
470  soSeparatorCleanUp(toRemove);
471 }
472 
474 {
475  std::unique_lock lock(*mutex3D);
476 
477  if (toClear)
478  {
479  toClear->removeAllChildren();
480  toClear->unref();
481  toClear = nullptr;
482  }
483 }
484 
486 {
487  std::unique_lock lock(*mutex3D);
488 
489  if (!visuRoot || !toRemove)
490  {
491  return;
492  }
493 
494  if (visuRoot->findChild(toRemove) >= 0)
495  {
496  visuRoot->removeChild(toRemove);
497  }
498 }
499 
501 {
502  std::unique_lock lock(*mutex3D);
503 
504  if (!visuRoot || !toAdd)
505  {
506  return;
507  }
508 
509  if (visuRoot->findChild(toAdd) < 0)
510  {
511  visuRoot->addChild(toAdd);
512  }
513 }
514 
516 {
517  std::unique_lock lock(*mutex3D);
518 
519  if (!visuRoot || !toToggle)
520  {
521  return;
522  }
523 
524  if (visuRoot->findChild(toToggle) < 0)
525  {
526  visuRoot->addChild(toToggle);
527  }
528  else
529  {
530  visuRoot->removeChild(toToggle);
531  }
532 }
533 
535 {
536  std::unique_lock lock(*mutex3D);
537 
538  if (!visuRoot || !child)
539  {
540  return;
541  }
542 
543  if (visible)
544  {
545  if (visuRoot->findChild(child) < 0)
546  {
547  visuRoot->addChild(child);
548  }
549  }
550  if (!visible)
551  {
552  if (!(visuRoot->findChild(child) < 0))
553  {
554  visuRoot->removeChild(child);
555  }
556  }
557 }
558 
560 {
562  cspaceUtil = SimoxCSpacePtr::dynamicCast(newCSpace->clone());
563  cspaceVisu = SimoxCSpacePtr::dynamicCast(newCSpace->clone(true));
564  cspaceUtil->initCollisionTest();
565  cspaceVisu->initCollisionTest();
566 
567  //set group box "current config"
568  const auto&& dimensions = cspaceUtil->getDimensionsBounds();
569  auto jointNames = cspaceUtil->getAgentJointNames();
570  assert(jointNames.size() == dimensions.size());
571 
572  widget.tableWidgetDims->setRowCount(dimensions.size());
573 
574  for (std::size_t i = 0; i < dimensions.size(); ++i)
575  {
576  const std::string& name = jointNames.at(i);
577  const FloatRange& bounds = dimensions.at(i);
578 
579  widget.tableWidgetDims->setItem(i, 0, new QTableWidgetItem {QString::fromStdString(name)});
580 
581  widget.tableWidgetDims->setItem(i, 1, new QTableWidgetItem {QString::number(bounds.min)});
582  auto spinbox = new QDoubleSpinBox {};
583  spinbox->setRange(bounds.min, bounds.max);
584  widget.tableWidgetDims->setCellWidget(i, 2, spinbox);
585  widget.tableWidgetDims->setItem(i, 3, new QTableWidgetItem {QString::number(bounds.max)});
586  spinbox->setSingleStep((bounds.max - bounds.min) / 10000.0);
587  connect(spinbox, SIGNAL(valueChanged(double)), widget.pushButtonSetConfig, SIGNAL(clicked()));
588  }
589 
590  visuObjStat.resize(cspaceVisu->getStationaryObjectSet()->getSize());
591  //add visu agent
592  {
593  std::unique_lock lock(*mutex3D);
594  auto robot = cspaceVisu->getAgentSceneObj();
595  robot->setUpdateVisualization(true);
596  robotVisu = robot->getVisualization<VirtualRobot::CoinVisualization>();
597  ARMARX_IMPORTANT << "Setting visu of robot " << robot.get();
598  auto robotCoinVisu = robotVisu->getCoinVisualization(true);
599  highlightCollisionNodes(widget.checkBoxCollisionNodeHighlighting->checkState() == Qt::Checked);
600  visuAgent->removeAllChildren();
601  visuAgent->addChild(robotCoinVisu);
602  //add to table
603  auto boxVis = new QCheckBox {QString::fromStdString(robot->getName())};
604  boxVis->setChecked(true);
605  connect(boxVis, SIGNAL(stateChanged(int)), this, SLOT(setVisibilityAgent(int)));
606 
607  widget.scrollAreaWidgetContentsObj->layout()->addWidget(boxVis);
608  }
609 
610 
611  //add visu stat obj
612  for (int i = 0; i < static_cast<int>(visuObjStat.size()); ++i)
613  {
614  auto sceneObj = cspaceVisu->getStationaryObjectSet()->getSceneObject(i);
615  // auto& obj = cspaceVisu->getStationaryObjects().at(i);
616  auto& sep = visuObjStat.at(i);
617  //add visu
618  sep = new SoSeparator();
619  sep->ref();
620  sceneObj->setUpdateVisualization(true);
621  sceneObj->setUpdateCollisionModel(true);
622  auto* visu = dynamic_cast<VirtualRobot::CoinVisualizationNode*>(sceneObj->getVisualization(VirtualRobot::SceneObject::Collision).get());
623  auto coin = visu->getCoinVisualization();
624  ARMARX_INFO << sceneObj->getName() << " visu: " << visu << " coin: " << coin;
625  sep->addChild(coin);
627  //add to table
628  auto boxVis = new IndexedQCheckBox {i, QString::fromStdString(sceneObj->getName())};
629  boxVis->setChecked(true);
630  connect(boxVis, SIGNAL(stateChangedIndex(int, Qt::CheckState)), this, SLOT(setVisibilityObjectStationary(int, Qt::CheckState)));
631  widget.scrollAreaWidgetContentsObj->layout()->addWidget(boxVis);
632  }
633 
634 
635  //add list of nodes
636  auto nodes = cspaceUtil->getAgentSceneObj()->getRobotNodes();
637  robotNodes.clear();
639  nodes.begin(), nodes.end(), std::back_inserter(robotNodes),
640  [](VirtualRobot::RobotNodePtr & nptr)
641  {
642  return std::pair<VirtualRobot::RobotNodePtr, bool> {std::move(nptr), false};
643  }
644  );
645 
646  //tcps of used kinematic chains are visible per default
647  std::set<std::string> visTcps;
648  const auto& kinematicChainNames = cspaceUtil->getAgent().kinemaicChainNames;
650  kinematicChainNames.begin(), kinematicChainNames.end(), std::inserter(visTcps, visTcps.begin()),
651  [this](const std::string & name)
652  {
653  return cspaceUtil->getAgentSceneObj()->getRobotNodeSet(name)->getTCP()->getName();
654  }
655  );
656 
657  for (int i = 0; i < static_cast<int>(robotNodes.size()); ++i)
658  {
659  const auto& node = robotNodes.at(i).first;
660  const auto& name = node->getName();
661  bool visible = visTcps.find(name) != visTcps.end();
662  robotNodes.at(i).second = visible;
663 
664  auto boxVis = new IndexedQCheckBox {i, QString::fromStdString(node->getName())};
665  boxVis->setChecked(visible);
666  connect(boxVis, SIGNAL(stateChangedIndex(int, Qt::CheckState)), this, SLOT(toggleRobotNodePath(int, Qt::CheckState)));
667  widget.scrollAreaWidgetContentsJoints->layout()->addWidget(boxVis);
668  }
669 
670  setCurrentConfig();
671  setEnabledSimoxCSpace();
672 }
673 
674 void SimoxCSpaceVisualizerWidgetController::toggleRobotNodePath(int index, Qt::CheckState)
675 {
676  robotNodes.at(index).second ^= 1;
677  drawEdges();
678 }
679 
680 void SimoxCSpaceVisualizerWidgetController::setPaths(std::vector<Path> newPaths)
681 {
682  resetPaths();
683 
684  assert(paths.empty());
685 
687  newPaths.begin(), newPaths.end(), std::back_inserter(paths),
688  [](Path & p)
689  {
690  PathData dat;
691  dat.path = std::move(p.nodes);
692 
693  float lengthAcc = 0;
694  dat.accPathLength.emplace_back(0);
695  for (std::size_t i = 1; i < dat.path.size(); ++i)
696  {
697  const auto& cfg1 = dat.path.at(i - 1);
698  const auto& cfg2 = dat.path.at(i);
699 
700  lengthAcc += euclideanDistance(cfg1.begin(), cfg1.end(), cfg2.begin());
701  dat.accPathLength.emplace_back(lengthAcc);
702  }
703 
704  return dat;
705  }
706  );
707 
708  widget.spinBoxPathNumber->setMaximum(paths.size());
709 
710  widget.tableWidgetPaths->setRowCount(paths.size());
711  for (std::size_t i = 0; i < paths.size(); ++i)
712  {
713  const auto& p = paths.at(i);
714  widget.tableWidgetPaths->setItem(i, 1, new QTableWidgetItem {QString::number(p.path.size())});
715  widget.tableWidgetPaths->setItem(i, 2, new QTableWidgetItem {QString::number(p.getLength())});
716 
717  auto boxVis = new IndexedQCheckBox {static_cast<int>(i), QString::fromStdString(newPaths.at(i).pathName)};
718  connect(boxVis, SIGNAL(stateChangedIndex(int, Qt::CheckState)), this, SLOT(setVisibilityPath(int, Qt::CheckState)));
719  boxVis->setChecked(true);
720  widget.tableWidgetPaths->setCellWidget(i, 0, boxVis);
721  }
722 
723  setEnabledPaths(true);
724  //draw
725  drawEdges();
726  updateEdgeVisibility();
727 }
728 
730 {
731  if (widget.tableWidgetDims->columnCount() < 2)
732  {
733  return;
734  }
735  for (std::size_t i = 0; i < cfg.size() && (int)i < widget.tableWidgetDims->rowCount(); ++i)
736  {
737  auto spinbox = dynamic_cast<QDoubleSpinBox*>(widget.tableWidgetDims->cellWidget(i, 2));
738  if (spinbox)
739  {
740  spinbox->setValue(cfg.at(i));
741  }
742  }
744 }
745 
747 {
748  resetPaths();
749  setEnabledSimoxCSpace(false);
750 
751  widget.labelCurrentMinObjDist->setText("");
752  widget.tableWidgetDims->clearContents();
753  widget.tableWidgetDims->setRowCount(0);
754 
755  clearLayout(widget.scrollAreaWidgetContentsJoints->layout());
756  clearLayout(widget.scrollAreaWidgetContentsObj->layout());
757 
758  for (auto& sep : visuObjStat)
759  {
761  }
762  visuObjStat.clear();
763  robotVisu.reset();
764  visuAgent->removeAllChildren();
765  debugDrawer->clearAll();
766  cspaceUtil = nullptr;
767  cspaceVisu = nullptr;
768 }
769 
771 {
772  setEnabledPaths(false);
774  widget.tableWidgetPaths->clearContents();
775  widget.spinBoxPathNumber->setMaximum(0);
776  widget.doubleSpinBoxMovePerMs->setValue(0);
777  paths.clear();
778 }
779 
781 {
782  widget.groupBoxCurCfg->setEnabled(active);
783  widget.groupBoxVisPath->setEnabled(active);
784  widget.groupBoxVisObj->setEnabled(active);
785 }
786 
788 {
789  widget.groupBoxPaths->setEnabled(active);
790  widget.groupBoxPathOpt->setEnabled(active);
791 }
792 
794 {
795  const auto step = widget.doubleSpinBoxMovePerMs->value() * timerPeriod;
796 
797  if (widget.checkBoxAnimate->isChecked() && step != 0)
798  {
799  widget.sliderPathPosition->setValue(widget.sliderPathPosition->value() + step);
800  }
801 }
802 
804 {
805  if (!cspaceVisu)
806  {
807  return;
808  }
809  if (!robotVisu)
810  {
811  return;
812  }
813  auto robot = cspaceVisu->getAgentSceneObj();
814  //add visu
815  std::unique_lock lock(*mutex3D);
816  robot->setUpdateVisualization(true);
817 
818 
819  std::set<std::string> nodesToHighlight;
820  for (auto& setName : cspaceVisu->getAgent().collisionSetNames)
821  {
822  auto set = robot->getRobotNodeSet(setName);
823  for (size_t i = 0; i < set->getSize(); ++i)
824  {
825  VirtualRobot::RobotNodePtr node = set->getNode(i);
826  nodesToHighlight.insert(node->getName());
827  }
828  }
829 
830  for (auto& name : nodesToHighlight)
831  {
832  auto node = robot->getRobotNode(name);
833  ARMARX_INFO << "highlighting: " << node->getName() << ": " << enabled;
834  node->highlight(robotVisu, enabled);
835 
836  }
837 }
armarx::ManagedIceObject::setName
void setName(std::string name)
Override name of well-known object.
Definition: ManagedIceObject.cpp:426
armarx::ArmarXWidgetController::mutex3D
std::shared_ptr< std::recursive_mutex > mutex3D
Definition: ArmarXWidgetController.h:301
armarx::SimoxCSpaceVisualizerWidgetController::setCurrentPathPosition
void setCurrentPathPosition()
Updates the current position on the current path according to the user selection.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:264
armarx::SimoxCSpaceVisualizerWidgetController::setVisibilityObjectStationary
void setVisibilityObjectStationary(int index, Qt::CheckState state)
Sets the visibility of the given stationary object.
Definition: SimoxCSpaceVisualizerWidgetController.h:254
armarx::SimoxCSpaceVisualizerWidgetController::timerEvent
void timerEvent(QTimerEvent *) override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:793
armarx::SimoxCSpaceVisualizerWidgetController::PathData::accPathLength
std::vector< float > accPathLength
The path's length up to the i-th node.
Definition: SimoxCSpaceVisualizerWidgetController.h:125
armarx::SimoxCSpaceVisualizerWidgetController::PathData::path
VectorXfSeq path
Definition: SimoxCSpaceVisualizerWidgetController.h:109
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::ArmarXWidgetController::RecursiveMutex
std::recursive_mutex RecursiveMutex
Definition: ArmarXWidgetController.h:255
armarx::SimoxCSpaceVisualizerWidgetController::getScene
SoNode * getScene() override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:184
index
uint8_t index
Definition: EtherCATFrame.h:59
ArmarXManager.h
armarx::SimoxCSpaceVisualizerWidgetController::setMutex3D
void setMutex3D(RecursiveMutexPtr const &mutex3D) override
Sets the mutex used to protect the bullet scene.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:194
armarx::SimoxCSpaceVisualizerWidgetController::SimoxCSpaceVisualizerWidgetController
SimoxCSpaceVisualizerWidgetController()
Controller Constructor.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:93
armarx::SimoxCSpaceVisualizerWidgetController::resetCurrentPath
void resetCurrentPath()
Definition: SimoxCSpaceVisualizerWidgetController.h:343
ScaledCSpace.h
armarx::SimoxCSpaceVisualizerWidgetController::setSimoxCSpace
void setSimoxCSpace(SimoxCSpacePtr newCSpace)
Sets a new simox CSpace (and cleans up the old one)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:559
armarx::SimoxCSpaceVisualizerWidgetController::updateCollisionState
void updateCollisionState()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:357
armarx::IndexedQCheckBox
A check box with an index.
Definition: IndexedQCheckBox.h:33
armarx::ManagedIceObject::getArmarXManager
ArmarXManagerPtr getArmarXManager() const
Returns the ArmarX manager used to add and remove components.
Definition: ManagedIceObject.cpp:348
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorRootChildVis
void soSeparatorRootChildVis(SoSeparator *child, bool visible=true)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:534
armarx::SimoxCSpaceVisualizerWidgetController::getCurrentPath
PathData & getCurrentPath()
Definition: SimoxCSpaceVisualizerWidgetController.h:219
armarx::SimoxCSpaceVisualizerWidgetController::setCurrentConfig
void setCurrentConfig()
Updates the current displayed configuration .
Definition: SimoxCSpaceVisualizerWidgetController.cpp:334
armarx::SimoxCSpaceVisualizerWidgetController::setCurrentPath
void setCurrentPath()
Updates the current path according to the user selection.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:245
armarx::SimoxCSpaceVisualizerWidgetController::highlightCollisionNodes
void highlightCollisionNodes(bool checked)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:803
armarx::SimoxCSpaceVisualizerWidgetController::drawEdges
void drawEdges()
Definition: SimoxCSpaceVisualizerWidgetController.h:244
armarx::SimoxCSpaceVisualizerWidgetController::setEnabledSimoxCSpace
void setEnabledSimoxCSpace(bool active=true)
Enables or disables the configuration selection and controles for object visibility according to the ...
Definition: SimoxCSpaceVisualizerWidgetController.cpp:780
clearLayout
void clearLayout(QLayout *layout, bool deleteWidgets=true)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:59
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorAddToRoot
void soSeparatorAddToRoot(SoSeparator *toAdd)
Adds a soseparator to the root separator.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:500
IceInternal::Handle< SimoxCSpace >
armarx::SimoxCSpaceVisualizerWidgetController::resetPaths
void resetPaths()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:770
armarx::SimoxCSpaceVisualizerWidgetController::onConnectComponent
void onConnectComponent() override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:176
armarx::SimoxCSpaceVisualizerWidgetController::resetSimoxCSpace
void resetSimoxCSpace()
Cleans up the current CSpace.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:746
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:926
armarx::ArmarXWidgetController::RecursiveMutexPtr
std::shared_ptr< RecursiveMutex > RecursiveMutexPtr
Definition: ArmarXWidgetController.h:256
ArmarXComponentWidgetController.h
ARMARX_DEBUG_S
#define ARMARX_DEBUG_S
Definition: Logging.h:198
armarx::SimoxCSpaceVisualizerWidgetController::setPaths
void setPaths(std::vector< Path > newPaths)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:680
armarx::SimoxCSpaceVisualizerWidgetController::setEnabledPaths
void setEnabledPaths(bool active=true)
Definition: SimoxCSpaceVisualizerWidgetController.cpp:787
ARMARX_ERROR_S
#define ARMARX_ERROR_S
Definition: Logging.h:209
MotionPlanningObjectFactories.h
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::ManagedIceObject::generateSubObjectName
static std::string generateSubObjectName(const std::string &superObjectName, const std::string &subObjectName)
Generates a unique name for a sub object from a general name and unique name.
Definition: ManagedIceObject.cpp:117
SimoxCSpaceVisualizerWidgetController.h
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorCleanUpAndRemoveFromRoot
void soSeparatorCleanUpAndRemoveFromRoot(SoSeparator *&toRemove)
Cleans up a soseparator and removes it from the root separator.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:467
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:189
armarx::SimoxCSpaceVisualizerWidgetController::loadTaskFromServer
void loadTaskFromServer()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:421
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorToggleRootChild
void soSeparatorToggleRootChild(SoSeparator *toToggle)
Toggles a soseparator's visibility.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:515
armarx::SimoxCSpaceVisualizerWidgetController::PathData::getEdgeLayerName
static std::string getEdgeLayerName(std::size_t i)
Definition: SimoxCSpaceVisualizerWidgetController.h:127
armarx::SimoxCSpaceVisualizerWidgetController::getConfigDialog
QPointer< QDialog > getConfigDialog(QWidget *parent) override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:166
armarx::SimoxCSpaceVisualizerWidgetController::traceStepChanged
void traceStepChanged()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:222
armarx::SimoxCSpaceVisualizerWidgetController::loadSettings
void loadSettings(QSettings *settings) override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:114
armarx::SimoxCSpaceVisualizerWidgetController::setVisibilityPath
void setVisibilityPath(int index, Qt::CheckState state)
Sets the visibility of the given solution path.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:405
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
set
set(LIBS ArmarXCoreInterfaces ${CMAKE_THREAD_LIBS_INIT} ${dl_LIBRARIES} ${rt_LIBRARIES} ${QT_LIBRARIES} ${Boost_LIBRARIES} BoostAssertionHandler ArmarXCPPUtility SimoxUtility) set(LIB_FILES ArmarXManager.cpp ArmarXMultipleObjectsScheduler.cpp ArmarXObjectScheduler.cpp ManagedIceObject.cpp ManagedIceObjectPlugin.cpp Component.cpp ComponentPlugin.cpp IceGridAdmin.cpp ArmarXObjectObserver.cpp IceManager.cpp PackagePath.cpp RemoteReferenceCount.cpp logging/LoggingUtil.cpp logging/Logging.cpp logging/LogSender.cpp logging/ArmarXLogBuf.cpp system/ArmarXDataPath.cpp system/DynamicLibrary.cpp system/ProcessWatcher.cpp system/FactoryCollectionBase.cpp system/cmake/CMakePackageFinder.cpp system/cmake/CMakePackageFinderCache.cpp system/cmake/ArmarXPackageToolInterface.cpp system/RemoteObjectNode.cpp services/sharedmemory/HardwareId.cpp services/tasks/RunningTask.cpp services/tasks/ThreadList.cpp services/tasks/ThreadPool.cpp services/profiler/Profiler.cpp services/profiler/FileLoggingStrategy.cpp services/profiler/IceLoggingStrategy.cpp application/Application.cpp application/ApplicationOptions.cpp application/ApplicationProcessFacet.cpp application/ApplicationNetworkStats.cpp application/properties/PropertyUser.cpp application/properties/Property.cpp application/properties/PropertyDefinition.cpp application/properties/PropertyDefinitionContainer.cpp application/properties/PropertyDefinitionHelpFormatter.cpp application/properties/PropertyDefinitionConfigFormatter.cpp application/properties/PropertyDefinitionBriefHelpFormatter.cpp application/properties/PropertyDefinitionXmlFormatter.cpp application/properties/PropertyDefinitionDoxygenFormatter.cpp application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.cpp application/properties/PropertyDefinitionContainerBriefHelpFormatter.cpp application/properties/IceProperties.cpp exceptions/Exception.cpp exceptions/local/UnexpectedEnumValueException.cpp util/FileSystemPathBuilder.cpp util/StringHelpers.cpp util/IceReportSkipper.cpp util/Throttler.cpp util/distributed/AMDCallbackCollection.cpp util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.cpp util/distributed/RemoteHandle/RemoteHandle.cpp util/distributed/RemoteHandle/RemoteHandleControlBlock.cpp time/ice_conversions.cpp time/json_conversions.cpp time/CallbackWaitLock.cpp time/Clock.cpp time/ClockType.cpp time/ClockTypeNames.cpp time/CycleUtil.cpp time/DateTime.cpp time/Duration.cpp time/Frequency.cpp time/LocalTimeServer.cpp time/Metronome.cpp time/ScopedStopWatch.cpp time/StopWatch.cpp time/Timer.cpp time/TimeKeeper.cpp time/TimeUtil.cpp csv/CsvWriter.cpp csv/CsvReader.cpp eigen/conversions.cpp eigen/ice_conversions.cpp) set(LIB_HEADERS ArmarXManager.h ArmarXDummyManager.h ArmarXMultipleObjectsScheduler.h ArmarXObjectObserver.h ArmarXObjectScheduler.h ArmarXFwd.h Component.h ComponentPlugin.h ComponentFactories.h CoreObjectFactories.h IceGridAdmin.h IceManager.h IceManagerImpl.h json_conversions.h ManagedIceObject.h ManagedIceObjectPlugin.h ManagedIceObjectImpl.h ManagedIceObjectDependency.h ManagedIceObjectRegistryInterface.h PackagePath.h RemoteReferenceCount.h system/ImportExport.h system/ImportExportComponent.h system/AbstractFactoryMethod.h system/FactoryCollectionBase.h system/Synchronization.h system/ArmarXDataPath.h system/DynamicLibrary.h system/ProcessWatcher.h system/ConditionSynchronization.h system/cmake/CMakePackageFinder.h system/cmake/CMakePackageFinderCache.h system/cmake/FindPackageX.cmake system/cmake/ArmarXPackageToolInterface.h system/RemoteObjectNode.h logging/LoggingUtil.h logging/LogSender.h logging/Logging.h logging/ArmarXLogBuf.h logging/SpamFilterData.h services/tasks/RunningTask.h services/tasks/PeriodicTask.h services/tasks/ThreadList.h services/tasks/TaskUtil.h services/tasks/ThreadPool.h services/sharedmemory/SharedMemoryProvider.h services/sharedmemory/SharedMemoryConsumer.h services/sharedmemory/IceSharedMemoryProvider.h services/sharedmemory/IceSharedMemoryConsumer.h services/sharedmemory/HardwareIdentifierProvider.h services/sharedmemory/HardwareId.h services/sharedmemory/exceptions/SharedMemoryExceptions.h services/profiler/Profiler.h services/profiler/LoggingStrategy.h services/profiler/FileLoggingStrategy.h services/profiler/IceLoggingStrategy.h application/Application.h application/ApplicationOptions.h application/ApplicationProcessFacet.h application/ApplicationNetworkStats.h application/properties/forward_declarations.h application/properties/Properties.h application/properties/Property.h application/properties/PluginEigen.h application/properties/PluginEnumNames.h application/properties/PluginCfgStruct.h application/properties/PluginAll.h application/properties/PropertyUser.h application/properties/PropertyDefinition.h application/properties/PropertyDefinition.hpp application/properties/PropertyDefinitionInterface.h application/properties/PropertyDefinitionContainer.h application/properties/PropertyDefinitionFormatter.h application/properties/PropertyDefinitionContainerFormatter.h application/properties/PropertyDefinitionConfigFormatter.h application/properties/PropertyDefinitionHelpFormatter.h application/properties/PropertyDefinitionBriefHelpFormatter.h application/properties/PropertyDefinitionXmlFormatter.h application/properties/PropertyDefinitionDoxygenFormatter.h application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.h application/properties/PropertyDefinitionContainerBriefHelpFormatter.h application/properties/ProxyPropertyDefinition.h application/properties/IceProperties.h exceptions/Exception.h exceptions/LocalException.h exceptions/local/DynamicLibraryException.h exceptions/local/ExpressionException.h exceptions/local/FileIOException.h exceptions/local/InvalidPropertyValueException.h exceptions/local/MissingRequiredPropertyException.h exceptions/local/PropertyInheritanceCycleException.h exceptions/local/ProxyNotInitializedException.h exceptions/local/UnexpectedEnumValueException.h exceptions/local/UnmappedValueException.h exceptions/local/ValueRangeExceededException.h exceptions/user/NotImplementedYetException.h rapidxml/rapidxml.hpp rapidxml/rapidxml_print.hpp rapidxml/rapidxml_iterators.hpp rapidxml/rapidxml_utils.hpp rapidxml/wrapper/RapidXmlReader.h rapidxml/wrapper/RapidXmlWriter.h rapidxml/wrapper/DefaultRapidXmlReader.h rapidxml/wrapper/MultiNodeRapidXMLReader.h util/IceBlobToObject.h util/ObjectToIceBlob.h util/FileSystemPathBuilder.h util/FiniteStateMachine.h util/StringHelpers.h util/StringHelperTemplates.h util/algorithm.h util/OnScopeExit.h util/Predicates.h util/Preprocessor.h util/PropagateConst.h util/Registrar.h util/TemplateMetaProgramming.h util/TripleBuffer.h util/IceReportSkipper.h util/Throttler.h util/distributed/AMDCallbackCollection.h util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.h util/distributed/RemoteHandle/RemoteHandle.h util/distributed/RemoteHandle/RemoteHandleControlBlock.h util/SimpleStatemachine.h time.h time_minimal.h time/forward_declarations.h time/ice_conversions.h time/json_conversions.h time/CallbackWaitLock.h time/Clock.h time/ClockType.h time/ClockTypeNames.h time/CycleUtil.h time/DateTime.h time/Duration.h time/Frequency.h time/LocalTimeServer.h time/Metronome.h time/ScopedStopWatch.h time/StopWatch.h time/Timer.h time/TimeUtil.h time/TimeKeeper.h csv/CsvWriter.h csv/CsvReader.h eigen/conversions.h eigen/ice_conversions.h ice_conversions.h ice_conversions/ice_conversions_boost_templates.h ice_conversions/ice_conversions_templates.h ice_conversions/ice_conversions_templates.tpp $
Definition: CMakeLists.txt:12
armarx::MotionPlanningServerTaskList
Definition: MotionPlanningServerTaskList.h:40
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:315
armarx::SimoxCSpaceVisualizerWidgetController::loadTask
void loadTask()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:239
armarx::SimoxCSpaceVisualizerWidgetController::saveSettings
void saveSettings(QSettings *settings) override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:119
armarx::SimoxCSpaceVisualizerWidgetController::updateEdgeVisibility
void updateEdgeVisibility()
Definition: SimoxCSpaceVisualizerWidgetController.cpp:230
armarx::SimoxCSpaceVisualizerWidgetController::connectSlots
void connectSlots()
Connects all slots.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:204
armarx::SimoxCSpaceVisualizerWidgetController::setVisibilityAgent
void setVisibilityAgent(int state)
Sets the visibility of the given moveable object.
Definition: SimoxCSpaceVisualizerWidgetController.h:263
armarx::armem::server::ltm::detail::mixin::Path
std::filesystem::path Path
Definition: DiskStorageMixin.h:17
armarx::SimoxCSpaceVisualizerWidgetController::getWidgetName
QString getWidgetName() const override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:124
armarx::ArmarXWidgetController::getWidget
virtual QPointer< QWidget > getWidget()
getWidget returns a pointer to the a widget of this controller.
Definition: ArmarXWidgetController.cpp:54
distance
double distance(const Point &a, const Point &b)
Definition: point.hpp:88
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorCleanUp
void soSeparatorCleanUp(SoSeparator *&toClear)
Cleans up a soseparator.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:473
armarx::PropertyUser::getIceProperties
Ice::PropertiesPtr getIceProperties() const
Returns the set of Ice properties.
Definition: PropertyUser.cpp:229
armarx::SimoxCSpaceVisualizerWidgetController::hideAllPaths
void hideAllPaths()
Hides all solution paths.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:413
armarx::SimoxCSpaceVisualizerWidgetController::setAndApplyConfig
void setAndApplyConfig(const VectorXf &cfg)
Sets a configuration and visualizes it.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:729
armarx::ManagedIceObject::usingProxy
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
Definition: ManagedIceObject.cpp:151
armarx::SimoxCSpaceVisualizerWidgetController::onInitComponent
void onInitComponent() override
Definition: SimoxCSpaceVisualizerWidgetController.cpp:129
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
IceInternal::trace
void trace(const char *, const ::Ice::OutputStream &, const ::Ice::LoggerPtr &, const TraceLevelsPtr &)
armarx::SimoxCSpaceVisualizerWidgetController::soSeparatorRemoveFromRoot
void soSeparatorRemoveFromRoot(SoSeparator *toRemove)
Removes a soseparator from the root separator.
Definition: SimoxCSpaceVisualizerWidgetController.cpp:485
armarx::clearLayout
void clearLayout(QLayout *layout)
Clear a layout.
Definition: RemoteGuiWidgetController.cpp:38
armarx::SimpleConfigDialog
A config-dialog containing one (or multiple) proxy finders.
Definition: SimpleConfigDialog.h:84