From b5f2f748a8de385bfec4128fd8581e508bb81e12 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 22 Dec 2022 16:11:29 +0100 Subject: [PATCH] Set localPose instead of changing only the internal visualization model and then forgetting about this special transform forever. F**k everyone not using Coin, right? --- VirtualRobot/CMakeLists.txt | 1 + .../CoinVisualizationFactory.cpp | 39 ------------------- .../CoinVisualizationFactory.h | 4 -- .../Visualization/VisualizationFactory.cpp | 26 +++++++++++++ .../Visualization/VisualizationFactory.h | 2 +- 5 files changed, 28 insertions(+), 44 deletions(-) create mode 100644 VirtualRobot/Visualization/VisualizationFactory.cpp diff --git a/VirtualRobot/CMakeLists.txt b/VirtualRobot/CMakeLists.txt index d3c336303..f09afe8aa 100644 --- a/VirtualRobot/CMakeLists.txt +++ b/VirtualRobot/CMakeLists.txt @@ -347,6 +347,7 @@ SET(SOURCES Visualization/TriMeshModel.cpp Visualization/TriMeshUtils.cpp Visualization/Visualization.cpp + Visualization/VisualizationFactory.cpp Visualization/VisualizationNode.cpp Workspace/Manipulability.cpp diff --git a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp index fe1f66031..3e9cd8a83 100644 --- a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp +++ b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp @@ -4345,45 +4345,6 @@ namespace VirtualRobot return root; } - void CoinVisualizationFactory::applyDisplacement(VisualizationNodePtr o, Eigen::Matrix4f& m) - { - if (!o) - { - return; - } - - - if (o->getType() != getName()) - { - VR_ERROR << "Skipping Visualization type " << o->getType() << ", but factory is of type " << getName() << std::endl; - return; - } - - CoinVisualizationNode* cvn = dynamic_cast<CoinVisualizationNode*>(o.get()); - - if (cvn) - { - SoNode* n = cvn->getCoinVisualization(); - - if (n) - { - SoSeparator* s = new SoSeparator; - s->ref(); - SoMatrixTransform* ma = getMatrixTransformScaleMM2M(m); - s->addChild(ma); - s->addChild(n->copy(FALSE)); - - cvn->setVisualization(s); - //o.reset(new CoinVisualizationNode(s)); - s->unrefNoDelete(); - } - } - else - { - VR_WARNING << "Invalid type casting to CoinVisualizationNode?!" << std::endl; - } - } - SoGroup* CoinVisualizationFactory::convertSoFileChildren(SoGroup* orig) { diff --git a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h index 0afb2907d..eaf8b1878 100644 --- a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h +++ b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h @@ -107,10 +107,6 @@ namespace VirtualRobot \return A VisualizationNode containing the visualization. */ VisualizationNodePtr createEllipse(float x, float y, float z, bool showAxes = true, float axesHeight = 4.0f, float axesWidth = 8.0f) override; - /*! - Move local visualization by homogeneous matrix m. MM is used. - */ - void applyDisplacement(VisualizationNodePtr o, Eigen::Matrix4f& m) override; /*! Create an empty VisualizationNode. diff --git a/VirtualRobot/Visualization/VisualizationFactory.cpp b/VirtualRobot/Visualization/VisualizationFactory.cpp new file mode 100644 index 000000000..3a4f8a592 --- /dev/null +++ b/VirtualRobot/Visualization/VisualizationFactory.cpp @@ -0,0 +1,26 @@ +/** +* @package VirtualRobot +* @author Rainer Kartmann +* @copyright 2022 Rainer Kartmann +*/ + +#include "VisualizationFactory.h" + +#include <VirtualRobot/Visualization/VisualizationNode.h> + + +namespace VirtualRobot +{ + + void + VisualizationFactory::applyDisplacement(VisualizationNodePtr visu, + Eigen::Matrix4f& displacement) + { + if (visu) + { + visu->setLocalPose(displacement); + } + } + + +} // namespace VirtualRobot diff --git a/VirtualRobot/Visualization/VisualizationFactory.h b/VirtualRobot/Visualization/VisualizationFactory.h index ef9da305c..94f1142cd 100644 --- a/VirtualRobot/Visualization/VisualizationFactory.h +++ b/VirtualRobot/Visualization/VisualizationFactory.h @@ -206,7 +206,7 @@ namespace VirtualRobot /*! Move local visualization by homogeneous matrix m. (MM) */ - virtual void applyDisplacement(VisualizationNodePtr /*o*/, Eigen::Matrix4f& /*m*/) {} + virtual void applyDisplacement(VisualizationNodePtr visu, Eigen::Matrix4f& displacement); /*! Create an empty VisualizationNode. -- GitLab