link.h
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2008, Willow Garage, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of the Willow Garage nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 /* Author: Wim Meeussen */
36 
37 #ifndef TESSERACT_SCENE_GRAPH_LINK_H
38 #define TESSERACT_SCENE_GRAPH_LINK_H
39 
42 #include <boost/serialization/export.hpp>
43 #include <string>
44 #include <vector>
45 #include <memory>
46 #include <Eigen/Geometry>
48 
49 #include <tesseract_common/fwd.h>
50 #include <tesseract_geometry/fwd.h>
51 
52 namespace boost::serialization
53 {
54 class access;
55 }
56 
57 namespace tesseract_scene_graph
58 {
59 class Material
60 {
61 public:
62  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
63 
64  using Ptr = std::shared_ptr<Material>;
65  using ConstPtr = std::shared_ptr<const Material>;
66 
67  Material() = default;
68  explicit Material(std::string name);
69  ~Material() = default;
70 
71  Material(const Material&) = default;
72  Material& operator=(const Material&) = default;
73  Material(Material&&) = default;
74  Material& operator=(Material&&) = default;
75 
76  const std::string& getName() const;
77 
78  static std::shared_ptr<Material> getDefaultMaterial();
79 
80  std::string texture_filename;
81  Eigen::Vector4d color;
82 
83  void clear();
84 
85  bool operator==(const Material& rhs) const;
86  bool operator!=(const Material& rhs) const;
87 
88 private:
89  std::string name_;
90 
93  template <class Archive>
94  void serialize(Archive& ar, const unsigned int version); // NOLINT
95 };
96 
97 class Inertial
98 {
99 public:
100  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
101 
102  using Ptr = std::shared_ptr<Inertial>;
103  using ConstPtr = std::shared_ptr<const Inertial>;
104 
105  Inertial() = default;
106  ~Inertial() = default;
107 
108  Inertial(const Inertial&) = default;
109  Inertial& operator=(const Inertial&) = default;
110  Inertial(Inertial&&) = default;
111  Inertial& operator=(Inertial&&) = default;
112 
113  Eigen::Isometry3d origin{ Eigen::Isometry3d::Identity() };
114  double mass{ 0 };
115  double ixx{ 0 };
116  double ixy{ 0 };
117  double ixz{ 0 };
118  double iyy{ 0 };
119  double iyz{ 0 };
120  double izz{ 0 };
121 
122  void clear();
123 
124  bool operator==(const Inertial& rhs) const;
125  bool operator!=(const Inertial& rhs) const;
126 
127 private:
130  template <class Archive>
131  void serialize(Archive& ar, const unsigned int version); // NOLINT
132 };
133 
134 class Visual
135 {
136 public:
137  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
138 
139  using Ptr = std::shared_ptr<Visual>;
140  using ConstPtr = std::shared_ptr<const Visual>;
141 
142  Visual();
143  ~Visual() = default;
144  Visual(const Visual&) = default;
145  Visual& operator=(const Visual&) = default;
146  Visual(Visual&&) = default;
147  Visual& operator=(Visual&&) = default;
148 
149  Eigen::Isometry3d origin;
150  std::shared_ptr<const tesseract_geometry::Geometry> geometry;
151 
153  std::string name;
154 
155  void clear();
156 
157  bool operator==(const Visual& rhs) const;
158  bool operator!=(const Visual& rhs) const;
159 
160 private:
163  template <class Archive>
164  void serialize(Archive& ar, const unsigned int version); // NOLINT
165 };
166 
168 {
169 public:
170  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
171 
172  using Ptr = std::shared_ptr<Collision>;
173  using ConstPtr = std::shared_ptr<const Collision>;
174 
175  Collision();
176  ~Collision() = default;
177  Collision(const Collision&) = default;
178  Collision& operator=(const Collision&) = default;
179  Collision(Collision&&) = default;
180  Collision& operator=(Collision&&) = default;
181 
182  Eigen::Isometry3d origin;
183  std::shared_ptr<const tesseract_geometry::Geometry> geometry;
184  std::string name;
185 
186  void clear();
187 
188  bool operator==(const Collision& rhs) const;
189  bool operator!=(const Collision& rhs) const;
190 
191 private:
194  template <class Archive>
195  void serialize(Archive& ar, const unsigned int version); // NOLINT
196 };
197 
198 class Link
199 {
200 public:
201  using Ptr = std::shared_ptr<Link>;
202  using ConstPtr = std::shared_ptr<const Link>;
203 
204  Link(std::string name);
205  Link() = default;
206  ~Link() = default;
207  // Links are non-copyable as their name must be unique
208  Link(const Link& other) = delete;
209  Link& operator=(const Link& other) = delete;
210 
211  Link(Link&& other) = default;
212  Link& operator=(Link&& other) = default;
213 
214  const std::string& getName() const;
215 
218 
220  std::vector<Visual::Ptr> visual;
221 
223  std::vector<Collision::Ptr> collision;
224 
225  void clear();
226 
227  bool operator==(const Link& rhs) const;
228  bool operator!=(const Link& rhs) const;
229 
234  Link clone() const;
235 
237  Link clone(const std::string& name) const;
238 
239 private:
240  std::string name_;
243  template <class Archive>
244  void serialize(Archive& ar, const unsigned int version); // NOLINT
245 };
246 
247 } // namespace tesseract_scene_graph
248 
249 BOOST_CLASS_EXPORT_KEY(tesseract_scene_graph::Material)
250 BOOST_CLASS_EXPORT_KEY(tesseract_scene_graph::Inertial)
251 BOOST_CLASS_EXPORT_KEY(tesseract_scene_graph::Visual)
252 BOOST_CLASS_EXPORT_KEY(tesseract_scene_graph::Collision)
253 BOOST_CLASS_EXPORT_KEY(tesseract_scene_graph::Link)
254 
255 #endif // TESSERACT_SCENE_GRAPH_LINK_H
tesseract_scene_graph::Visual::geometry
std::shared_ptr< const tesseract_geometry::Geometry > geometry
Definition: link.h:150
tesseract_scene_graph::Inertial::ConstPtr
std::shared_ptr< const Inertial > ConstPtr
Definition: link.h:103
tesseract_scene_graph::Material::Material
Material()=default
tesseract_scene_graph::Visual
Definition: link.h:134
tesseract_scene_graph::Visual::operator!=
bool operator!=(const Visual &rhs) const
Definition: link.cpp:143
tesseract_scene_graph::Collision::operator!=
bool operator!=(const Collision &rhs) const
Definition: link.cpp:175
tesseract_scene_graph::Material::name_
std::string name_
Definition: link.h:89
tesseract_scene_graph::Collision::~Collision
~Collision()=default
tesseract_scene_graph::Visual::origin
Eigen::Isometry3d origin
Definition: link.h:149
tesseract_scene_graph::Collision::ConstPtr
std::shared_ptr< const Collision > ConstPtr
Definition: link.h:173
tesseract_scene_graph::Visual::material
Material::Ptr material
Definition: link.h:152
tesseract_scene_graph::Collision::operator=
Collision & operator=(const Collision &)=default
tesseract_scene_graph::Inertial::ixz
double ixz
Definition: link.h:117
tesseract_scene_graph::Visual::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: link.cpp:146
tesseract_scene_graph::Material::access
friend class boost::serialization::access
Definition: link.h:91
tesseract_scene_graph::Inertial::operator=
Inertial & operator=(const Inertial &)=default
tesseract_scene_graph::Collision::geometry
std::shared_ptr< const tesseract_geometry::Geometry > geometry
Definition: link.h:183
tesseract_scene_graph::Inertial::iyy
double iyy
Definition: link.h:118
tesseract_scene_graph::Material::~Material
~Material()=default
tesseract_scene_graph::Inertial::mass
double mass
Definition: link.h:114
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_scene_graph::Visual::Visual
Visual()
Definition: link.cpp:123
tesseract_common::Serialization
tesseract_scene_graph::Inertial::operator!=
bool operator!=(const Inertial &rhs) const
Definition: link.cpp:104
tesseract_scene_graph::Inertial::access
friend class boost::serialization::access
Definition: link.h:128
tesseract_scene_graph::Material::operator!=
bool operator!=(const Material &rhs) const
Definition: link.cpp:69
tesseract_scene_graph::Visual::operator==
bool operator==(const Visual &rhs) const
Definition: link.cpp:133
tesseract_scene_graph::Visual::access
friend class boost::serialization::access
Definition: link.h:161
tesseract_scene_graph::Visual::name
std::string name
Definition: link.h:153
tesseract_scene_graph::Material::ConstPtr
std::shared_ptr< const Material > ConstPtr
Definition: link.h:65
tesseract_scene_graph::Inertial::ixy
double ixy
Definition: link.h:116
tesseract_scene_graph::Inertial::origin
Eigen::Isometry3d origin
Definition: link.h:113
tesseract_scene_graph::Visual::operator=
Visual & operator=(const Visual &)=default
tesseract_scene_graph::Collision::name
std::string name
Definition: link.h:184
tesseract_scene_graph::Collision::Collision
Collision()
Definition: link.cpp:157
tesseract_scene_graph::Material::operator==
bool operator==(const Material &rhs) const
Definition: link.cpp:60
tesseract_scene_graph::Inertial::~Inertial
~Inertial()=default
tesseract_scene_graph::Material::clear
void clear()
Definition: link.cpp:54
tesseract_scene_graph::Collision::Ptr
std::shared_ptr< Collision > Ptr
Definition: link.h:172
tesseract_scene_graph::Collision::access
friend class boost::serialization::access
Definition: link.h:192
tesseract_scene_graph::Visual::~Visual
~Visual()=default
boost::serialization
tesseract_scene_graph::Inertial::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: link.cpp:107
tesseract_scene_graph::Collision
Definition: link.h:167
tesseract_scene_graph::Visual::ConstPtr
std::shared_ptr< const Visual > ConstPtr
Definition: link.h:140
tesseract_scene_graph::Inertial::Ptr
std::shared_ptr< Inertial > Ptr
Definition: link.h:102
tesseract_scene_graph::Material::getDefaultMaterial
static std::shared_ptr< Material > getDefaultMaterial()
Definition: link.cpp:46
tesseract_scene_graph::Visual::clear
void clear()
Definition: link.cpp:125
tesseract_scene_graph::Collision::origin
Eigen::Isometry3d origin
Definition: link.h:182
tesseract_scene_graph::Material::operator=
Material & operator=(const Material &)=default
fwd.h
tesseract_scene_graph::Inertial
Definition: link.h:97
tesseract_scene_graph::Material::getName
const std::string & getName() const
Definition: link.cpp:52
tesseract_scene_graph::Inertial::izz
double izz
Definition: link.h:120
tesseract_scene_graph::Inertial::clear
void clear()
Definition: link.cpp:83
tesseract_scene_graph::Material
Definition: link.h:59
tesseract_scene_graph::Material::color
Eigen::Vector4d color
Definition: link.h:81
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_scene_graph::Material::texture_filename
std::string texture_filename
Definition: link.h:80
tesseract_scene_graph::Visual::Ptr
std::shared_ptr< Visual > Ptr
Definition: link.h:139
tesseract_scene_graph::Material::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: link.cpp:72
tesseract_scene_graph::Collision::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: link.cpp:178
tesseract_scene_graph::Collision::operator==
bool operator==(const Collision &rhs) const
Definition: link.cpp:166
tesseract_scene_graph::Material::Ptr
std::shared_ptr< Material > Ptr
Definition: link.h:64
tesseract_scene_graph::Inertial::Inertial
Inertial()=default
macros.h
tesseract_scene_graph
Definition: fwd.h:32
tesseract_scene_graph::Collision::clear
void clear()
Definition: link.cpp:159
tesseract_scene_graph::Inertial::iyz
double iyz
Definition: link.h:119
tesseract_scene_graph::Inertial::ixx
double ixx
Definition: link.h:115
tesseract_scene_graph::Inertial::operator==
bool operator==(const Inertial &rhs) const
Definition: link.cpp:90


tesseract_scene_graph
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:49