From 4ffd7658d7242492f8b37cc00448be699b79171c Mon Sep 17 00:00:00 2001 From: Rosen Diankov Date: Thu, 21 Jun 2012 14:14:09 +0900 Subject: [PATCH] update to collada 2.4.0 support and assimp3.0 support. collada_parser now including urdf_model/X.h (from urdfdom) instead of urdf_interface/X.h --- collada_parser/CMakeLists.txt | 17 ++++++++---- .../include/collada_parser/collada_parser.h | 16 +++++------ collada_parser/manifest.xml | 4 +-- collada_parser/src/collada_parser.cpp | 6 ++--- collada_urdf/CMakeLists.txt | 27 ++++++++++++++++++- collada_urdf/src/collada_urdf.cpp | 24 ++++++++++++----- 6 files changed, 69 insertions(+), 25 deletions(-) diff --git a/collada_parser/CMakeLists.txt b/collada_parser/CMakeLists.txt index dfa37b4..d4df99a 100644 --- a/collada_parser/CMakeLists.txt +++ b/collada_parser/CMakeLists.txt @@ -11,11 +11,15 @@ include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) rosbuild_init() +rosbuild_add_boost_directories() + set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake-extensions/ ) find_package(PkgConfig) -pkg_check_modules(COLLADADOM collada15dom) -include_directories(${COLLADADOM_INCLUDE_DIRS}) -#link_directories(${COLLADADOM_LIBRARY_DIRS}) +find_package(COLLADA_DOM 2.3 COMPONENTS 1.5) +if( COLLADA_DOM_FOUND ) + include_directories(${COLLADA_DOM_INCLUDE_DIRS}) + #link_directories(${COLLADA_DOM_LIBRARY_DIRS}) +endif() #set the default path for built executables to the "bin" directory set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) @@ -31,11 +35,14 @@ endif() #common commands for building c++ executables and libraries rosbuild_add_library(${PROJECT_NAME} src/collada_parser.cpp) +rosbuild_add_compile_flags(${PROJECT_NAME} "${COLLADA_DOM_CFLAGS_OTHER}") +rosbuild_add_link_flags(${PROJECT_NAME} "${COLLADA_DOM_LDFLAGS_OTHER}") + if(APPLE) - set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") + rosbuild_add_link_flags(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif(APPLE) #target_link_libraries(${PROJECT_NAME} another_library) -rosbuild_add_boost_directories() + #rosbuild_link_boost(${PROJECT_NAME} thread) diff --git a/collada_parser/include/collada_parser/collada_parser.h b/collada_parser/include/collada_parser/collada_parser.h index 84278ae..da72748 100644 --- a/collada_parser/include/collada_parser/collada_parser.h +++ b/collada_parser/include/collada_parser/collada_parser.h @@ -1,13 +1,13 @@ /********************************************************************* * Software License Agreement (BSD License) -* +* * Copyright (c) 2008, 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: -* +* * * Redistributions 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 @@ -17,7 +17,7 @@ * * 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 @@ -41,13 +41,13 @@ #include #include -#include +#include -namespace urdf{ +namespace urdf { - /// \brief Load Model from string - boost::shared_ptr parseCollada(const std::string &xml_string ); +/// \brief Load Model from string +boost::shared_ptr parseCollada(const std::string &xml_string ); } diff --git a/collada_parser/manifest.xml b/collada_parser/manifest.xml index 24ce3bf..5beafbc 100644 --- a/collada_parser/manifest.xml +++ b/collada_parser/manifest.xml @@ -17,8 +17,8 @@ - + diff --git a/collada_parser/src/collada_parser.cpp b/collada_parser/src/collada_parser.cpp index c59523e..5352ee3 100644 --- a/collada_parser/src/collada_parser.cpp +++ b/collada_parser/src/collada_parser.cpp @@ -56,7 +56,7 @@ #include #include -#include +#include #ifndef HAVE_MKSTEMPS #include @@ -419,7 +419,7 @@ public: bool InitFromFile(const std::string& filename) { ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s, filename: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE%filename)); _collada.reset(new DAE); - _dom = _collada->open(filename); + _dom = (domCOLLADA*)_collada->open(filename); if (!_dom) { return false; } @@ -438,7 +438,7 @@ public: bool InitFromData(const std::string& pdata) { ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE)); _collada.reset(new DAE); - _dom = _collada->openFromMemory(".",pdata.c_str()); + _dom = (domCOLLADA*)_collada->openFromMemory(".",pdata.c_str()); if (!_dom) { return false; } diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index 74f5a11..9969631 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -6,9 +6,34 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) link_libraries(tinyxml) +find_package(ASSIMP) +if( NOT ASSIMP_FOUND ) + pkg_check_modules(ASSIMP assimp) +endif() + +if( ASSIMP_FOUND ) + if( ${ASSIMP_VERSION} STRGREATER "2.0.0" ) + set(IS_ASSIMP3 1) + add_definitions(-DIS_ASSIMP3) + endif() + include_directories(${ASSIMP_INCLUDE_DIRS}) + link_directories(${ASSIMP_LIBRARY_DIRS}) +else() + message(STATUS "could not find assimp (perhaps available thorugh ROS package?), so assimping assimp v2") + set(ASSIMP_LIBRARIES assimp) + set(ASSIMP_LIBRARY_DIRS) + set(ASSIMP_CXX_FLAGS) + set(ASSIMP_CFLAGS_OTHER) + set(ASSIMP_LINK_FLAGS) + set(ASSIMP_INCLUDE_DIRS) + set(IS_ASSIMP3 0) # most likely not +endif() + rosbuild_add_library(collada_urdf src/collada_urdf.cpp) rosbuild_link_boost(collada_urdf system) -target_link_libraries(collada_urdf assimp) +target_link_libraries(collada_urdf ${ASSIMP_LIBRARIES}) +rosbuild_add_compile_flags(collada_urdf "${ASSIMP_CXX_FLAGS} ${ASSIMP_CFLAGS_OTHER}") +rosbuild_add_link_flags(collada_urdf "${ASSIMP_LINK_FLAGS}") rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp) target_link_libraries(urdf_to_collada collada_urdf) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 29479e6..d1c1aa0 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #include @@ -60,11 +60,23 @@ #include #include -#include -#include -#include -#include -#include +#if defined(IS_ASSIMP3) +#include +#include +#include +#include +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include + +#endif #define FOREACH(it, v) for(typeof((v).begin())it = (v).begin(); it != (v).end(); (it)++) #define FOREACHC FOREACH