|
From: <is...@us...> - 2009-09-04 04:12:09
|
Revision: 23813
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=23813&view=rev
Author: isucan
Date: 2009-09-04 04:11:58 +0000 (Fri, 04 Sep 2009)
Log Message:
-----------
removing ogre dependency for robot self filter
Modified Paths:
--------------
pkg/trunk/motion_planning/robot_self_filter/manifest.xml
pkg/trunk/motion_planning/robot_self_filter/src/self_mask.cpp
pkg/trunk/stacks/manipulation_common/geometric_shapes/include/geometric_shapes/shapes.h
pkg/trunk/stacks/manipulation_common/geometric_shapes/src/load_mesh.cpp
Modified: pkg/trunk/motion_planning/robot_self_filter/manifest.xml
===================================================================
--- pkg/trunk/motion_planning/robot_self_filter/manifest.xml 2009-09-04 03:17:59 UTC (rev 23812)
+++ pkg/trunk/motion_planning/robot_self_filter/manifest.xml 2009-09-04 04:11:58 UTC (rev 23813)
@@ -17,7 +17,6 @@
<depend package="geometric_shapes"/>
<depend package="urdf"/>
<depend package="resource_retriever"/>
- <depend package="ogre_tools"/>
<export>
<cpp cflags="-I${prefix}/include `rosboost-cfg --cflags`" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lrobot_self_filter" />
Modified: pkg/trunk/motion_planning/robot_self_filter/src/self_mask.cpp
===================================================================
--- pkg/trunk/motion_planning/robot_self_filter/src/self_mask.cpp 2009-09-04 03:17:59 UTC (rev 23812)
+++ pkg/trunk/motion_planning/robot_self_filter/src/self_mask.cpp 2009-09-04 04:11:58 UTC (rev 23813)
@@ -30,7 +30,6 @@
#include "robot_self_filter/self_mask.h"
#include <urdf/model.h>
#include <resource_retriever/retriever.h>
-#include <ogre_tools/stl_loader.h>
#include <ros/console.h>
#include <algorithm>
#include <sstream>
@@ -103,19 +102,8 @@
ROS_WARN("Retrieved empty mesh for resource '%s'", mesh->filename.c_str());
else
{
- ogre_tools::STLLoader loader;
- if (loader.load(res.data.get()))
- {
- std::vector<btVector3> triangles;
- for (unsigned int i = 0 ; i < loader.triangles_.size() ; ++i)
- {
- triangles.push_back(btVector3(loader.triangles_[i].vertices_[0].x, loader.triangles_[i].vertices_[0].y, loader.triangles_[i].vertices_[0].z));
- triangles.push_back(btVector3(loader.triangles_[i].vertices_[1].x, loader.triangles_[i].vertices_[1].y, loader.triangles_[i].vertices_[1].z));
- triangles.push_back(btVector3(loader.triangles_[i].vertices_[2].x, loader.triangles_[i].vertices_[2].y, loader.triangles_[i].vertices_[2].z));
- }
- result = shapes::createMeshFromVertices(triangles);
- }
- else
+ result = shapes::createMeshFromBinaryStlData(reinterpret_cast<char*>(res.data.get()), res.size);
+ if (result == NULL)
ROS_ERROR("Failed to load mesh '%s'", mesh->filename.c_str());
}
}
Modified: pkg/trunk/stacks/manipulation_common/geometric_shapes/include/geometric_shapes/shapes.h
===================================================================
--- pkg/trunk/stacks/manipulation_common/geometric_shapes/include/geometric_shapes/shapes.h 2009-09-04 03:17:59 UTC (rev 23812)
+++ pkg/trunk/stacks/manipulation_common/geometric_shapes/include/geometric_shapes/shapes.h 2009-09-04 04:11:58 UTC (rev 23813)
@@ -237,6 +237,10 @@
recomputed and repeating vertices are identified. */
Mesh* createMeshFromBinaryStl(const char *filename);
+ /** \brief Load a mesh from a binary STL stream. Normals are
+ recomputed and repeating vertices are identified. */
+ Mesh* createMeshFromBinaryStlData(const char *data, unsigned int size);
+
/** \brief Create a copy of a shape */
Shape* cloneShape(const Shape *shape);
Modified: pkg/trunk/stacks/manipulation_common/geometric_shapes/src/load_mesh.cpp
===================================================================
--- pkg/trunk/stacks/manipulation_common/geometric_shapes/src/load_mesh.cpp 2009-09-04 03:17:59 UTC (rev 23812)
+++ pkg/trunk/stacks/manipulation_common/geometric_shapes/src/load_mesh.cpp 2009-09-04 04:11:58 UTC (rev 23813)
@@ -187,10 +187,67 @@
return mesh;
}
+
+ shapes::Mesh* createMeshFromBinaryStlData(const char *data, unsigned int size)
+ {
+ const char* pos = data;
+ pos += 80; // skip the 80 byte header
+
+ unsigned int numTriangles = *(unsigned int*)pos;
+ pos += 4;
+
+ // make sure we have read enough data
+ if ((long)(50 * numTriangles + 84) <= size)
+ {
+ std::vector<btVector3> vertices;
+
+ for (unsigned int currentTriangle = 0 ; currentTriangle < numTriangles ; ++currentTriangle)
+ {
+ // skip the normal
+ pos += 12;
+
+ // read vertices
+ btVector3 v1(0,0,0);
+ btVector3 v2(0,0,0);
+ btVector3 v3(0,0,0);
+
+ v1.setX(*(float*)pos);
+ pos += 4;
+ v1.setY(*(float*)pos);
+ pos += 4;
+ v1.setZ(*(float*)pos);
+ pos += 4;
+
+ v2.setX(*(float*)pos);
+ pos += 4;
+ v2.setY(*(float*)pos);
+ pos += 4;
+ v2.setZ(*(float*)pos);
+ pos += 4;
+
+ v3.setX(*(float*)pos);
+ pos += 4;
+ v3.setY(*(float*)pos);
+ pos += 4;
+ v3.setZ(*(float*)pos);
+ pos += 4;
+
+ // skip attribute
+ pos += 2;
+
+ vertices.push_back(v1);
+ vertices.push_back(v2);
+ vertices.push_back(v3);
+ }
+
+ return createMeshFromVertices(vertices);
+ }
+
+ return NULL;
+ }
shapes::Mesh* createMeshFromBinaryStl(const char *filename)
{
-
FILE* input = fopen(filename, "r");
if (!input)
return NULL;
@@ -204,65 +261,14 @@
fclose(input);
+ shapes::Mesh *result = NULL;
+
if (rd == 1)
- {
- char* pos = buffer;
- pos += 80; // skip the 80 byte header
-
- unsigned int numTriangles = *(unsigned int*)pos;
- pos += 4;
-
- // make sure we have read enough data
- if ((long)(50 * numTriangles + 84) <= fileSize)
- {
- std::vector<btVector3> vertices;
-
- for (unsigned int currentTriangle = 0 ; currentTriangle < numTriangles ; ++currentTriangle)
- {
- // skip the normal
- pos += 12;
-
- // read vertices
- btVector3 v1(0,0,0);
- btVector3 v2(0,0,0);
- btVector3 v3(0,0,0);
-
- v1.setX(*(float*)pos);
- pos += 4;
- v1.setY(*(float*)pos);
- pos += 4;
- v1.setZ(*(float*)pos);
- pos += 4;
-
- v2.setX(*(float*)pos);
- pos += 4;
- v2.setY(*(float*)pos);
- pos += 4;
- v2.setZ(*(float*)pos);
- pos += 4;
-
- v3.setX(*(float*)pos);
- pos += 4;
- v3.setY(*(float*)pos);
- pos += 4;
- v3.setZ(*(float*)pos);
- pos += 4;
-
- // skip attribute
- pos += 2;
-
- vertices.push_back(v1);
- vertices.push_back(v2);
- vertices.push_back(v3);
- }
-
- delete[] buffer;
-
- return createMeshFromVertices(vertices);
- }
- }
+ result = createMeshFromBinaryStlData(buffer, fileSize);
- return NULL;
+ delete[] buffer;
+
+ return result;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|