Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00037 #include "pr2_navigation_self_filter/shapes.h"
00038
00039 shapes::Shape* shapes::cloneShape(const shapes::Shape *shape)
00040 {
00041 shapes::Shape *result = NULL;
00042 switch (shape->type)
00043 {
00044 case SPHERE:
00045 result = new Sphere(static_cast<const Sphere*>(shape)->radius);
00046 break;
00047 case CYLINDER:
00048 result = new Cylinder(static_cast<const Cylinder*>(shape)->radius, static_cast<const Cylinder*>(shape)->length);
00049 break;
00050 case BOX:
00051 result = new Box(static_cast<const Box*>(shape)->size[0], static_cast<const Box*>(shape)->size[1], static_cast<const Box*>(shape)->size[2]);
00052 break;
00053 case MESH:
00054 {
00055 const Mesh *src = static_cast<const Mesh*>(shape);
00056 Mesh *dest = new Mesh(src->vertexCount, src->triangleCount);
00057 unsigned int n = 3 * src->vertexCount;
00058 for (unsigned int i = 0 ; i < n ; ++i)
00059 dest->vertices[i] = src->vertices[i];
00060 n = 3 * src->triangleCount;
00061 for (unsigned int i = 0 ; i < n ; ++i)
00062 {
00063 dest->triangles[i] = src->triangles[i];
00064 dest->normals[i] = src->normals[i];
00065 }
00066 result = dest;
00067 }
00068 break;
00069 default:
00070 break;
00071 }
00072 return result;
00073 }
00074
00075 shapes::StaticShape* shapes::cloneShape(const shapes::StaticShape *shape)
00076 {
00077 shapes::StaticShape *result = NULL;
00078 switch (shape->type)
00079 {
00080 case PLANE:
00081 result = new Plane(static_cast<const Plane*>(shape)->a, static_cast<const Plane*>(shape)->b,
00082 static_cast<const Plane*>(shape)->c, static_cast<const Plane*>(shape)->d);
00083 break;
00084 default:
00085 break;
00086 }
00087
00088 return result;
00089 }