From c257b72bb12eaa2864fb392a3caa49847d965124 Mon Sep 17 00:00:00 2001 From: Philipp Schmidt <ufedv@student.kit.edu> Date: Fri, 14 Aug 2015 21:35:26 +0200 Subject: [PATCH] Now visualizes node sets which have no end effector set --- .../ManipulatorVisualization.cpp | 41 ++++++++++++++----- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/source/RobotComponents/gui-plugins/RobotIKPlugin/ManipulatorVisualization.cpp b/source/RobotComponents/gui-plugins/RobotIKPlugin/ManipulatorVisualization.cpp index 22f2f9c6..323bcfa4 100644 --- a/source/RobotComponents/gui-plugins/RobotIKPlugin/ManipulatorVisualization.cpp +++ b/source/RobotComponents/gui-plugins/RobotIKPlugin/ManipulatorVisualization.cpp @@ -10,6 +10,8 @@ #include <Inventor/actions/SoSearchAction.h> #include <Inventor/SbViewportRegion.h> +#include <iostream> + ManipulatorVisualization::ManipulatorVisualization() : isVisualizing(false) { //Im gonna live forever :) @@ -29,10 +31,24 @@ void ManipulatorVisualization::setVisualization(VirtualRobot::RobotPtr robot, Vi this->removeVisualization(); //First of all add the end effector - VirtualRobot::RobotPtr endEffector = robot->getEndEffector(nodeSet->getTCP()->getName())->createEefRobot("", ""); - CoinVisualizationPtr endEffectorVisualization = endEffector->getVisualization<VirtualRobot::CoinVisualization>(); - this->addChild(endEffectorVisualization->getCoinVisualization()); + VirtualRobot::EndEffectorPtr endEffector = robot->getEndEffector(nodeSet->getTCP()->getName()); + + if(endEffector) + { + VirtualRobot::RobotPtr endEffectorRobot = endEffector->createEefRobot("", ""); + CoinVisualizationPtr endEffectorVisualization = endEffectorRobot->getVisualization<VirtualRobot::CoinVisualization>(); + this->addChild(endEffectorVisualization->getCoinVisualization()); + } + else + { + for(VirtualRobot::RobotNodePtr node : nodeSet->getAllRobotNodes()) + { + CoinVisualizationPtr endEffectorVisualization = node->getVisualization<VirtualRobot::CoinVisualization>(); + this->addChild(endEffectorVisualization->getCoinVisualization()); + std::cout << "Adding: " << node->getName() << std::endl; + } + } //And now wrap this bad boy with our manipulator this->manip.reset(new SoTransformerManip()); @@ -52,14 +68,17 @@ void ManipulatorVisualization::setVisualization(VirtualRobot::RobotPtr robot, Vi manip->getDragger()->setPart("scale7", nullSep); manip->getDragger()->setPart("scale8", nullSep); - //Move it to the tcp - Eigen::Matrix4f mat = nodeSet->getTCP()->getGlobalPose(); - mat(0, 3) /= 1000; - mat(1, 3) /= 1000; - mat(2, 3) /= 1000; - - //Apply to current and desired visualizer - manip->setMatrix(VirtualRobot::CoinVisualizationFactory::getSbMatrix(mat)); + if(endEffector) + { + //Move it to the tcp + Eigen::Matrix4f mat = nodeSet->getTCP()->getGlobalPose(); + mat(0, 3) /= 1000; + mat(1, 3) /= 1000; + mat(2, 3) /= 1000; + + //Apply to current and desired visualizer + manip->setMatrix(VirtualRobot::CoinVisualizationFactory::getSbMatrix(mat)); + } this->insertChild(manip.get(), 0); -- GitLab