From a50875e79ed0c73abda38c3c3a2d7812a2447d33 Mon Sep 17 00:00:00 2001
From: Raphael Grimm <raphael.grimm@kit.edu>
Date: Tue, 4 Aug 2020 22:41:05 +0200
Subject: [PATCH] Extend RobotNameHelper

---
 .../RobotStatechartHelpers/RobotNameHelper.cpp | 18 ++++++++++++++++--
 .../RobotStatechartHelpers/RobotNameHelper.h   | 10 ++++++++--
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
index a9ecec5e4..6053d0196 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
@@ -25,6 +25,8 @@
 
 #include <ArmarXCore/core/util/StringHelpers.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+#include <ArmarXCore/core/system/ArmarXDataPath.h>
+#include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <ArmarXCore/statechart/xmlstates/profiles/StatechartProfiles.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
@@ -32,7 +34,6 @@
 
 namespace armarx
 {
-
     void RobotNameHelper::writeRobotInfoNode(
         const RobotInfoNodePtr& n,
         std::ostream& str,
@@ -225,6 +226,14 @@ namespace armarx
         return select("HandModelPath");
     }
 
+    std::string RobotNameHelper::Arm::getAbsoluteHandModelPath() const
+    {
+        ArmarXDataPath::FindPackageAndAddDataPath(getHandModelPackage());
+        auto path = getHandModelPath();
+        return ArmarXDataPath::getAbsolutePath(path, path) ?
+               path : "";
+    }
+
     std::string RobotNameHelper::Arm::getHandModelPackage() const
     {
         ARMARX_TRACE;
@@ -289,7 +298,12 @@ namespace armarx
         return tcp->getPoseInRootFrame().inverse() * hand->getPoseInRootFrame();
     }
 
-    RobotNameHelper::Arm RobotNameHelper::RobotArm::getArm() const
+    const VirtualRobot::RobotPtr& RobotNameHelper::RobotArm::getRobot() const
+    {
+        return robot;
+    }
+
+    const RobotNameHelper::Arm& RobotNameHelper::RobotArm::getArm() const
     {
         return arm;
     }
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
index 703c0ae83..0a4fdd59a 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
@@ -74,6 +74,7 @@ namespace armarx
             std::string getHandControllerName() const;
             std::string getHandRootNode() const;
             std::string getHandModelPath() const;
+            std::string getAbsoluteHandModelPath() const;
             std::string getHandModelPackage() const;
             RobotArm addRobot(const VirtualRobot::RobotPtr& robot) const;
 
@@ -104,7 +105,8 @@ namespace armarx
             VirtualRobot::RobotNodePtr getTCP() const;
             VirtualRobot::RobotNodePtr getHandRootNode() const;
             Eigen::Matrix4f getTcp2HandRootTransform() const;
-            Arm getArm() const;
+            const Arm& getArm() const;
+            const VirtualRobot::RobotPtr& getRobot() const;
 
             RobotArm(const Arm& arm, const VirtualRobot::RobotPtr& robot);
             RobotArm() = default;
@@ -114,7 +116,7 @@ namespace armarx
             RobotArm& operator=(const RobotArm&) = default;
         private:
 
-            const Arm arm;
+            Arm arm;
             VirtualRobot::RobotPtr robot;
         };
 
@@ -123,6 +125,10 @@ namespace armarx
         static RobotNameHelperPtr Create(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile);
 
         RobotNameHelper(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile = nullptr);
+        RobotNameHelper(RobotNameHelper&&) = default;
+        RobotNameHelper(const RobotNameHelper&) = default;
+        RobotNameHelper& operator=(RobotNameHelper&&) = default;
+        RobotNameHelper& operator=(const RobotNameHelper&) = default;
 
         Arm getArm(const std::string& side) const;
         RobotArm getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot) const;
-- 
GitLab