A body is a shape + its pose. Point inclusion, ray intersection can be tested, volumes and bounding spheres can be computed. More...
#include <bodies.h>
Public Member Functions  
Body ()  
BodyPtr  cloneAt (const Eigen::Isometry3d &pose) const 
Get a clone of this body, but one that is located at the pose pose. More...  
virtual BodyPtr  cloneAt (const Eigen::Isometry3d &pose, double padding, double scaling) const =0 
Get a clone of this body, but one that is located at the pose pose and has possibly different passing and scaling: padding and scaling. This function is useful to implement thread safety, when bodies need to be moved around. More...  
virtual void  computeBoundingBox (AABB &bbox) const =0 
Compute the axisaligned bounding box for the body, in its current pose. Scaling and padding are accounted for. More...  
virtual void  computeBoundingCylinder (BoundingCylinder &cylinder) const =0 
Compute the bounding cylinder for the body, in its current pose. Scaling and padding are accounted for. More...  
virtual void  computeBoundingSphere (BoundingSphere &sphere) const =0 
Compute the bounding radius for the body, in its current pose. Scaling and padding are accounted for. More...  
virtual double  computeVolume () const =0 
Compute the volume of the body. This method includes changes induced by scaling and padding. More...  
bool  containsPoint (double x, double y, double z, bool verbose=false) const 
Check if a point is inside the body. More...  
virtual bool  containsPoint (const Eigen::Vector3d &p, bool verbose=false) const =0 
Check if a point is inside the body. Surface points are included. More...  
virtual std::vector< double >  getDimensions () const =0 
Get the dimensions associated to this body (as read from corresponding shape) More...  
double  getPadding () const 
Retrieve the current padding. More...  
const Eigen::Isometry3d &  getPose () const 
Retrieve the pose of the body. More...  
double  getScale () const 
Retrieve the current scale. More...  
shapes::ShapeType  getType () const 
Get the type of shape this body represents. More...  
virtual bool  intersectsRay (const Eigen::Vector3d &origin, const Eigen::Vector3d &dir, EigenSTL::vector_Vector3d *intersections=nullptr, unsigned int count=0) const =0 
Check if a ray intersects the body, and find the set of intersections, in order, along the ray. A maximum number of intersections can be specified as well. If that number is 0, all intersections are returned. Passing dir as a unit vector will result in faster computation. More...  
virtual bool  samplePointInside (random_numbers::RandomNumberGenerator &rng, unsigned int max_attempts, Eigen::Vector3d &result) const 
Sample a point that is included in the body using a given random number generator. More...  
void  setDimensions (const shapes::Shape *shape) 
Set the dimensions of the body (from corresponding shape) More...  
void  setDimensionsDirty (const shapes::Shape *shape) 
Set the dimensions of the body (from corresponding shape). More...  
void  setPadding (double padd) 
If constant padding should be added to the body, this method sets the padding. Default is 0.0. More...  
void  setPaddingDirty (double padd) 
If the dimension of the body should be padded, this method sets the pading. More...  
void  setPose (const Eigen::Isometry3d &pose) 
Set the pose of the body. Default is identity. More...  
void  setPoseDirty (const Eigen::Isometry3d &pose) 
Set the pose of the body. More...  
void  setScale (double scale) 
If the dimension of the body should be scaled, this method sets the scale. Default is 1.0. More...  
void  setScaleDirty (double scale) 
If the dimension of the body should be scaled, this method sets the scale. More...  
virtual void  updateInternalData ()=0 
This function is called every time a change to the body is made, so that intermediate values stored for efficiency reasons are kept up to date. More...  
virtual  ~Body () 
Protected Member Functions  
virtual void  useDimensions (const shapes::Shape *shape)=0 
Depending on the shape, this function copies the relevant data to the body. More...  
Protected Attributes  
double  padding_ 
The scale that was set for this body. More...  
Eigen::Isometry3d  pose_ 
The location of the body (position and orientation) More...  
double  scale_ 
The scale that was set for this body. More...  
shapes::ShapeType  type_ 
The type of shape this body was constructed from. More...  
A body is a shape + its pose. Point inclusion, ray intersection can be tested, volumes and bounding spheres can be computed.

inline 

pure virtual 
Get a clone of this body, but one that is located at the pose pose and has possibly different passing and scaling: padding and scaling. This function is useful to implement thread safety, when bodies need to be moved around.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

pure virtual 
Compute the axisaligned bounding box for the body, in its current pose. Scaling and padding are accounted for.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

pure virtual 
Compute the bounding cylinder for the body, in its current pose. Scaling and padding are accounted for.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

pure virtual 
Compute the bounding radius for the body, in its current pose. Scaling and padding are accounted for.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

pure virtual 
Compute the volume of the body. This method includes changes induced by scaling and padding.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

inline 

pure virtual 
Check if a point is inside the body. Surface points are included.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

pure virtual 
Get the dimensions associated to this body (as read from corresponding shape)
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

inline 

inline 

inline 

inline 

pure virtual 
Check if a ray intersects the body, and find the set of intersections, in order, along the ray. A maximum number of intersections can be specified as well. If that number is 0, all intersections are returned. Passing dir as a unit vector will result in faster computation.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

virtual 
Sample a point that is included in the body using a given random number generator.
Sometimes multiple attempts need to be generated. The function terminates with failure (returns false) after max_attempts attempts. If the call is successful (returns true) the point is written to result
Reimplemented in bodies::Box, bodies::Cylinder, and bodies::Sphere.
Definition at line 168 of file bodies.cpp.
void bodies::Body::setDimensions  (  const shapes::Shape *  shape  ) 
Set the dimensions of the body (from corresponding shape)
Definition at line 162 of file bodies.cpp.

inline 
Set the dimensions of the body (from corresponding shape).
shape  The shape whose dimensions should be assumed. After the function finishes, the pointer can be deleted. 

inline 

inline 
If the dimension of the body should be padded, this method sets the pading.
padd  The padding to set (in meters). 0.0 means no padding. 

inline 

inline 
Set the pose of the body.
pose  The pose to set. Default is identity. 

inline 

inline 
If the dimension of the body should be scaled, this method sets the scale.
scale  The scale to set. 1.0 means no scaling. 

pure virtual 
This function is called every time a change to the body is made, so that intermediate values stored for efficiency reasons are kept up to date.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

protectedpure virtual 
Depending on the shape, this function copies the relevant data to the body.
Implemented in bodies::ConvexMesh, bodies::Box, bodies::Cylinder, and bodies::Sphere.

protected 

protected 

protected 

protected 