Description

Class defining the Bullet geometric model for collision detection.

#include <ChCollisionModelBullet.h>

Inheritance diagram for chrono::collision::ChCollisionModelBullet:
Collaboration diagram for chrono::collision::ChCollisionModelBullet:

Public Member Functions

virtual ChCollisionSystemType GetType () const override
 Return the type of this collision model.
 
virtual int ClearModel () override
 Delete all inserted geometries. More...
 
virtual int BuildModel () override
 Complete the construction of the collision model (build the BV hierarchy). More...
 
virtual bool AddSphere (std::shared_ptr< ChMaterialSurface > material, double radius, const ChVector<> &pos=ChVector<>()) override
 Add a sphere shape to this collision model. More...
 
virtual bool AddEllipsoid (std::shared_ptr< ChMaterialSurface > material, double rx, double ry, double rz, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add an ellipsoid shape to this collision model. More...
 
virtual bool AddBox (std::shared_ptr< ChMaterialSurface > material, double hx, double hy, double hz, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a box shape to this collision model. More...
 
virtual bool AddCylinder (std::shared_ptr< ChMaterialSurface > material, double rx, double rz, double hy, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a cylinder to this collision model (default axis on Y direction). More...
 
virtual bool AddCylindricalShell (std::shared_ptr< ChMaterialSurface > material, double radius, double hlen, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a cylindrical shell to this collision model (default axis in Y direction). More...
 
virtual bool AddCone (std::shared_ptr< ChMaterialSurface > material, double rx, double rz, double hy, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a cone to this collision model (default axis on Y direction). More...
 
virtual bool AddCapsule (std::shared_ptr< ChMaterialSurface > material, double radius, double hlen, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a capsule to this collision model (default axis in Y direction). More...
 
virtual bool AddRoundedBox (std::shared_ptr< ChMaterialSurface > material, double hx, double hy, double hz, double sphere_r, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a rounded box shape to this collision model. More...
 
virtual bool AddRoundedCylinder (std::shared_ptr< ChMaterialSurface > material, double rx, double rz, double hy, double sphere_r, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a rounded cylinder to this collision model (default axis on Y direction). More...
 
virtual bool AddRoundedCone (std::shared_ptr< ChMaterialSurface > material, double rx, double rz, double hy, double sphere_r, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a rounded cone to this collision model (default axis on Y direction). More...
 
virtual bool AddConvexHull (std::shared_ptr< ChMaterialSurface > material, const std::vector< ChVector< double >> &pointlist, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a convex hull to this collision model. More...
 
virtual bool AddTriangleMesh (std::shared_ptr< ChMaterialSurface > material, std::shared_ptr< geometry::ChTriangleMesh > trimesh, bool is_static, bool is_convex, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1), double sphereswept_thickness=0.0) override
 Add a triangle mesh to this collision model. More...
 
virtual bool AddTriangleMeshConcave (std::shared_ptr< ChMaterialSurface > material, std::shared_ptr< geometry::ChTriangleMesh > trimesh, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1))
 CUSTOM for this class only: add a concave triangle mesh that will be managed by GImpact mesh-mesh algorithm. More...
 
virtual bool AddTriangleMeshConcaveDecomposed (std::shared_ptr< ChMaterialSurface > material, std::shared_ptr< ChConvexDecomposition > mydecomposition, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1))
 CUSTOM for this class only: add a concave triangle mesh that will be decomposed into a compound of convex shapes. More...
 
virtual bool AddBarrel (std::shared_ptr< ChMaterialSurface > material, double Y_low, double Y_high, double R_vert, double R_hor, double R_offset, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1)) override
 Add a barrel-like shape to this collision model (main axis on Y direction). More...
 
virtual bool Add2Dpath (std::shared_ptr< ChMaterialSurface > material, std::shared_ptr< geometry::ChLinePath > mpath, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1), const double thickness=0.001) override
 Add a 2D closed line, defined on the XY plane passing by pos and aligned as rot, that defines a 2D collision shape that will collide with another 2D line of the same type if aligned on the same plane. More...
 
virtual bool AddPoint (std::shared_ptr< ChMaterialSurface > material, double radius=0, const ChVector<> &pos=ChVector<>()) override
 Add a point-like sphere, that will collide with other geometries, but won't ever create contacts between them. More...
 
virtual bool AddTriangleProxy (std::shared_ptr< ChMaterialSurface > material, ChVector<> *p1, ChVector<> *p2, ChVector<> *p3, ChVector<> *ep1, ChVector<> *ep2, ChVector<> *ep3, bool mowns_vertex_1, bool mowns_vertex_2, bool mowns_vertex_3, bool mowns_edge_1, bool mowns_edge_2, bool mowns_edge_3, double msphereswept_rad=0)
 Add a triangle from mesh. More...
 
virtual bool AddCopyOfAnotherModel (ChCollisionModel *another) override
 Add all shapes already contained in another model. More...
 
virtual void SetFamily (int mfamily) override
 By default, all collision objects belong to family n.0, but you can set family in range 0..15. More...
 
virtual int GetFamily () override
 
virtual void SetFamilyMaskNoCollisionWithFamily (int mfamily) override
 By default, family mask is all turned on, so all families can collide with this object, but you can turn on-off some bytes of this mask so that some families do not collide. More...
 
virtual void SetFamilyMaskDoCollisionWithFamily (int mfamily) override
 
virtual bool GetFamilyMaskDoesCollisionWithFamily (int mfamily) override
 Tells if the family mask of this collision object allows for the collision with another collision object belonging to a given family. More...
 
virtual void SetFamilyGroup (short int group) override
 Set the collision family group of this model. More...
 
virtual void SetFamilyMask (short int mask) override
 Set the collision mask for this model. More...
 
virtual void GetAABB (ChVector<> &bbmin, ChVector<> &bbmax) const override
 Returns the axis aligned bounding box (AABB) of the collision model, i.e. More...
 
virtual void SyncPosition () override
 Sets the position and orientation of the collision model as the current position of the corresponding ChContactable.
 
bool SetSphereRadius (double coll_radius, double out_envelope)
 If the collision shape is a sphere, resize it and return true (if no sphere is found in this collision shape, return false). More...
 
virtual ChCoordsys GetShapePos (int index) const override
 Return the position and orientation of the collision shape with specified index, relative to the model frame.
 
virtual std::vector< double > GetShapeDimensions (int index) const override
 Return shape characteristic dimensions. More...
 
virtual void ArchiveOUT (ChArchiveOut &marchive) override
 Method to allow serialization of transient data to archives.
 
virtual void ArchiveIN (ChArchiveIn &marchive) override
 Method to allow deserialization of transient data from archives.
 
- Public Member Functions inherited from chrono::collision::ChCollisionModel
virtual bool AddConvexHullsFromFile (std::shared_ptr< ChMaterialSurface > material, ChStreamInAscii &mstream, const ChVector<> &pos=ChVector<>(), const ChMatrix33<> &rot=ChMatrix33<>(1))
 Add a cluster of convex hulls specified in a '.chulls' file description. More...
 
ChContactableGetContactable ()
 Get the pointer to the contactable object.
 
virtual void SetContactable (ChContactable *mc)
 Set the pointer to the contactable object. More...
 
virtual ChPhysicsItemGetPhysicsItem ()
 Get the pointer to the client owner ChPhysicsItem. More...
 
virtual short int GetFamilyGroup () const
 Return the collision family group of this model. More...
 
virtual short int GetFamilyMask () const
 Return the collision mask for this model. More...
 
virtual void SetSafeMargin (double amargin)
 Set the suggested collision 'inward safe margin' for the shapes to be added from now on, using the AddBox, AddCylinder etc (where, if this margin is too high for some thin or small shapes, it may be clamped). More...
 
virtual float GetSafeMargin ()
 Returns the inward safe margin (see SetSafeMargin() )
 
virtual void SetEnvelope (double amargin)
 Set the suggested collision outward 'envelope' (used from shapes added, from now on, to this collision model). More...
 
virtual float GetEnvelope ()
 Return the outward safe margin (see SetEnvelope() )
 
int GetNumShapes () const
 Return the number of collision shapes in this model.
 
const std::vector< std::shared_ptr< ChCollisionShape > > & GetShapes () const
 Get the list of collision shapes in this model.
 
std::shared_ptr< ChCollisionShapeGetShape (int index)
 Get the collision shape with specified index.
 
void SetShapeMaterial (int index, std::shared_ptr< ChMaterialSurface > mat)
 Set the contact material for the collision shape with specified index.
 
void SetAllShapesMaterial (std::shared_ptr< ChMaterialSurface > mat)
 Set the contact material for all collision shapes in the model (all shapes will share the material). More...
 

Protected Attributes

std::unique_ptr< btCollisionObject > bt_collision_object
 Bullet collision object containing Bullet geometries.
 
std::shared_ptr< btCompoundShape > bt_compound_shape
 Compound for models with more than one collision shape.
 
- Protected Attributes inherited from chrono::collision::ChCollisionModel
float model_envelope
 Maximum envelope: surrounding volume from surface to the exterior.
 
float model_safe_margin
 Maximum margin value to be used for fast penetration contact detection.
 
ChContactablemcontactable
 Pointer to the contactable object.
 
short int family_group
 Collision family group.
 
short int family_mask
 Collision family mask.
 
std::vector< std::shared_ptr< ChCollisionShape > > m_shapes
 list of collision shapes in model
 

Friends

class ChCollisionSystemBullet
 
class ChCollisionSystemBulletMulticore
 

Additional Inherited Members

- Static Public Member Functions inherited from chrono::collision::ChCollisionModel
static void SetDefaultSuggestedEnvelope (double menv)
 Using this function BEFORE you start creating collision shapes, it will make all following collision shapes to take this collision envelope (safe outward layer) as default. More...
 
static void SetDefaultSuggestedMargin (double mmargin)
 Using this function BEFORE you start creating collision shapes, it will make all following collision shapes to take this collision margin (inward penetration layer) as default. More...
 
static double GetDefaultSuggestedEnvelope ()
 
static double GetDefaultSuggestedMargin ()
 
- Protected Member Functions inherited from chrono::collision::ChCollisionModel
void CopyShapes (ChCollisionModel *other)
 Copy the collision shapes from another model.
 
virtual float GetSuggestedFullMargin ()
 

Member Function Documentation

◆ Add2Dpath()

bool chrono::collision::ChCollisionModelBullet::Add2Dpath ( std::shared_ptr< ChMaterialSurface material,
std::shared_ptr< geometry::ChLinePath mpath,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1),
const double  thickness = 0.001 
)
overridevirtual

Add a 2D closed line, defined on the XY plane passing by pos and aligned as rot, that defines a 2D collision shape that will collide with another 2D line of the same type if aligned on the same plane.

This is useful for mechanisms that work on a plane, and that require more precise collision that is not possible with current 3D shapes. For example, the line can contain concave or convex round fillets. Requirements:

  • the line must be clockwise for inner material, (counterclockwise=hollow, material outside)
  • the line must contain only ChLineSegment and ChLineArc sub-lines
  • the sublines must follow in the proper order, with coincident corners, and must be closed.
Parameters
materialsurface contact material
mpath2D curve path
posorigin position in model coordinates
rotrotation in model coordinates
thicknessline thickness

Reimplemented from chrono::collision::ChCollisionModel.

◆ AddBarrel()

bool chrono::collision::ChCollisionModelBullet::AddBarrel ( std::shared_ptr< ChMaterialSurface material,
double  Y_low,
double  Y_high,
double  R_vert,
double  R_hor,
double  R_offset,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a barrel-like shape to this collision model (main axis on Y direction).

The barrel shape is made by lathing an arc of an ellipse around the vertical Y axis. The center of the ellipse is on Y=0 level, and it is offsetted by R_offset from the Y axis in radial direction. The two radii of the ellipse are R_vert (for the vertical direction, i.e. the axis parallel to Y) and R_hor (for the axis that is perpendicular to Y). Also, the solid is clamped with two discs on the top and the bottom, at levels Y_low and Y_high.

Parameters
materialsurface contact material
Y_lowbottom level
Y_hightop level
R_vertellipse semi-axis in vertical direction
R_horellipse semi-axis in horizontal direction
R_offsetlateral offset (radius at top and bottom)
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddBox()

bool chrono::collision::ChCollisionModelBullet::AddBox ( std::shared_ptr< ChMaterialSurface material,
double  hx,
double  hy,
double  hz,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a box shape to this collision model.

Parameters
materialsurface contact material
hxx half-dimension
hyy half-dimension
hzz half-dimension
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddCapsule()

bool chrono::collision::ChCollisionModelBullet::AddCapsule ( std::shared_ptr< ChMaterialSurface material,
double  radius,
double  hlen,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a capsule to this collision model (default axis in Y direction).

Parameters
materialsurface contact material
radiusradius
hlenhalf-length of capsule axis
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddCone()

virtual bool chrono::collision::ChCollisionModelBullet::AddCone ( std::shared_ptr< ChMaterialSurface material,
double  rx,
double  rz,
double  hy,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
inlineoverridevirtual

Add a cone to this collision model (default axis on Y direction).

Parameters
materialsurface contact material
rxradius (X direction)
rzradius (Z direction)
hyhalf length
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddConvexHull()

bool chrono::collision::ChCollisionModelBullet::AddConvexHull ( std::shared_ptr< ChMaterialSurface material,
const std::vector< ChVector< double >> &  pointlist,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a convex hull to this collision model.

A convex hull is simply a point cloud that describe a convex polytope. Connectivity between the vertexes, as faces/edges in triangle meshes is not necessary. Points are passed as a list which is then copied into the model.

Parameters
materialsurface contact material
pointlistlist of hull points
posorigin position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddCopyOfAnotherModel()

bool chrono::collision::ChCollisionModelBullet::AddCopyOfAnotherModel ( ChCollisionModel another)
overridevirtual

Add all shapes already contained in another model.

The 'another' model must be of ChCollisionModelBullet subclass.

Implements chrono::collision::ChCollisionModel.

◆ AddCylinder()

bool chrono::collision::ChCollisionModelBullet::AddCylinder ( std::shared_ptr< ChMaterialSurface material,
double  rx,
double  rz,
double  hy,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a cylinder to this collision model (default axis on Y direction).

Parameters
materialsurface contact material
rxradius (X direction)
rzradius (Z direction)
hyhalf length
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddCylindricalShell()

bool chrono::collision::ChCollisionModelBullet::AddCylindricalShell ( std::shared_ptr< ChMaterialSurface material,
double  radius,
double  hlen,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add a cylindrical shell to this collision model (default axis in Y direction).

Parameters
materialsurface contact material
radiuscylinder radius
hlencylinder half length
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddEllipsoid()

bool chrono::collision::ChCollisionModelBullet::AddEllipsoid ( std::shared_ptr< ChMaterialSurface material,
double  rx,
double  ry,
double  rz,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
overridevirtual

Add an ellipsoid shape to this collision model.

Parameters
materialsurface contact material
rxx semi-axis
ryy semi-axis
rzz semi-axis
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddPoint()

bool chrono::collision::ChCollisionModelBullet::AddPoint ( std::shared_ptr< ChMaterialSurface material,
double  radius = 0,
const ChVector<> &  pos = ChVector<>() 
)
overridevirtual

Add a point-like sphere, that will collide with other geometries, but won't ever create contacts between them.

Parameters
materialsurface contact material
radiusnode radius
poscenter position in model coordinates

Reimplemented from chrono::collision::ChCollisionModel.

◆ AddRoundedBox()

virtual bool chrono::collision::ChCollisionModelBullet::AddRoundedBox ( std::shared_ptr< ChMaterialSurface material,
double  hx,
double  hy,
double  hz,
double  sphere_r,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
inlineoverridevirtual

Add a rounded box shape to this collision model.

Parameters
materialsurface contact material
hxx half-dimension
hyy half-dimension
hzz half-dimension
sphere_rradius of sweeping sphere
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddRoundedCone()

virtual bool chrono::collision::ChCollisionModelBullet::AddRoundedCone ( std::shared_ptr< ChMaterialSurface material,
double  rx,
double  rz,
double  hy,
double  sphere_r,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
inlineoverridevirtual

Add a rounded cone to this collision model (default axis on Y direction).

Parameters
materialsurface contact material
rxradius (X direction)
rzradius (Z direction)
hyhalf length
sphere_rradius of sweeping sphere
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddRoundedCylinder()

virtual bool chrono::collision::ChCollisionModelBullet::AddRoundedCylinder ( std::shared_ptr< ChMaterialSurface material,
double  rx,
double  rz,
double  hy,
double  sphere_r,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
inlineoverridevirtual

Add a rounded cylinder to this collision model (default axis on Y direction).

Parameters
materialsurface contact material
rxradius (X direction)
rzradius (Z direction)
hyhalf length
sphere_rradius of sweeping sphere
poscenter position in model coordinates
rotrotation in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddSphere()

bool chrono::collision::ChCollisionModelBullet::AddSphere ( std::shared_ptr< ChMaterialSurface material,
double  radius,
const ChVector<> &  pos = ChVector<>() 
)
overridevirtual

Add a sphere shape to this collision model.

Parameters
materialsurface contact material
radiussphere radius
poscenter position in model coordinates

Implements chrono::collision::ChCollisionModel.

◆ AddTriangleMesh()

bool chrono::collision::ChCollisionModelBullet::AddTriangleMesh ( std::shared_ptr< ChMaterialSurface material,
std::shared_ptr< geometry::ChTriangleMesh trimesh,
bool  is_static,
bool  is_convex,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1),
double  sphereswept_thickness = 0.0 
)
overridevirtual

Add a triangle mesh to this collision model.

Note: if possible, for better performance, avoid triangle meshes and prefer simplified representations as compounds of primitive convex shapes (boxes, sphers, etc).

Parameters
materialsurface contact material
trimeshthe triangle mesh
is_statictrue if model doesn't move. May improve performance.
is_convexif true, a convex hull is used. May improve robustness.
posorigin position in model coordinates
rotrotation in model coordinates
sphereswept_thicknessoutward sphere-swept layer (when supported)

Implements chrono::collision::ChCollisionModel.

◆ AddTriangleMeshConcave()

bool chrono::collision::ChCollisionModelBullet::AddTriangleMeshConcave ( std::shared_ptr< ChMaterialSurface material,
std::shared_ptr< geometry::ChTriangleMesh trimesh,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
virtual

CUSTOM for this class only: add a concave triangle mesh that will be managed by GImpact mesh-mesh algorithm.

Note that, despite this can work with arbitrary meshes, there could be issues of robustness and precision, so when possible, prefer simplified representations as compounds of convex shapes of boxes/spheres/etc.. type.

Parameters
materialsurface contact material
trimeshthe triangle mesh
posorigin position in model coordinates
rotrotation in model coordinates

◆ AddTriangleMeshConcaveDecomposed()

bool chrono::collision::ChCollisionModelBullet::AddTriangleMeshConcaveDecomposed ( std::shared_ptr< ChMaterialSurface material,
std::shared_ptr< ChConvexDecomposition mydecomposition,
const ChVector<> &  pos = ChVector<>(),
const ChMatrix33<> &  rot = ChMatrix33<>(1) 
)
virtual

CUSTOM for this class only: add a concave triangle mesh that will be decomposed into a compound of convex shapes.

Decomposition could be more efficient than AddTriangleMeshConcave(), but preprocessing decomposition might take a while, and decomposition result is often approximate. Therefore, despite this can work with arbitrary meshes, there could be issues of robustness and precision, so when possible, prefer simplified representations as compounds of convex shapes of boxes/spheres/etc.. type.

Parameters
materialsurface contact material
mydecompositionconvex mesh decomposition
posorigin position in model coordinates
rotrotation in model coordinates

◆ AddTriangleProxy()

bool chrono::collision::ChCollisionModelBullet::AddTriangleProxy ( std::shared_ptr< ChMaterialSurface material,
ChVector<> *  p1,
ChVector<> *  p2,
ChVector<> *  p3,
ChVector<> *  ep1,
ChVector<> *  ep2,
ChVector<> *  ep3,
bool  mowns_vertex_1,
bool  mowns_vertex_2,
bool  mowns_vertex_3,
bool  mowns_edge_1,
bool  mowns_edge_2,
bool  mowns_edge_3,
double  msphereswept_rad = 0 
)
virtual

Add a triangle from mesh.

For efficiency, points are stored as pointers. Thus, the user must take care of memory management and of dangling pointers.

Parameters
materialsurface contact material
p1points to vertex1 coords
p2points to vertex2 coords
p3points to vertex3 coords
ep1points to neighbouring vertex at edge1 if any
ep2points to neighbouring vertex at edge1 if any
ep3points to neighbouring vertex at edge1 if any
mowns_vertex_1vertex is owned by this triangle (otherwise, owned by neighbour)
mowns_vertex_2vertex is owned by this triangle (otherwise, owned by neighbour)
mowns_vertex_3vertex is owned by this triangle (otherwise, owned by neighbour)
mowns_edge_1edge is owned by this triangle (otherwise, owned by neighbour)
mowns_edge_2edge is owned by this triangle (otherwise, owned by neighbour)
mowns_edge_3edge is owned by this triangle (otherwise, owned by neighbour)
msphereswept_radsphere swept triangle ('fat' triangle, improves robustness)

◆ BuildModel()

int chrono::collision::ChCollisionModelBullet::BuildModel ( )
overridevirtual

Complete the construction of the collision model (build the BV hierarchy).

Addition of collision shapes must be done between calls to ClearModel() and BuildModel(). This function must be invoked after all geometric collision shapes have been added.

Implements chrono::collision::ChCollisionModel.

◆ ClearModel()

int chrono::collision::ChCollisionModelBullet::ClearModel ( )
overridevirtual

Delete all inserted geometries.

Addition of collision shapes must be done between calls to ClearModel() and BuildModel(). This function must be invoked before adding geometric collision shapes.

Implements chrono::collision::ChCollisionModel.

◆ GetAABB()

void chrono::collision::ChCollisionModelBullet::GetAABB ( ChVector<> &  bbmin,
ChVector<> &  bbmax 
) const
overridevirtual

Returns the axis aligned bounding box (AABB) of the collision model, i.e.

max-min along the x,y,z world axes. Remember that SyncPosition() should be invoked before calling this.

Implements chrono::collision::ChCollisionModel.

◆ GetFamilyMaskDoesCollisionWithFamily()

bool chrono::collision::ChCollisionModelBullet::GetFamilyMaskDoesCollisionWithFamily ( int  mfamily)
overridevirtual

Tells if the family mask of this collision object allows for the collision with another collision object belonging to a given family.

This default implementation uses the family mask.

Reimplemented from chrono::collision::ChCollisionModel.

◆ GetShapeDimensions()

std::vector< double > chrono::collision::ChCollisionModelBullet::GetShapeDimensions ( int  index) const
overridevirtual

Return shape characteristic dimensions.

The following collision shapes are supported:

SPHERE       radius
BOX          x-halfdim y-halfdim z-halfdim
ELLIPSOID    x-radius y-radius z-radius
CYLINDER     x-radius z-radius halflength
CYLSHELL     radius halflength

Implements chrono::collision::ChCollisionModel.

◆ SetFamily()

void chrono::collision::ChCollisionModelBullet::SetFamily ( int  mfamily)
overridevirtual

By default, all collision objects belong to family n.0, but you can set family in range 0..15.

This is used when the objects collided with another: the contact is created only if the family is within the 'family mask' of the other, and viceversa. These default implementations use the family group.

Reimplemented from chrono::collision::ChCollisionModel.

◆ SetFamilyGroup()

void chrono::collision::ChCollisionModelBullet::SetFamilyGroup ( short int  group)
overridevirtual

Set the collision family group of this model.

This is an alternative way of specifying the collision family for this object. The value family_group must have a single bit set (i.e. it must be a power of 2). The corresponding family is then the bit position.

Reimplemented from chrono::collision::ChCollisionModel.

◆ SetFamilyMask()

void chrono::collision::ChCollisionModelBullet::SetFamilyMask ( short int  mask)
overridevirtual

Set the collision mask for this model.

Any set bit in the specified mask indicates that this model collides with all objects whose family is equal to the bit position.

Reimplemented from chrono::collision::ChCollisionModel.

◆ SetFamilyMaskNoCollisionWithFamily()

void chrono::collision::ChCollisionModelBullet::SetFamilyMaskNoCollisionWithFamily ( int  mfamily)
overridevirtual

By default, family mask is all turned on, so all families can collide with this object, but you can turn on-off some bytes of this mask so that some families do not collide.

When two objects collide, the contact is created only if the family is within the 'family mask' of the other, and viceversa. These default implementations use the family mask.

Reimplemented from chrono::collision::ChCollisionModel.

◆ SetSphereRadius()

bool chrono::collision::ChCollisionModelBullet::SetSphereRadius ( double  coll_radius,
double  out_envelope 
)

If the collision shape is a sphere, resize it and return true (if no sphere is found in this collision shape, return false).

It can also change the outward envelope; the inward margin is automatically the radius of the sphere.


The documentation for this class was generated from the following files:
  • /builds/uwsbel/chrono/src/chrono/collision/ChCollisionModelBullet.h
  • /builds/uwsbel/chrono/src/chrono/collision/ChCollisionModelBullet.cpp