From 33160bdfad6535f9a6177dc2d2cfb1f0a5c39f0c Mon Sep 17 00:00:00 2001 From: Diane Bury <diane.bury@gmail.com> Date: Thu, 3 Feb 2022 11:24:39 +0100 Subject: [PATCH] [GraphValidation] Add method to get collision list for a node --- include/hpp/manipulation/graph/validation.hh | 17 +++++++++++++++++ src/graph/validation.cc | 6 +++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/hpp/manipulation/graph/validation.hh b/include/hpp/manipulation/graph/validation.hh index 62f53b54..3d1c217e 100644 --- a/include/hpp/manipulation/graph/validation.hh +++ b/include/hpp/manipulation/graph/validation.hh @@ -24,6 +24,7 @@ # include <hpp/manipulation/config.hh> # include <hpp/manipulation/fwd.hh> # include <hpp/manipulation/graph/fwd.hh> +# include <hpp/manipulation/graph/graph.hh> namespace hpp { namespace manipulation { @@ -38,6 +39,9 @@ namespace hpp { class HPP_MANIPULATION_DLLAPI Validation { public: + typedef std::vector<std::string> Collision; + typedef std::vector<Collision> CollisionList; + typedef std::map<std::string, CollisionList> CollisionMap; Validation(const core::ProblemPtr_t& problem) : problem_ (problem) {} @@ -76,6 +80,11 @@ namespace hpp { /// \note Even if true is returned, the report can contain warnings. bool validateGraph (const GraphPtr_t& graph); + CollisionList getCollisionsForNode (const std::string& nodeName) + { + return collisions_[nodeName]; + } + private: void addWarning (const GraphComponentPtr_t& c, const std::string& w) @@ -88,8 +97,16 @@ namespace hpp { errors_.push_back (Message (c, w)); } + void addCollision (const GraphComponentPtr_t& c, const std::string& obj1, + const std::string& obj2) + { + Collision coll = Collision{obj1, obj2}; + collisions_[c->name()].push_back(coll); + } + typedef std::pair<GraphComponentPtr_t, std::string> Message; std::vector<Message> warnings_, errors_; + CollisionMap collisions_; core::ProblemPtr_t problem_; }; diff --git a/src/graph/validation.cc b/src/graph/validation.cc index 6365bc3f..23d8a024 100644 --- a/src/graph/validation.cc +++ b/src/graph/validation.cc @@ -25,9 +25,9 @@ #include <hpp/core/collision-validation.hh> #include <hpp/core/configuration-shooter.hh> #include <hpp/core/relative-motion.hh> +#include <hpp/core/collision-validation-report.hh> #include "hpp/manipulation/problem.hh" -#include "hpp/manipulation/graph/graph.hh" #include "hpp/manipulation/graph/edge.hh" #include "hpp/manipulation/graph/state.hh" #include "hpp/manipulation/graph/state-selector.hh" @@ -157,6 +157,10 @@ namespace hpp { oss << incindent << "The following collision pairs will always " "collide." << incendl << *colReport << decindent; addError (state, oss.str()); + if (HPP_DYNAMIC_PTR_CAST(core::CollisionValidationReport, colReport)) { + std::pair<std::string, std::string> names = HPP_DYNAMIC_PTR_CAST(core::CollisionValidationReport, colReport)->getObjectNames(); + addCollision (state, names.first, names.second); + } success = false; } -- GitLab