From dfb8abaa689e315cbee6a316722aadc74d8cee87 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Wed, 20 May 2020 17:59:32 +0200
Subject: [PATCH] Add getter for oobb()

---
 .../ObjectPoseObserver/ObjectFinder.cpp        | 18 ++++++++++++++++++
 .../ObjectPoseObserver/ObjectFinder.h          |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
index 950ec0e00..eef7faa22 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.cpp
@@ -3,6 +3,7 @@
 #include <SimoxUtility/filesystem/list_directory.h>
 #include <SimoxUtility/json.h>
 #include <SimoxUtility/shapes/AxisAlignedBoundingBox.h>
+#include <SimoxUtility/shapes/OrientedBox.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
@@ -251,6 +252,23 @@ namespace armarx
         return simox::AxisAlignedBoundingBox(min, max);
     }
 
+    simox::OrientedBox<float> ObjectInfo::oobb() const
+    {
+        nlohmann::json j = nlohmann::read_json(boundingBoxJson().absolutePath);
+        nlohmann::json joobb = j.at("oobb");
+        auto ori = joobb.at("ori").get<Eigen::Quaternionf>().toRotationMatrix();
+        auto min = joobb.at("min").get<Eigen::Vector3f>();
+        auto extents = joobb.at("extents").get<Eigen::Vector3f>();
+
+        Eigen::Vector3f corner = ori * min;
+
+        simox::OrientedBox<float> oobb(corner,
+                                       ori.col(0) * extents(0),
+                                       ori.col(1) * extents(1),
+                                       ori.col(2) * extents(2));
+        return oobb;
+    }
+
     bool ObjectInfo::checkPaths() const
     {
         namespace fs = std::filesystem;
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.h
index 31cb3af89..7bbaa7c22 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.h
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectFinder.h
@@ -7,6 +7,7 @@
 namespace simox
 {
     struct AxisAlignedBoundingBox;
+    template<class FloatT> class OrientedBox;
 }
 
 namespace armarx
@@ -100,6 +101,7 @@ namespace armarx
         PackageFileLocation boundingBoxJson() const;
 
         simox::AxisAlignedBoundingBox aabb() const;
+        simox::OrientedBox<float> oobb() const;
 
 
         /**
-- 
GitLab