From 657d31cb06f8ed47ac5d8bd737e82237cc428869 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Tue, 29 Jun 2021 15:33:48 +0200
Subject: [PATCH] Add isStatic to ObjectPose

---
 source/RobotAPI/interface/objectpose/object_pose_types.ice  | 4 ++++
 source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp      | 3 +++
 source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h        | 6 ++++++
 source/RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.xml | 4 ++++
 .../libraries/ArmarXObjects/aron_conversions/objpose.cpp    | 4 ++--
 5 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/source/RobotAPI/interface/objectpose/object_pose_types.ice b/source/RobotAPI/interface/objectpose/object_pose_types.ice
index 385da35e3..eb23d767e 100644
--- a/source/RobotAPI/interface/objectpose/object_pose_types.ice
+++ b/source/RobotAPI/interface/objectpose/object_pose_types.ice
@@ -64,6 +64,8 @@ module armarx
                 string providerName;
                 /// Known or unknown object.
                 ObjectTypeEnum objectType = AnyObject;
+                /// Whether object is static. Static objects don't decay.
+                bool isStatic = false;
 
                 /// The object ID, i.e. dataset and name.
                 armarx::data::ObjectID objectID;
@@ -92,6 +94,8 @@ module armarx
                 string providerName;
                 /// Known or unknown object.
                 ObjectTypeEnum objectType = AnyObject;
+                /// Whether object is static. Static objects don't decay.
+                bool isStatic = false;
 
                 /// The object ID, i.e. dataset and name.
                 armarx::data::ObjectID objectID;
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
index 171da9c1a..b37f432ef 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
@@ -29,6 +29,7 @@ namespace armarx::objpose
     {
         providerName = ice.providerName;
         objectType = ice.objectType;
+        isStatic = ice.isStatic;
         armarx::fromIce(ice.objectID, objectID);
 
         objectPoseRobot = ::armarx::fromIce(ice.objectPoseRobot);
@@ -58,6 +59,7 @@ namespace armarx::objpose
     {
         ice.providerName = providerName;
         ice.objectType = objectType;
+        ice.isStatic = isStatic;
         armarx::toIce(ice.objectID, objectID);
 
         ice.objectPoseRobot = new Pose(objectPoseRobot);
@@ -80,6 +82,7 @@ namespace armarx::objpose
     {
         providerName = provided.providerName;
         objectType = provided.objectType;
+        isStatic = provided.isStatic;
         armarx::fromIce(provided.objectID, objectID);
 
         objectPoseOriginal = ::armarx::fromIce(provided.objectPose);
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
index 023d6351f..754c1a1b1 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
@@ -1,6 +1,9 @@
 #pragma once
 
 #include <optional>
+#include <map>
+#include <vector>
+
 
 #include <Eigen/Core>
 
@@ -47,6 +50,8 @@ namespace armarx::objpose
         std::string providerName;
         /// Known or unknown object.
         ObjectTypeEnum objectType = AnyObject;
+        /// Whether object is static. Static objects don't decay.
+        bool isStatic = false;
 
         /// The object ID, i.e. dataset, class name and instance name.
         armarx::ObjectID objectID;
@@ -90,6 +95,7 @@ namespace armarx::objpose
         void updateAttached(VirtualRobot::RobotPtr agent);
     };
     using ObjectPoseSeq = std::vector<ObjectPose>;
+    using ObjectPoseMap = std::map<ObjectID, ObjectPose>;
 
 
     void fromIce(const data::ObjectAttachmentInfo& ice, ObjectAttachmentInfo& attachment);
diff --git a/source/RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.xml b/source/RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.xml
index e9701dc24..cc1a3a046 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.xml
+++ b/source/RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.xml
@@ -38,6 +38,10 @@ ARON DTO of armarx::objpose::ObjectPose.
                 <armarx::objpose::arondto::ObjectType />
             </ObjectChild>
 
+            <ObjectChild key='isStatic'>
+                <bool />
+            </ObjectChild>
+
             <ObjectChild key='objectID'>
                 <armarx::arondto::ObjectID />
             </ObjectChild>
diff --git a/source/RobotAPI/libraries/ArmarXObjects/aron_conversions/objpose.cpp b/source/RobotAPI/libraries/ArmarXObjects/aron_conversions/objpose.cpp
index 77880a524..26f07a947 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/aron_conversions/objpose.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/aron_conversions/objpose.cpp
@@ -61,8 +61,8 @@ void armarx::objpose::toAron(arondto::ObjectType& dto, const ObjectTypeEnum& bo)
 void armarx::objpose::fromAron(const arondto::ObjectPose& dto, ObjectPose& bo)
 {
     bo.providerName = dto.providerName;
-
     fromAron(dto.objectType, bo.objectType);
+    bo.isStatic = dto.isStatic;
     fromAron(dto.objectID, bo.objectID);
 
     bo.objectPoseRobot = dto.objectPoseRobot;
@@ -102,8 +102,8 @@ void armarx::objpose::fromAron(const arondto::ObjectPose& dto, ObjectPose& bo)
 void armarx::objpose::toAron(arondto::ObjectPose& dto, const ObjectPose& bo)
 {
     dto.providerName = bo.providerName;
-
     toAron(dto.objectType, bo.objectType);
+    dto.isStatic = bo.isStatic;
     toAron(dto.objectID, bo.objectID);
 
     dto.objectPoseRobot = bo.objectPoseRobot;
-- 
GitLab