Collision Checker
serialize_tv_object.cc
Go to the documentation of this file.
2 
3 #if ENABLE_SERIALIZER
4 
6 
7 #include <s11n.net/s11n/proxy/std/vector.hpp>
8 #include <s11n.net/s11n/s11nlite.hpp>
9 
10 namespace collision {
11 namespace serialize {
12 ICollisionObjectExport *exportObject(
14  return new TimeVariantCollisionObjectExport(sg);
15 }
17  const TimeVariantCollisionObject &tvobst) {
18  m_fields.time_start_idx = tvobst.time_start_idx();
19  for (int time_idx = m_fields.time_start_idx;
20  time_idx <= tvobst.time_end_idx(); time_idx++) {
21  auto obj = tvobst.getObstacleAtTime(time_idx);
22  if (!obj.get()) {
23  m_children.push_back(nullptr);
24  }
25  // warning: unsafe typecast
26  m_children.push_back(
27  static_cast<ICollisionObjectExport_s11 *>(obj->exportThis()));
28  }
29 }
30 
32  for (auto &obj : m_children) {
33  if (obj) delete obj;
34  }
35 }
37  s11nlite::node_type &dest) const {
38  typedef s11nlite::node_traits TR;
39  TR::class_name(dest, "TimeVariantCollisionObjectExport");
40  for (auto el : m_children) {
41  if (!el) return false;
42  }
43  bool res = true;
44  res = res && s11n::list::serialize_list(dest, "children", m_children);
45  TR::set(dest, "time_start_idx", m_fields.time_start_idx);
46  return res;
47 }
49  const s11nlite::node_type &src) {
50  typedef s11nlite::node_traits TR;
51  bool res = s11n::list::deserialize_list(src, "children", this->m_children);
52  m_fields.time_start_idx = TR::get(src, "time_start_idx", double(0));
53  return res;
54 }
55 
56 CollisionObject *TimeVariantCollisionObjectExport::loadObject(void) {
57  TimeVariantCollisionObject *tvobj =
58  new TimeVariantCollisionObject(m_fields.time_start_idx);
59  for (auto &obj : m_children) {
60  CollisionObject *loaded_obj_ptr = obj->loadObject();
61  if (!loaded_obj_ptr) {
62  delete tvobj;
63  return nullptr;
64  }
65  CollisionObjectConstPtr loaded_obj(loaded_obj_ptr);
66  if (loaded_obj->getCollisionObjectClass() == OBJ_CLASS_SHAPE) {
67  tvobj->appendObstacle(std::static_pointer_cast<const Shape>(loaded_obj));
68  } else if (loaded_obj->getCollisionObjectClass() == OBJ_CLASS_SHAPEGROUP) {
69  tvobj->appendObstacle(
70  std::static_pointer_cast<const ShapeGroup>(loaded_obj));
71  } else {
72  delete tvobj;
73  return nullptr;
74  }
75  }
76  return tvobj;
77 }
78 } // namespace serialize
79 } // namespace collision
80 #endif
TimeVariantCollisionObject can contain a different CollisionObject or ShapeGroup at each time step...
std::vector< ICollisionObjectExport_s11 * > m_children
virtual bool operator()(s11nlite::node_type &dest) const
TimeVariantCollisionObjectExportStruct m_fields
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
int serialize(const test::BroadphaseFailureCCObj &bf_object, std::ostream &output_stream, const char *format=SERIALIZER_DEFAULT_FORMAT)