diff --git a/include/ignition/gazebo/components/ReferenceModels.hh b/include/ignition/gazebo/components/ReferenceModels.hh new file mode 100644 index 00000000000..b1d83217ef1 --- /dev/null +++ b/include/ignition/gazebo/components/ReferenceModels.hh @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef IGNITION_GAZEBO_COMPONENTS_REFERENCEMODELS_HH_ +#define IGNITION_GAZEBO_COMPONENTS_REFERENCEMODELS_HH_ + +// TODO(adlarkin) add missing #include headers + +namespace ignition +{ +namespace gazebo +{ +// Inline bracket to help doxygen filtering. +inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE { +namespace components +{ + /// \brief Data structure that holds information about which models for + /// a given link view this link as the model's canonical link + struct ReferenceModelsInfo + { + /// \brief The models which this link serves as a canonical link for + std::set models; + + // TODO(adlarkin) fill in methods below + + // this should be called when a model is assigned to a canonical link + public: bool AddModel(const Entity &_model); + + // this should be called when a model is entity is removed/deleted + public: bool RemoveModel(const Entity &_model); + + public: bool operator==(const ReferenceModelsInfo &_info) const; + + public: bool operator!=(const ReferenceModelsInfo &_info) const; + }; +} + +namespace serializers +{ + /// \brief Serializer for ReferenceModelsInfo object + class ReferenceModelsInfoSerializer + { + // TODO(adlarkin) write serialization methods + }; +} + +namespace components +{ + /// \brief A component that gives a mapping between a link and all of the + /// models this link serves as a canonical link for. This component should + /// only be applied to links. + using ReferenceModels = + Component; + IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.ReferenceModels", + ReferenceModels) +} +} +} +} + +#endif