From e2af96a6fb7283574ccdf097b5dd7ecb1d07715e Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Thu, 24 Jun 2021 21:27:43 +0200
Subject: [PATCH] Skips Scenes/ dir in ObjectFinder

Signed-off-by: Rainer Kartmann <rainer.kartmann@kit.edu>
---
 .../libraries/ArmarXObjects/ObjectFinder.cpp  | 31 ++++++++++++-------
 .../libraries/ArmarXObjects/ObjectFinder.h    |  5 +++
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.cpp
index 8e86d96dc..2e026dd21 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.cpp
@@ -55,6 +55,12 @@ namespace armarx
     }
 
 
+    bool ObjectFinder::isDatasetDirValid(const path& path) const
+    {
+        return path.filename() != "Scenes" and std::filesystem::is_directory(path);
+    }
+
+
     std::optional<ObjectInfo> ObjectFinder::findObject(const std::string& dataset, const std::string& name) const
     {
         init();
@@ -67,8 +73,8 @@ namespace armarx
             return ObjectInfo(packageName, packageDataDir, dataset, name);
         }
         // Search for object in datasets.
-        const auto& datasets = getDatasets();
-        for (const path& dataset : datasets)
+        const std::vector<std::string>& datasets = getDatasets();
+        for (const std::string& dataset : datasets)
         {
             if (fs::is_directory(_rootDirAbs() / dataset / name))
             {
@@ -106,7 +112,7 @@ namespace armarx
     {
         // init();  // Done by called methods.
         std::vector<std::string> datasets;
-        for (const auto& dir : getDatasetDirectories())
+        for (const path& dir : getDatasetDirectories())
         {
             datasets.push_back(dir.filename());
         }
@@ -123,9 +129,9 @@ namespace armarx
         const bool local = false;
         std::vector<path> dirs = simox::fs::list_directory(_rootDirAbs(), local);
         std::vector<path> datasetDirs;
-        for (const auto& p : dirs)
+        for (const path& p : dirs)
         {
-            if (std::filesystem::is_directory(p))
+            if (isDatasetDirValid(p))
             {
                 datasetDirs.push_back(p);
             }
@@ -144,7 +150,7 @@ namespace armarx
         std::vector<ObjectInfo> objects;
         for (const path& datasetDir : simox::fs::list_directory(_rootDirAbs(), local))
         {
-            if (fs::is_directory(_rootDirAbs() / datasetDir))
+            if (isDatasetDirValid(_rootDirAbs() / datasetDir))
             {
                 std::vector<ObjectInfo> dataset = findAllObjectsOfDataset(datasetDir, checkPaths);
                 for (const auto& o : dataset)
@@ -169,7 +175,7 @@ namespace armarx
         std::vector<armem::articulated_object::ArticulatedObjectDescription> objects;
         for (const path& datasetDir : simox::fs::list_directory(_rootDirAbs(), local))
         {
-            if (fs::is_directory(_rootDirAbs() / datasetDir))
+            if (isDatasetDirValid(_rootDirAbs() / datasetDir))
             {
                 const auto dataset = findAllArticulatedObjectsOfDataset(datasetDir, checkPaths);
                 objects.insert(objects.end(), dataset.begin(), dataset.end());
@@ -221,7 +227,9 @@ namespace armarx
         return objects;
     }
 
-    std::unordered_map<std::string, std::vector<armem::articulated_object::ArticulatedObjectDescription>> ObjectFinder::findAllArticulatedObjectsByDataset(bool checkPaths) const
+
+    std::unordered_map<std::string, std::vector<armem::articulated_object::ArticulatedObjectDescription>>
+            ObjectFinder::findAllArticulatedObjectsByDataset(bool checkPaths) const
     {
         init();
         if (!_ready())
@@ -234,7 +242,7 @@ namespace armarx
         std::unordered_map<std::string, std::vector<armem::articulated_object::ArticulatedObjectDescription>> datasets;
         for (const path& datasetDir : simox::fs::list_directory(_rootDirAbs(), local))
         {
-            if (fs::is_directory(_rootDirAbs() / datasetDir))
+            if (isDatasetDirValid(_rootDirAbs() / datasetDir))
             {
                 const auto dataset = findAllArticulatedObjectsOfDataset(datasetDir, checkPaths);
                 datasets[datasetDir] = dataset;
@@ -244,7 +252,8 @@ namespace armarx
     }
 
 
-    std::vector<armem::articulated_object::ArticulatedObjectDescription> ObjectFinder::findAllArticulatedObjectsOfDataset(const std::string& dataset, bool checkPaths) const
+    std::vector<armem::articulated_object::ArticulatedObjectDescription>
+    ObjectFinder::findAllArticulatedObjectsOfDataset(const std::string& dataset, bool checkPaths) const
     {
         init();
         if (!_ready())
@@ -252,7 +261,7 @@ namespace armarx
             return {};
         }
         path datasetDir = _rootDirAbs() / dataset;
-        if (!fs::is_directory(datasetDir))
+        if (!isDatasetDirValid(datasetDir))
         {
             ARMARX_WARNING << "Expected dataset directory for dataset '" << dataset << "': \n"
                            << datasetDir;
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.h b/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.h
index 2b342f3ac..0bef06671 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectFinder.h
@@ -89,14 +89,18 @@ namespace armarx
 
 
     private:
+
         void init() const;
+        bool isDatasetDirValid(const std::filesystem::path& path) const;
 
         path _rootDirAbs() const;
         path _rootDirRel() const;
 
         bool _ready() const;
 
+
     private:
+
         /// Name of package containing the object models (ArmarXObjects by default).
         mutable std::string packageName;
 
@@ -105,5 +109,6 @@ namespace armarx
          * Empty if package could not be found.
          */
         mutable path packageDataDir;
+
     };
 }
-- 
GitLab