From fde7bd3f634c6dfa1ee255bf8dddba3b129aa43e Mon Sep 17 00:00:00 2001 From: Islam Abed <islam.abed@partner.bmw.de> Date: Mon, 11 Apr 2022 16:24:06 +0200 Subject: [PATCH] Add interface function for points and polyline transformation --- .../MantleAPI/Common/i_geometry_helper.h | 22 +++++++++++++++++ MantleAPI/test/MantleAPI/Test/test_utils.h | 24 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/MantleAPI/include/MantleAPI/Common/i_geometry_helper.h b/MantleAPI/include/MantleAPI/Common/i_geometry_helper.h index 086abcdc..49992f81 100644 --- a/MantleAPI/include/MantleAPI/Common/i_geometry_helper.h +++ b/MantleAPI/include/MantleAPI/Common/i_geometry_helper.h @@ -17,6 +17,8 @@ #include <MantleAPI/Common/pose.h> +#include <vector> + namespace mantle_api { /// Interface that provides functionality to perform geometrical calculations @@ -36,6 +38,26 @@ public: const Vec3<units::length::meter_t>& global_position, const Orientation3<units::angle::radian_t>& local_orientation, const Vec3<units::length::meter_t>& local_translation) const = 0; + + /// @brief Transforms world polyline positions to local coordinate system. + /// @param polyline_points world polyline points to be transformed + /// @param position local system position + /// @param orientation local system orientation + /// @return converted polyline points + virtual std::vector<Vec3<units::length::meter_t>> TransformPolylinePointsFromWorldToLocal( + const std::vector<Vec3<units::length::meter_t>>& polyline_points, + const Vec3<units::length::meter_t>& position, + const Orientation3<units::angle::radian_t>& orientation) const = 0; + + /// @brief Transforms world position to local coordinate system. + /// @param point_position world point position to be transformed + /// @param position local system position + /// @param orientation local system orientation + /// @return transformed point + virtual Vec3<units::length::meter_t> TransformPointPositionFromWorldToLocal( + const Vec3<units::length::meter_t>& point_position, + const Vec3<units::length::meter_t>& position, + const Orientation3<units::angle::radian_t>& orientation) const = 0; }; } // namespace mantle_api diff --git a/MantleAPI/test/MantleAPI/Test/test_utils.h b/MantleAPI/test/MantleAPI/Test/test_utils.h index 2522c5b6..e6428c79 100644 --- a/MantleAPI/test/MantleAPI/Test/test_utils.h +++ b/MantleAPI/test/MantleAPI/Test/test_utils.h @@ -43,7 +43,29 @@ public: std::ignore = local_orientation; std::ignore = local_translation; return global_position; - }; + } + + virtual std::vector<Vec3<units::length::meter_t>> TransformPolylinePointsFromWorldToLocal( + const std::vector<Vec3<units::length::meter_t>>& polyline_points, + const Vec3<units::length::meter_t>& position, + const Orientation3<units::angle::radian_t>& orientation) const + { + // do not translate but return original points + std::ignore = position; + std::ignore = orientation; + return polyline_points; + } + + virtual Vec3<units::length::meter_t> TransformPointPositionFromWorldToLocal( + const Vec3<units::length::meter_t>& point_position, + const Vec3<units::length::meter_t>& position, + const Orientation3<units::angle::radian_t>& orientation) const + { + // do not translate but return original points + std::ignore = position; + std::ignore = orientation; + return point_position; + } }; class MockConverter : public mantle_api::ICoordConverter -- GitLab