41 x_extent = y_extent = z_extent = 0.0;
45 if (shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::SPHERE_RADIUS)
46 x_extent = y_extent = z_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::SPHERE_RADIUS] * 2.0;
50 if (shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::BOX_X &&
51 shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::BOX_Y &&
52 shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::BOX_Z)
54 x_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::BOX_X];
55 y_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::BOX_Y];
56 z_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::BOX_Z];
61 if (shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::CYLINDER_RADIUS &&
62 shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::CYLINDER_HEIGHT)
64 x_extent = y_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::CYLINDER_RADIUS] * 2.0;
65 z_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::CYLINDER_HEIGHT];
70 if (shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::CONE_RADIUS &&
71 shape_msg.dimensions.size() > shape_msgs::SolidPrimitive::CONE_HEIGHT)
73 x_extent = y_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::CONE_RADIUS] * 2.0;
74 z_extent = shape_msg.dimensions[shape_msgs::SolidPrimitive::CONE_HEIGHT];
82 x_extent = y_extent = z_extent = 0.0;
83 if (shape_msg.vertices.size() > 0)
85 double xmin = std::numeric_limits<double>::max(), ymin = std::numeric_limits<double>::max(),
86 zmin = std::numeric_limits<double>::max();
87 double xmax = -std::numeric_limits<double>::max(), ymax = -std::numeric_limits<double>::max(),
88 zmax = -std::numeric_limits<double>::max();
89 for (std::size_t i = 0; i < shape_msg.vertices.size(); ++i)
91 if (shape_msg.vertices[i].x > xmax)
92 xmax = shape_msg.vertices[i].x;
93 if (shape_msg.vertices[i].x < xmin)
94 xmin = shape_msg.vertices[i].x;
95 if (shape_msg.vertices[i].y > ymax)
96 ymax = shape_msg.vertices[i].y;
97 if (shape_msg.vertices[i].y < ymin)
98 ymin = shape_msg.vertices[i].y;
99 if (shape_msg.vertices[i].z > zmax)
100 zmax = shape_msg.vertices[i].z;
101 if (shape_msg.vertices[i].z < zmin)
102 zmin = shape_msg.vertices[i].z;
104 x_extent = xmax - xmin;
105 y_extent = ymax - ymin;
106 z_extent = zmax - zmin;
void getShapeExtents(const shape_msgs::SolidPrimitive &shape_msg, double &x_extent, double &y_extent, double &z_extent)
Get the dimensions of an axis-aligned bounding box for the shape described by shape_msg.