contact_managers_plugin_factory.h
Go to the documentation of this file.
1 
26 #ifndef TESSERACT_COLLISION_CONTACT_MANAGERS_PLUGIN_FACTORY_H
27 #define TESSERACT_COLLISION_CONTACT_MANAGERS_PLUGIN_FACTORY_H
28 
31 #include <string>
32 #include <memory>
33 #include <map>
35 
36 #include <tesseract_common/fwd.h>
38 #include <boost_plugin_loader/plugin_loader.h>
39 #include <boost_plugin_loader/macros.h>
40 #include <filesystem>
41 
42 // clang-format off
43 #define TESSERACT_ADD_DISCRETE_MANAGER_PLUGIN(DERIVED_CLASS, ALIAS) \
44  EXPORT_CLASS_SECTIONED(DERIVED_CLASS, ALIAS, DiscColl)
45 
46 #define TESSERACT_ADD_CONTINUOUS_MANAGER_PLUGIN(DERIVED_CLASS, ALIAS) \
47  EXPORT_CLASS_SECTIONED(DERIVED_CLASS, ALIAS, ContColl)
48 // clang-format on
49 
50 namespace tesseract_collision
51 {
53 class ContactManagersPluginFactory;
54 class DiscreteContactManager;
55 class ContinuousContactManager;
56 
59 {
60 public:
61  using Ptr = std::shared_ptr<DiscreteContactManagerFactory>;
62  using ConstPtr = std::shared_ptr<const DiscreteContactManagerFactory>;
63 
64  virtual ~DiscreteContactManagerFactory() = default;
65 
71  virtual std::unique_ptr<DiscreteContactManager> create(const std::string& name, const YAML::Node& config) const = 0;
72 
73 protected:
74  static std::string getSection();
76 };
77 
80 {
81 public:
82  using Ptr = std::shared_ptr<ContinuousContactManagerFactory>;
83  using ConstPtr = std::shared_ptr<const ContinuousContactManagerFactory>;
84 
85  virtual ~ContinuousContactManagerFactory() = default;
86 
92  virtual std::unique_ptr<ContinuousContactManager> create(const std::string& solver_name,
93  const YAML::Node& config) const = 0;
94 
95 protected:
96  static std::string getSection();
98 };
99 
101 {
102 public:
109 
114  ContactManagersPluginFactory(YAML::Node config, const tesseract_common::ResourceLocator& locator);
115 
120  ContactManagersPluginFactory(const std::filesystem::path& config, const tesseract_common::ResourceLocator& locator);
121 
126  ContactManagersPluginFactory(const std::string& config, const tesseract_common::ResourceLocator& locator);
127 
132  void addSearchPath(const std::string& path);
133 
138  std::set<std::string> getSearchPaths() const;
139 
144  void clearSearchPaths();
145 
150  void addSearchLibrary(const std::string& library_name);
151 
156  std::set<std::string> getSearchLibraries() const;
157 
162  void clearSearchLibraries();
163 
169  void addDiscreteContactManagerPlugin(const std::string& name, tesseract_common::PluginInfo plugin_info);
170 
176 
182 
187  void removeDiscreteContactManagerPlugin(const std::string& name);
188 
193  void setDefaultDiscreteContactManagerPlugin(const std::string& name);
194 
199  std::string getDefaultDiscreteContactManagerPlugin() const;
200 
206  void addContinuousContactManagerPlugin(const std::string& name, tesseract_common::PluginInfo plugin_info);
207 
213 
219 
224  void removeContinuousContactManagerPlugin(const std::string& name);
225 
230  void setDefaultContinuousContactManagerPlugin(const std::string& name);
231 
236  std::string getDefaultContinuousContactManagerPlugin() const;
237 
243  std::unique_ptr<DiscreteContactManager> createDiscreteContactManager(const std::string& name) const;
244 
250  std::unique_ptr<DiscreteContactManager>
251  createDiscreteContactManager(const std::string& name, const tesseract_common::PluginInfo& plugin_info) const;
252 
258  std::unique_ptr<ContinuousContactManager> createContinuousContactManager(const std::string& name) const;
259 
265  std::unique_ptr<ContinuousContactManager>
266  createContinuousContactManager(const std::string& name, const tesseract_common::PluginInfo& plugin_info) const;
267 
272  void saveConfig(const std::filesystem::path& file_path) const;
273 
278  YAML::Node getConfig() const;
279 
280 private:
281  mutable std::map<std::string, DiscreteContactManagerFactory::Ptr> discrete_factories_;
282  mutable std::map<std::string, ContinuousContactManagerFactory::Ptr> continuous_factories_;
285  boost_plugin_loader::PluginLoader plugin_loader_;
286 
287  void loadConfig(const YAML::Node& config);
288 };
289 } // namespace tesseract_collision
290 #endif // TESSERACT_COLLISION_CONTACT_MANAGERS_PLUGIN_FACTORY_H
tesseract_collision::ContactManagersPluginFactory::discrete_factories_
std::map< std::string, DiscreteContactManagerFactory::Ptr > discrete_factories_
Definition: contact_managers_plugin_factory.h:281
tesseract_collision::ContactManagersPluginFactory::createDiscreteContactManager
std::unique_ptr< DiscreteContactManager > createDiscreteContactManager(const std::string &name) const
Get discrete contact manager object given name.
Definition: contact_managers_plugin_factory.cpp:224
tesseract_collision::ContactManagersPluginFactory::hasContinuousContactManagerPlugins
bool hasContinuousContactManagerPlugins() const
Check if it has continuous contact manager plugins.
Definition: contact_managers_plugin_factory.cpp:178
tesseract_collision::ContactManagersPluginFactory::saveConfig
void saveConfig(const std::filesystem::path &file_path) const
Save the plugin information to a yaml config file.
Definition: contact_managers_plugin_factory.cpp:309
tesseract_collision::DiscreteContactManagerFactory::create
virtual std::unique_ptr< DiscreteContactManager > create(const std::string &name, const YAML::Node &config) const =0
Create Discrete Contact Manager Object.
tesseract_collision::DiscreteContactManagerFactory::Ptr
std::shared_ptr< DiscreteContactManagerFactory > Ptr
Definition: contact_managers_plugin_factory.h:61
tesseract_collision::ContinuousContactManagerFactory::Ptr
std::shared_ptr< ContinuousContactManagerFactory > Ptr
Definition: contact_managers_plugin_factory.h:82
tesseract_collision::ContactManagersPluginFactory::addSearchLibrary
void addSearchLibrary(const std::string &library_name)
Add a library to search for plugin name.
Definition: contact_managers_plugin_factory.cpp:109
tesseract_collision::ContactManagersPluginFactory::removeContinuousContactManagerPlugin
void removeContinuousContactManagerPlugin(const std::string &name)
Remove continuous contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:188
tesseract_collision::DiscreteContactManagerFactory::getSection
static std::string getSection()
Definition: contact_managers_plugin_factory.cpp:49
tesseract_collision::ContactManagersPluginFactory::createContinuousContactManager
std::unique_ptr< ContinuousContactManager > createContinuousContactManager(const std::string &name) const
Get continuous contact manager object given name.
Definition: contact_managers_plugin_factory.cpp:267
tesseract_collision::DiscreteContactManagerFactory
Define a discrete contact manager plugin which the factory can create an instance.
Definition: contact_managers_plugin_factory.h:58
tesseract_collision::ContinuousContactManagerFactory::~ContinuousContactManagerFactory
virtual ~ContinuousContactManagerFactory()=default
tesseract_common::PluginInfoContainer
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_collision::ContactManagersPluginFactory::getDefaultDiscreteContactManagerPlugin
std::string getDefaultDiscreteContactManagerPlugin() const
Get the default discrete contact manager.
Definition: contact_managers_plugin_factory.cpp:160
tesseract_collision::ContinuousContactManagerFactory::getSection
static std::string getSection()
Definition: contact_managers_plugin_factory.cpp:51
tesseract_collision::ContactManagersPluginFactory::continuous_plugin_info_
tesseract_common::PluginInfoContainer continuous_plugin_info_
Definition: contact_managers_plugin_factory.h:284
tesseract_collision::ContinuousContactManagerFactory::ConstPtr
std::shared_ptr< const ContinuousContactManagerFactory > ConstPtr
Definition: contact_managers_plugin_factory.h:83
tesseract_collision::ContactManagersPluginFactory::addSearchPath
void addSearchPath(const std::string &path)
Add location for the plugin loader to search.
Definition: contact_managers_plugin_factory.cpp:103
name
std::string name
tesseract_collision::ContactManagersPluginFactory::getSearchLibraries
std::set< std::string > getSearchLibraries() const
Get the plugin search libraries.
Definition: contact_managers_plugin_factory.cpp:114
tesseract_collision::ContactManagersPluginFactory::setDefaultDiscreteContactManagerPlugin
void setDefaultDiscreteContactManagerPlugin(const std::string &name)
Set a default discrete contact manager.
Definition: contact_managers_plugin_factory.cpp:150
tesseract_collision::ContactManagersPluginFactory::loadConfig
void loadConfig(const YAML::Node &config)
Definition: contact_managers_plugin_factory.cpp:64
tesseract_collision::ContinuousContactManagerFactory
Define a continuous contact manager plugin which the factory can create an instance.
Definition: contact_managers_plugin_factory.h:79
tesseract_collision::DiscreteContactManagerFactory::~DiscreteContactManagerFactory
virtual ~DiscreteContactManagerFactory()=default
tesseract_common::PluginInfo
tesseract_collision::ContactManagersPluginFactory::getContinuousContactManagerPlugins
tesseract_common::PluginInfoMap getContinuousContactManagerPlugins() const
Get the map of continuous contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:183
tesseract_collision::ContinuousContactManagerFactory::PluginLoader
friend class boost_plugin_loader::PluginLoader
Definition: contact_managers_plugin_factory.h:97
tesseract_common::ResourceLocator
tesseract_collision::DiscreteContactManagerFactory::PluginLoader
friend class boost_plugin_loader::PluginLoader
Definition: contact_managers_plugin_factory.h:75
tesseract_collision::ContinuousContactManagerFactory::create
virtual std::unique_ptr< ContinuousContactManager > create(const std::string &solver_name, const YAML::Node &config) const =0
Create Inverse Kinematics Object.
tesseract_collision::ContactManagersPluginFactory::operator=
ContactManagersPluginFactory & operator=(const ContactManagersPluginFactory &)=default
TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: create_convex_hull.cpp:37
tesseract_collision::ContactManagersPluginFactory::getConfig
YAML::Node getConfig() const
Get the plugin information config as a yaml node.
Definition: contact_managers_plugin_factory.cpp:316
tesseract_collision::ContactManagersPluginFactory::hasDiscreteContactManagerPlugins
bool hasDiscreteContactManagerPlugins() const
Check if it has discrete contact manager plugins.
Definition: contact_managers_plugin_factory.cpp:127
tesseract_collision::ContactManagersPluginFactory::discrete_plugin_info_
tesseract_common::PluginInfoContainer discrete_plugin_info_
Definition: contact_managers_plugin_factory.h:283
fwd.h
tesseract_common::PluginInfoMap
std::map< std::string, PluginInfo > PluginInfoMap
tesseract_collision::ContactManagersPluginFactory::clearSearchLibraries
void clearSearchLibraries()
Clean the search libraries.
Definition: contact_managers_plugin_factory.cpp:119
tesseract_collision::ContactManagersPluginFactory::addContinuousContactManagerPlugin
void addContinuousContactManagerPlugin(const std::string &name, tesseract_common::PluginInfo plugin_info)
Add a continuous contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:172
tesseract_collision::ContactManagersPluginFactory
Definition: contact_managers_plugin_factory.h:100
tesseract_collision::ContactManagersPluginFactory::getDiscreteContactManagerPlugins
tesseract_common::PluginInfoMap getDiscreteContactManagerPlugins() const
Get the map of discrete contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:132
tesseract_collision::ContactManagersPluginFactory::addDiscreteContactManagerPlugin
void addDiscreteContactManagerPlugin(const std::string &name, tesseract_common::PluginInfo plugin_info)
Add a discrete contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:121
tesseract_collision::ContactManagersPluginFactory::plugin_loader_
boost_plugin_loader::PluginLoader plugin_loader_
Definition: contact_managers_plugin_factory.h:285
tesseract_collision
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::ContactManagersPluginFactory::getDefaultContinuousContactManagerPlugin
std::string getDefaultContinuousContactManagerPlugin() const
Get the default continuous contact manager.
Definition: contact_managers_plugin_factory.cpp:211
macros.h
tesseract_collision::ContactManagersPluginFactory::getSearchPaths
std::set< std::string > getSearchPaths() const
Get the plugin search paths.
Definition: contact_managers_plugin_factory.cpp:105
tesseract_collision::ContactManagersPluginFactory::clearSearchPaths
void clearSearchPaths()
Clear the search paths.
Definition: contact_managers_plugin_factory.cpp:107
tesseract_collision::DiscreteContactManagerFactory::ConstPtr
std::shared_ptr< const DiscreteContactManagerFactory > ConstPtr
Definition: contact_managers_plugin_factory.h:62
tesseract_collision::ContactManagersPluginFactory::continuous_factories_
std::map< std::string, ContinuousContactManagerFactory::Ptr > continuous_factories_
Definition: contact_managers_plugin_factory.h:282
tesseract_collision::ContactManagersPluginFactory::setDefaultContinuousContactManagerPlugin
void setDefaultContinuousContactManagerPlugin(const std::string &name)
Set a default continuous contact manager.
Definition: contact_managers_plugin_factory.cpp:201
tesseract_collision::ContactManagersPluginFactory::ContactManagersPluginFactory
ContactManagersPluginFactory()
Definition: contact_managers_plugin_factory.cpp:53
tesseract_collision::ContactManagersPluginFactory::removeDiscreteContactManagerPlugin
void removeDiscreteContactManagerPlugin(const std::string &name)
Remove discrete contact manager plugin.
Definition: contact_managers_plugin_factory.cpp:137
tesseract_collision::ContactManagersPluginFactory::~ContactManagersPluginFactory
~ContactManagersPluginFactory()
plugin_info.h


tesseract_collision
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:52