18#ifndef GZ_PHYSICS_FREEGROUP_HH_
19#define GZ_PHYSICS_FREEGROUP_HH_
29 DETAIL_GZ_PHYSICS_DEFINE_ENTITY(FreeGroup)
44 class GZ_PHYSICS_VISIBLE FindFreeGroupFeature :
public virtual Feature
46 public:
template <
typename PolicyT,
typename FeaturesT>
47 class Model :
public virtual Feature::Model<PolicyT, FeaturesT>
49 using FreeGroupPtrType = FreeGroupPtr<PolicyT, FeaturesT>;
50 using ConstFreeGroupPtrType = ConstFreeGroupPtr<PolicyT, FeaturesT>;
55 public: FreeGroupPtrType FindFreeGroup();
58 public: ConstFreeGroupPtrType FindFreeGroup()
const;
61 public:
template <
typename PolicyT,
typename FeaturesT>
62 class Link :
public virtual Feature::Link<PolicyT, FeaturesT>
64 using FreeGroupPtrType = FreeGroupPtr<PolicyT, FeaturesT>;
65 using ConstFreeGroupPtrType = ConstFreeGroupPtr<PolicyT, FeaturesT>;
71 public: FreeGroupPtrType FindFreeGroup();
74 public: ConstFreeGroupPtrType FindFreeGroup()
const;
77 public:
template <
typename PolicyT,
typename FeaturesT>
78 class FreeGroup :
public virtual Entity<PolicyT, FeaturesT>
84 public: LinkPtr<PolicyT, FeaturesT> RootLink();
87 public: ConstLinkPtr<PolicyT, FeaturesT> RootLink()
const;
90 public:
template <
typename PolicyT>
91 class Implementation :
public virtual Feature::Implementation<PolicyT>
93 public:
virtual Identity FindFreeGroupForModel(
94 const Identity &_modelID)
const = 0;
96 public:
virtual Identity FindFreeGroupForLink(
97 const Identity &_linkID)
const = 0;
99 public:
virtual Identity GetFreeGroupRootLink(
100 const Identity &_groupID)
const = 0;
107 FindFreeGroupFeature, FrameSemantics>
109 public:
template <
typename PolicyT,
typename FeaturesT>
130 public:
template <
typename PolicyT,
typename FeaturesT>
140 public:
template <
typename PolicyT>
147 const Identity &_groupID,
163 public:
template <
typename PolicyT,
typename FeaturesT>
181 public:
template <
typename PolicyT>
191 const Identity &_groupID,
195 const Identity &_groupID,
202#include <gz/physics/detail/FreeGroup.hh>