From 8e408c91a2b72e27418b97fdb5dc8b7729176a75 Mon Sep 17 00:00:00 2001
From: Andre Meixner <andre.meixner@kit.edu>
Date: Wed, 8 Mar 2023 10:00:09 +0100
Subject: [PATCH] Added option to only reload collision model when reloading
 visualization from xml

---
 VirtualRobot/SceneObject.cpp | 22 +++++++++++++---------
 VirtualRobot/SceneObject.h   |  2 +-
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/VirtualRobot/SceneObject.cpp b/VirtualRobot/SceneObject.cpp
index 96925f44c..1466ed3e9 100644
--- a/VirtualRobot/SceneObject.cpp
+++ b/VirtualRobot/SceneObject.cpp
@@ -1464,7 +1464,7 @@ namespace VirtualRobot
         return scaling;
     }
 
-    bool SceneObject::reloadVisualizationFromXML(bool useVisAsColModelIfMissing) {
+    bool SceneObject::reloadVisualizationFromXML(bool useVisAsColModelIfMissing, bool loadColOnly) {
         bool reloaded = false;
         if (!collisionModelXML.empty())
         {
@@ -1484,7 +1484,8 @@ namespace VirtualRobot
             }
             reloaded = true;
         }
-        if (!visualizationModelXML.empty())
+        if ((!loadColOnly || (!collisionModel && useVisAsColModelIfMissing))
+             && !visualizationModelXML.empty())
         {
             rapidxml::xml_document<> doc;
             std::vector<char> cstr(visualizationModelXML.size() + 1);  // Create char buffer to store string copy
@@ -1492,13 +1493,16 @@ namespace VirtualRobot
             doc.parse<0>(cstr.data());
             bool useAsColModel;
             auto visualizationModel = BaseIO::processVisualizationTag(doc.first_node(), name, basePath, useAsColModel);
-            if (visualizationModel && scaling != 1.0f)
+            if (!loadColOnly)
             {
-                setVisualization(visualizationModel->clone(true, scaling));
-            }
-            else
-            {
-                setVisualization(visualizationModel);
+                if (visualizationModel && scaling != 1.0f)
+                {
+                    setVisualization(visualizationModel->clone(true, scaling));
+                }
+                else
+                {
+                    setVisualization(visualizationModel);
+                }
             }
             if (visualizationModel && collisionModel == nullptr && (useVisAsColModelIfMissing || useAsColModel))
             {
@@ -1507,7 +1511,7 @@ namespace VirtualRobot
             reloaded = true;
         }
         for (auto child : this->getChildren()) {
-            reloaded |= child->reloadVisualizationFromXML(useVisAsColModelIfMissing);
+            reloaded |= child->reloadVisualizationFromXML(useVisAsColModelIfMissing, loadColOnly);
         }
         return reloaded;
     }
diff --git a/VirtualRobot/SceneObject.h b/VirtualRobot/SceneObject.h
index 3fb7348e3..5572e1cae 100644
--- a/VirtualRobot/SceneObject.h
+++ b/VirtualRobot/SceneObject.h
@@ -420,7 +420,7 @@ namespace VirtualRobot
         void setScaling(float scaling);
         float getScaling();
 
-        bool reloadVisualizationFromXML(bool useVisAsColModelIfMissing = true);
+        bool reloadVisualizationFromXML(bool useVisAsColModelIfMissing = true, bool loadColOnly = false);
 
         const std::string& getVisualizationModelXML() const;
 
-- 
GitLab