Collision Checker
serialize_shape_group.cc
Go to the documentation of this file.
2 
3 #if ENABLE_SERIALIZER
5 
6 #include <s11n.net/s11n/proxy/std/vector.hpp>
7 #include <s11n.net/s11n/s11nlite.hpp>
8 
9 namespace collision {
10 namespace serialize {
11 ICollisionObjectExport *exportObject(const collision::ShapeGroup &sg) {
12  return new ShapeGroupExport(sg);
13 }
14 ShapeGroupExport::ShapeGroupExport(const ShapeGroup &sg) {
15  for (auto &obj : sg.unpack()) {
16  // warning: unsafe typecast
17  m_children.push_back(static_cast<IShapeExport *>(obj->exportThis()));
18  }
19 }
20 
22  for (auto obj : m_children) {
23  if (obj) delete obj;
24  }
25 }
26 bool ShapeGroupExport::operator()(s11nlite::node_type &dest) const {
27  typedef s11nlite::node_traits TR;
28  TR::class_name(dest, "ShapeGroupExport");
29  for (auto el : m_children) {
30  if (!el) return false;
31  }
32  s11n::list::serialize_list(dest, "children", m_children);
33  return true;
34 }
35 bool ShapeGroupExport::operator()(const s11nlite::node_type &src) {
36  typedef s11nlite::node_traits TR;
37  return s11n::list::deserialize_list(src, "children", this->m_children);
38 }
39 
40 CollisionObject *ShapeGroupExport::loadObject(void) {
41  ShapeGroup *sg = new ShapeGroup();
42  for (auto obj : m_children) {
43  CollisionObject *loaded_obj_ptr = obj->loadObject();
44  if (!loaded_obj_ptr) {
45  delete sg;
46  return nullptr;
47  }
48  CollisionObjectConstPtr loaded_obj(loaded_obj_ptr);
49  if (loaded_obj->getCollisionObjectClass() != OBJ_CLASS_SHAPE) {
50  delete sg;
51  return nullptr;
52  }
53  sg->addToGroup(std::static_pointer_cast<const Shape>(loaded_obj));
54  }
55  return sg;
56 }
57 } // namespace serialize
58 } // namespace collision
59 #endif
CollisionObject * loadObject(void)
virtual bool operator()(s11nlite::node_type &dest) const
ShapeGroup can contain simple shapes.
Definition: shape_group.h:33
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
std::vector< ICollisionObjectExport_s11 * > m_children
int serialize(const test::BroadphaseFailureCCObj &bf_object, std::ostream &output_stream, const char *format=SERIALIZER_DEFAULT_FORMAT)