link.cpp
Go to the documentation of this file.
1 
28 #include <boost/serialization/access.hpp>
29 #include <boost/serialization/nvp.hpp>
30 #include <boost/serialization/shared_ptr.hpp>
31 #include <boost/serialization/vector.hpp>
33 
35 #include <tesseract_common/utils.h>
38 
39 namespace tesseract_scene_graph
40 {
41 /*********************************************************/
42 /****** Material *****/
43 /*********************************************************/
44 Material::Material(std::string name) : name_(std::move(name)) { this->clear(); }
45 
46 std::shared_ptr<Material> Material::getDefaultMaterial()
47 {
48  static auto default_material = std::make_shared<Material>("default_tesseract_material");
49  return default_material;
50 }
51 
52 const std::string& Material::getName() const { return name_; }
53 
55 {
56  color = Eigen::Vector4d(0.5, 0.5, 0.5, 1.0);
57  texture_filename.clear();
58 }
59 
60 bool Material::operator==(const Material& rhs) const
61 {
62  bool equal = true;
63  equal &= texture_filename == rhs.texture_filename;
65  equal &= name_ == rhs.name_;
66 
67  return equal;
68 }
69 bool Material::operator!=(const Material& rhs) const { return !operator==(rhs); }
70 
71 template <class Archive>
72 void Material::serialize(Archive& ar, const unsigned int /*version*/)
73 {
74  ar& BOOST_SERIALIZATION_NVP(texture_filename);
75  ar& BOOST_SERIALIZATION_NVP(color);
76  ar& BOOST_SERIALIZATION_NVP(name_);
77 }
78 
79 /*********************************************************/
80 /****** Inertial *****/
81 /*********************************************************/
82 
84 {
85  origin.setIdentity();
86  mass = 0;
87  ixx = ixy = ixz = iyy = iyz = izz = 0;
88 }
89 
90 bool Inertial::operator==(const Inertial& rhs) const
91 {
92  bool equal = true;
93  equal &= origin.isApprox(rhs.origin, 1e-5);
101 
102  return equal;
103 }
104 bool Inertial::operator!=(const Inertial& rhs) const { return !operator==(rhs); }
105 
106 template <class Archive>
107 void Inertial::serialize(Archive& ar, const unsigned int /*version*/)
108 {
109  ar& BOOST_SERIALIZATION_NVP(origin);
110  ar& BOOST_SERIALIZATION_NVP(mass);
111  ar& BOOST_SERIALIZATION_NVP(ixx);
112  ar& BOOST_SERIALIZATION_NVP(ixy);
113  ar& BOOST_SERIALIZATION_NVP(ixz);
114  ar& BOOST_SERIALIZATION_NVP(iyy);
115  ar& BOOST_SERIALIZATION_NVP(iyz);
116  ar& BOOST_SERIALIZATION_NVP(izz);
117 }
118 
119 /*********************************************************/
120 /****** Visual *****/
121 /*********************************************************/
122 
123 Visual::Visual() { this->clear(); }
124 
126 {
127  origin.setIdentity();
129  geometry.reset();
130  name.clear();
131 }
132 
133 bool Visual::operator==(const Visual& rhs) const
134 {
135  bool equal = true;
136  equal &= origin.isApprox(rhs.origin, 1e-5);
139  equal &= name == rhs.name;
140 
141  return equal;
142 }
143 bool Visual::operator!=(const Visual& rhs) const { return !operator==(rhs); }
144 
145 template <class Archive>
146 void Visual::serialize(Archive& ar, const unsigned int /*version*/)
147 {
148  ar& BOOST_SERIALIZATION_NVP(origin);
149  ar& BOOST_SERIALIZATION_NVP(geometry);
150  ar& BOOST_SERIALIZATION_NVP(material);
151  ar& BOOST_SERIALIZATION_NVP(name);
152 }
153 
154 /*********************************************************/
155 /****** Collision *****/
156 /*********************************************************/
158 
160 {
161  origin.setIdentity();
162  geometry.reset();
163  name.clear();
164 }
165 
166 bool Collision::operator==(const Collision& rhs) const
167 {
168  bool equal = true;
169  equal &= origin.isApprox(rhs.origin, 1e-5);
171  equal &= name == rhs.name;
172 
173  return equal;
174 }
175 bool Collision::operator!=(const Collision& rhs) const { return !operator==(rhs); }
176 
177 template <class Archive>
178 void Collision::serialize(Archive& ar, const unsigned int /*version*/)
179 {
180  ar& BOOST_SERIALIZATION_NVP(origin);
181  ar& BOOST_SERIALIZATION_NVP(geometry);
182  ar& BOOST_SERIALIZATION_NVP(name);
183 }
184 
185 /*********************************************************/
186 /****** Link *****/
187 /*********************************************************/
188 Link::Link(std::string name) : name_(std::move(name)) { this->clear(); }
189 
190 const std::string& Link::getName() const { return name_; }
191 
193 {
194  this->inertial.reset();
195  this->collision.clear();
196  this->visual.clear();
197 }
198 
199 Link Link::clone() const { return clone(name_); }
200 
201 Link Link::clone(const std::string& name) const
202 {
203  Link ret(name);
204  if (this->inertial)
205  {
206  ret.inertial = std::make_shared<Inertial>(*(this->inertial));
207  }
208  for (const auto& c : this->collision)
209  {
210  ret.collision.push_back(std::make_shared<Collision>(*c));
211  }
212  for (const auto& v : this->visual)
213  {
214  ret.visual.push_back(std::make_shared<Visual>(*v));
215  }
216  return ret;
217 }
218 
219 bool Link::operator==(const Link& rhs) const
220 {
221  using namespace tesseract_common;
222  bool equal = true;
224  equal &= isIdentical<Visual::Ptr>(visual,
225  rhs.visual,
226  false,
227  tesseract_common::pointersEqual<Visual>,
228  [](const Visual::Ptr& v1, const Visual::Ptr& v2) { return v1->name < v2->name; });
229  equal &= isIdentical<Collision::Ptr>(
230  collision,
231  rhs.collision,
232  false,
233  tesseract_common::pointersEqual<Collision>,
234  [](const Collision::Ptr& v1, const Collision::Ptr& v2) { return v1->name < v2->name; });
235  equal &= name_ == rhs.name_;
236  return equal;
237 }
238 bool Link::operator!=(const Link& rhs) const { return !operator==(rhs); }
239 
240 template <class Archive>
241 void Link::serialize(Archive& ar, const unsigned int /*version*/)
242 {
243  ar& BOOST_SERIALIZATION_NVP(inertial);
244  ar& BOOST_SERIALIZATION_NVP(visual);
245  ar& BOOST_SERIALIZATION_NVP(collision);
246  ar& BOOST_SERIALIZATION_NVP(name_);
247 }
248 
249 } // namespace tesseract_scene_graph
250 
257 
258 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_scene_graph::Material)
259 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_scene_graph::Inertial)
260 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_scene_graph::Visual)
261 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_scene_graph::Collision)
262 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_scene_graph::Link)
tesseract_scene_graph::Visual::geometry
std::shared_ptr< const tesseract_geometry::Geometry > geometry
Definition: link.h:150
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_common
tesseract_scene_graph::Material::name_
std::string name_
Definition: link.h:89
tesseract_scene_graph::Visual::origin
Eigen::Isometry3d origin
Definition: link.h:149
tesseract_scene_graph::Visual::material
Material::Ptr material
Definition: link.h:152
utils.h
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_common::almostEqualRelativeAndAbs
bool almostEqualRelativeAndAbs(const Eigen::Ref< const Eigen::VectorXd > &v1, const Eigen::Ref< const Eigen::VectorXd > &v2, const Eigen::Ref< const Eigen::VectorXd > &max_diff, const Eigen::Ref< const Eigen::VectorXd > &max_rel_diff)
tesseract_common::pointersEqual
bool pointersEqual(const std::shared_ptr< T > &p1, const std::shared_ptr< T > &p2)
TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE(Type)
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::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_scene_graph::Inertial::operator!=
bool operator!=(const Inertial &rhs) const
Definition: link.cpp:104
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::name
std::string name
Definition: link.h:153
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::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
serialization.h
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::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::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::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
geometry.h
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
macros.h
tesseract_scene_graph
Definition: fwd.h:32
tesseract_scene_graph::Collision::clear
void clear()
Definition: link.cpp:159
eigen_serialization.h
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