remove visual and collision if there is no vertices

This commit is contained in:
YoheiKakiuchi 2014-03-02 02:48:35 +09:00 committed by Ioan Sucan
parent 92e7b07c98
commit 0870c49be0
1 changed files with 24 additions and 11 deletions

View File

@ -1146,10 +1146,15 @@ protected:
//viss->push_back(plink->visual); //viss->push_back(plink->visual);
//plink->visual_groups.insert(std::make_pair("default", viss)); //plink->visual_groups.insert(std::make_pair("default", viss));
// collision if( !plink->visual->geometry ) {
plink->collision.reset(new Collision()); plink->visual.reset();
plink->collision->geometry = plink->visual->geometry; plink->collision.reset();
plink->collision->origin = plink->visual->origin; } else {
// collision
plink->collision.reset(new Collision());
plink->collision->geometry = plink->visual->geometry;
plink->collision->origin = plink->visual->origin;
}
// collision_groups deprecated // collision_groups deprecated
//boost::shared_ptr<std::vector<boost::shared_ptr<Collision > > > cols; //boost::shared_ptr<std::vector<boost::shared_ptr<Collision > > > cols;
@ -1162,26 +1167,22 @@ protected:
boost::shared_ptr<Geometry> _CreateGeometry(const std::string& name, const std::list<GEOMPROPERTIES>& listGeomProperties) boost::shared_ptr<Geometry> _CreateGeometry(const std::string& name, const std::list<GEOMPROPERTIES>& listGeomProperties)
{ {
boost::shared_ptr<Mesh> geometry(new Mesh());
geometry->type = Geometry::MESH;
geometry->scale.x = 1;
geometry->scale.y = 1;
geometry->scale.z = 1;
std::vector<std::vector<Vector3> > vertices; std::vector<std::vector<Vector3> > vertices;
std::vector<std::vector<int> > indices; std::vector<std::vector<int> > indices;
std::vector<Color> ambients; std::vector<Color> ambients;
std::vector<Color> diffuses; std::vector<Color> diffuses;
unsigned int index; unsigned int index, vert_counter;
vertices.resize(listGeomProperties.size()); vertices.resize(listGeomProperties.size());
indices.resize(listGeomProperties.size()); indices.resize(listGeomProperties.size());
ambients.resize(listGeomProperties.size()); ambients.resize(listGeomProperties.size());
diffuses.resize(listGeomProperties.size()); diffuses.resize(listGeomProperties.size());
index = 0; index = 0;
vert_counter = 0;
FOREACHC(it, listGeomProperties) { FOREACHC(it, listGeomProperties) {
vertices[index].resize(it->vertices.size()); vertices[index].resize(it->vertices.size());
for(size_t i = 0; i < it->vertices.size(); ++i) { for(size_t i = 0; i < it->vertices.size(); ++i) {
vertices[index][i] = _poseMult(it->_t, it->vertices[i]); vertices[index][i] = _poseMult(it->_t, it->vertices[i]);
vert_counter++;
} }
indices[index].resize(it->indices.size()); indices[index].resize(it->indices.size());
for(size_t i = 0; i < it->indices.size(); ++i) { for(size_t i = 0; i < it->indices.size(); ++i) {
@ -1204,6 +1205,18 @@ protected:
index++; index++;
} }
if (vert_counter == 0) {
boost::shared_ptr<Mesh> ret;
ret.reset();
return ret;
}
boost::shared_ptr<Mesh> 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 // have to save the geometry into individual collada 1.4 files since URDF does not allow triangle meshes to be specified
std::stringstream daedata; std::stringstream daedata;
daedata << str(boost::format("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\ daedata << str(boost::format("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\