From 51126cf4585c67c6410b144712a04201e0bfb6c0 Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 17:46:20 +0000 Subject: [PATCH] collada_urdf: split top-level API functions into own header --- .../include/collada_urdf/collada_urdf.h | 80 ++++++++++++++++++ collada_urdf/src/collada_urdf.cpp | 82 +++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 collada_urdf/include/collada_urdf/collada_urdf.h create mode 100644 collada_urdf/src/collada_urdf.cpp diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h new file mode 100644 index 0000000..a1d3f66 --- /dev/null +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -0,0 +1,80 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +#ifndef COLLADA_URDF_COLLADA_URDF_H +#define COLLADA_URDF_COLLADA_URDF_H + +#include + +#include + +#include + +#include "urdf/model.h" + +namespace collada_urdf { + +/** Constructs a COLLADA DOM from a file, given the filename + * \param file The filename from where to read the XML + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromFile(std::string const& file, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a string containing XML + * \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 colladaFromString(std::string const& xml, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a TiXmlDocument + * \param xml_doc The TiXmlDocument containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); + +/** Constructs 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); + +} + +#endif diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp new file mode 100644 index 0000000..b407e74 --- /dev/null +++ b/collada_urdf/src/collada_urdf.cpp @@ -0,0 +1,82 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +#include "collada_urdf/collada_urdf.h" +#include "collada_urdf/collada_writer.h" + +using std::string; +using boost::shared_ptr; + +namespace collada_urdf { + +bool colladaFromFile(string const& file, shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (!urdf_xml.LoadFile(file)) { + ROS_ERROR("Could not load XML file"); + return false; + } + + return colladaFromXml(&urdf_xml, dom); +} + +bool colladaFromString(string const& xml, shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (urdf_xml.Parse(xml.c_str()) == 0) { + ROS_ERROR("Could not parse XML document"); + return false; + } + + return colladaFromXml(&urdf_xml, dom); +} + +bool colladaFromXml(TiXmlDocument* xml_doc, 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, shared_ptr& dom) { + ColladaWriter writer(robot_model); + dom = writer.convert(); + + return dom != shared_ptr(); +} + +}