diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h index 558e51f..ae7ed8f 100644 --- a/collada_urdf/include/collada_urdf/collada_urdf.h +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2010, Willow Garage, Inc., University of Tokyo +* Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Authors: Tim Field, Rosen Diankov */ +/* Authors: Tim Field */ #ifndef COLLADA_URDF_COLLADA_URDF_H #define COLLADA_URDF_COLLADA_URDF_H @@ -50,20 +50,33 @@ public: ColladaUrdfException(std::string const& what); }; -enum WriteOptions -{ - WO_IgnoreCollisionGeometry = 1, ///< if set, will use only the visual geometry -}; - -/** Construct a COLLADA DOM from an URDF model - - \param robot_model The initialized robot model - \param dom The resulting COLLADA DOM - \param writeoptions A combination of \ref WriteOptions - - \return true on success, false on failure +/** Construct a COLLADA DOM from an URDF file + * \param file The filename from where to read the URDF + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure */ -bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions=0); +bool colladaFromUrdfFile(std::string const& file, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a string containing URDF + * \param xml A string containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfString(std::string const& xml, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a TiXmlDocument containing URDF + * \param xml_doc The TiXmlDocument containing URDF + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a URDF robot model + * \param robot_model The URDF robot model + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); /** Write a COLLADA DOM to a file * \param dom COLLADA DOM to write diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 2671187..6e85bc6 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -1225,14 +1225,44 @@ private: Assimp::Importer _importer; }; + ColladaUrdfException::ColladaUrdfException(std::string const& what) : std::runtime_error(what) { } -bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions) -{ - ColladaWriter writer(robot_model,writeoptions); +bool colladaFromUrdfFile(string const& file, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (!urdf_xml.LoadFile(file)) { + ROS_ERROR("Could not load XML file"); + return false; + } + + return colladaFromUrdfXml(&urdf_xml, dom); +} + +bool colladaFromUrdfString(string const& xml, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (urdf_xml.Parse(xml.c_str()) == 0) { + ROS_ERROR("Could not parse XML document"); + return false; + } + + return colladaFromUrdfXml(&urdf_xml, dom); +} + +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom) { + urdf::Model robot_model; + if (!robot_model.initXml(xml_doc)) { + ROS_ERROR("Could not generate robot model"); + return false; + } + + return colladaFromUrdfModel(robot_model, dom); +} + +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom) { + ColladaWriter writer(robot_model,0); dom = writer.convert(); return dom != boost::shared_ptr(); }