From 0870c49be0e2e21a4000be5191e9ded695b30a60 Mon Sep 17 00:00:00 2001 From: YoheiKakiuchi Date: Sun, 2 Mar 2014 02:48:35 +0900 Subject: [PATCH] remove visual and collision if there is no vertices --- collada_parser/src/collada_parser.cpp | 35 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/collada_parser/src/collada_parser.cpp b/collada_parser/src/collada_parser.cpp index db7ce3e..6560abe 100644 --- a/collada_parser/src/collada_parser.cpp +++ b/collada_parser/src/collada_parser.cpp @@ -1146,10 +1146,15 @@ protected: //viss->push_back(plink->visual); //plink->visual_groups.insert(std::make_pair("default", viss)); - // collision - plink->collision.reset(new Collision()); - plink->collision->geometry = plink->visual->geometry; - plink->collision->origin = plink->visual->origin; + if( !plink->visual->geometry ) { + plink->visual.reset(); + plink->collision.reset(); + } else { + // collision + plink->collision.reset(new Collision()); + plink->collision->geometry = plink->visual->geometry; + plink->collision->origin = plink->visual->origin; + } // collision_groups deprecated //boost::shared_ptr > > cols; @@ -1162,26 +1167,22 @@ protected: boost::shared_ptr _CreateGeometry(const std::string& name, const std::list& listGeomProperties) { - boost::shared_ptr geometry(new Mesh()); - geometry->type = Geometry::MESH; - geometry->scale.x = 1; - geometry->scale.y = 1; - geometry->scale.z = 1; - std::vector > vertices; std::vector > indices; std::vector ambients; std::vector diffuses; - unsigned int index; + unsigned int index, vert_counter; vertices.resize(listGeomProperties.size()); indices.resize(listGeomProperties.size()); ambients.resize(listGeomProperties.size()); diffuses.resize(listGeomProperties.size()); index = 0; + vert_counter = 0; FOREACHC(it, listGeomProperties) { vertices[index].resize(it->vertices.size()); for(size_t i = 0; i < it->vertices.size(); ++i) { vertices[index][i] = _poseMult(it->_t, it->vertices[i]); + vert_counter++; } indices[index].resize(it->indices.size()); for(size_t i = 0; i < it->indices.size(); ++i) { @@ -1204,6 +1205,18 @@ protected: index++; } + if (vert_counter == 0) { + boost::shared_ptr ret; + ret.reset(); + return ret; + } + + boost::shared_ptr geometry(new Mesh()); + geometry->type = Geometry::MESH; + geometry->scale.x = 1; + geometry->scale.y = 1; + geometry->scale.z = 1; + // have to save the geometry into individual collada 1.4 files since URDF does not allow triangle meshes to be specified std::stringstream daedata; daedata << str(boost::format("\n\