From d33e173749bb24ab3beb0d6cf9f245d30480cb88 Mon Sep 17 00:00:00 2001 From: Fabian Paus <fabian.paus@kit.edu> Date: Mon, 8 Jun 2020 18:09:24 +0200 Subject: [PATCH] ArViz: VisualizationRobot cache current color and only change if needed --- .../ArViz/Coin/VisualizationRobot.cpp | 41 +++++++++++-------- .../ArViz/Coin/VisualizationRobot.h | 1 + 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp index 7c466cdac..71786aac9 100644 --- a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp +++ b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp @@ -136,26 +136,33 @@ namespace armarx::viz::coin if (loadedDrawStyle & data::ModelDrawStyle::OVERRIDE_COLOR) { - int numChildren = node->getNumChildren(); - for (int i = 0; i < numChildren; i++) + if (loadedColor.r != element.color.r + || loadedColor.g != element.color.g + || loadedColor.b != element.color.b + || loadedColor.a != element.color.a) { - SoSeparator* nodeSep = static_cast<SoSeparator*>(node->getChild(i)); - // The first entry must be a SoMaterial (see recreateVisualizationNodes) - SoMaterial* m = dynamic_cast<SoMaterial*>(nodeSep->getChild(0)); - if (!m) + int numChildren = node->getNumChildren(); + for (int i = 0; i < numChildren; i++) { - ARMARX_WARNING << "Error at node with index: " << i; - continue; + SoSeparator* nodeSep = static_cast<SoSeparator*>(node->getChild(i)); + // The first entry must be a SoMaterial (see recreateVisualizationNodes) + SoMaterial* m = dynamic_cast<SoMaterial*>(nodeSep->getChild(0)); + if (!m) + { + ARMARX_WARNING << "Error at node with index: " << i; + continue; + } + + auto color = element.color; + const float conv = 1.0f / 255.0f; + float a = color.a * conv; + SbColor coinColor(conv * color.r, conv * color.g, conv * color.b); + m->diffuseColor = coinColor; + m->ambientColor = coinColor; + m->transparency = 1.0f - a; + m->setOverride(true); } - - auto color = element.color; - const float conv = 1.0f / 255.0f; - float a = color.a * conv; - SbColor coinColor(conv * color.r, conv * color.g, conv * color.b); - m->diffuseColor = coinColor; - m->ambientColor = coinColor; - m->transparency = 1.0f - a; - m->setOverride(true); + loadedColor = element.color; } } IceUtil::Time time_color = IceUtil::Time::now(); diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.h b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.h index cb6699735..63aa3f1f8 100644 --- a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.h +++ b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.h @@ -25,6 +25,7 @@ namespace armarx::viz::coin LoadedRobot loaded; int loadedDrawStyle = data::ModelDrawStyle::ORIGINAL; + armarx::viz::data::Color loadedColor{0, 0, 0, 0}; }; void clearRobotCache(); -- GitLab