31 #include <Eigen/Geometry>
47 bool make_convex_meshes)
53 Eigen::Isometry3d collision_origin = Eigen::Isometry3d::Identity();
54 const tinyxml2::XMLElement* origin = xml_element->FirstChildElement(
"origin");
55 if (origin !=
nullptr)
63 std::throw_with_nested(std::runtime_error(
"Collision: Error parsing 'origin' element!"));
68 const tinyxml2::XMLElement* geometry = xml_element->FirstChildElement(
"geometry");
69 if (geometry ==
nullptr)
70 std::throw_with_nested(std::runtime_error(
"Collision: Error missing 'geometry' element!"));
75 geom =
parseGeometry(geometry, locator,
false, make_convex_meshes);
79 std::throw_with_nested(std::runtime_error(
"Collision: Error parsing 'geometry' element!"));
82 auto collision = std::make_shared<tesseract_scene_graph::Collision>();
83 collision->name = collision_name;
84 collision->origin = collision_origin;
85 collision->geometry = geom;
90 tinyxml2::XMLElement*
writeCollision(
const std::shared_ptr<const tesseract_scene_graph::Collision>& collision,
91 tinyxml2::XMLDocument& doc,
92 const std::string& package_path,
93 const std::string& link_name,
96 if (collision ==
nullptr)
97 std::throw_with_nested(std::runtime_error(
"Collision is nullptr and cannot be converted to XML"));
101 if (!collision->name.empty())
102 xml_element->SetAttribute(
"name", collision->name.c_str());
104 if (!collision->origin.matrix().isIdentity(std::numeric_limits<double>::epsilon()))
106 tinyxml2::XMLElement* xml_origin =
writeOrigin(collision->origin, doc);
107 xml_element->InsertEndChild(xml_origin);
111 std::string filename = link_name;
112 if (!collision->name.empty())
113 filename = filename +
"_" + collision->name;
115 filename = filename +
"_collision";
118 if (!package_path.empty())
119 filename =
"collision/" + filename;
123 filename = filename +
"_" + std::to_string(
id);
127 tinyxml2::XMLElement* xml_geometry =
writeGeometry(collision->geometry, doc, package_path, filename);
128 xml_element->InsertEndChild(xml_geometry);
132 std::throw_with_nested(std::runtime_error(
"Could not write geometry for collision '" + collision->name +
"'!"));