GetNamedPoseBoundsServiceHandler.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "GetNamedPoseBoundsServiceHandler.h"
  9. #include <AzCore/Outcome/Outcome.h>
  10. #include <AzCore/std/string/string.h>
  11. #include <ROS2/Utilities/ROS2Conversions.h>
  12. #include <SimulationInterfaces/NamedPoseManagerRequestBus.h>
  13. #include <SimulationInterfaces/Result.h>
  14. #include <simulation_interfaces/msg/bounds.hpp>
  15. namespace ROS2SimulationInterfaces
  16. {
  17. AZStd::unordered_set<SimulationFeatureType> GetNamedPoseBoundsServiceHandler::GetProvidedFeatures()
  18. {
  19. return AZStd::unordered_set<SimulationFeatureType>{ SimulationFeatures::POSE_BOUNDS };
  20. }
  21. AZStd::optional<GetNamedPoseBoundsServiceHandler::Response> GetNamedPoseBoundsServiceHandler::HandleServiceRequest(
  22. const std::shared_ptr<rmw_request_id_t> header, const Request& request)
  23. {
  24. using namespace SimulationInterfaces;
  25. AZ::Outcome<Bounds, FailedResult> namedPoseBoundsO3DE;
  26. Response response;
  27. if (request.name.empty())
  28. {
  29. response.result.result = simulation_interfaces::msg::Result::RESULT_OPERATION_FAILED;
  30. response.result.error_message = "Passing empty name is forbidden";
  31. return response;
  32. }
  33. NamedPoseManagerRequestBus::BroadcastResult(
  34. namedPoseBoundsO3DE, &NamedPoseManagerRequests::GetNamedPoseBounds, AZStd::string{ request.name.c_str() });
  35. if (!namedPoseBoundsO3DE.IsSuccess())
  36. {
  37. response.result.result = namedPoseBoundsO3DE.GetError().m_errorCode;
  38. response.result.error_message = namedPoseBoundsO3DE.GetError().m_errorString.c_str();
  39. }
  40. else
  41. {
  42. response.result.result = simulation_interfaces::msg::Result::RESULT_OK;
  43. response.bounds.type = namedPoseBoundsO3DE.GetValue().m_boundsType;
  44. for (const auto& point : namedPoseBoundsO3DE.GetValue().m_points)
  45. {
  46. response.bounds.points.emplace_back(ROS2::ROS2Conversions::ToROS2Vector3(point));
  47. }
  48. }
  49. return response;
  50. }
  51. } // namespace ROS2SimulationInterfaces