chrono::collision::ChConvexDecompositionJR Class Reference

Description

Class for wrapping the NvConvexDecomposition code by John W.

Ratcliff.

#include <ChCConvexDecomposition.h>

Inheritance diagram for chrono::collision::ChConvexDecompositionJR:
Collaboration diagram for chrono::collision::ChConvexDecompositionJR:

Public Member Functions

 ChConvexDecompositionJR ()
 Basic constructor.
 
virtual ~ChConvexDecompositionJR ()
 Destructor.
 
virtual void Reset (void)
 Access directly the wrapped J.W.Ratcliff convex decomposition object although it shouldn't be necessary, since this class already provide wrapping to all the functions). More...
 
virtual bool AddTriangle (const ChVector<> &v1, const ChVector<> &v2, const ChVector<> &v3)
 Add a triangle, by passing three points for vertexes. More...
 
virtual bool AddTriangleMesh (const geometry::ChTriangleMesh &tm)
 Add a triangle mesh soup, by passing an entire ChTriangleMesh object. More...
 
void SetParameters (float mskinWidth, unsigned int mdecompositionDepth, unsigned int mmaxHullVertices, float mconcavityThresholdPercent, float mmergeThresholdPercent, float mvolumeSplitThresholdPercent, bool museInitialIslandGeneration, bool museIslandGeneration)
 Set the parameters for this convex decomposition algorithm. More...
 
virtual int ComputeConvexDecomposition ()
 Perform the convex decomposition. More...
 
virtual unsigned int GetHullCount ()
 Get the number of computed hulls after the convex decomposition.
 
virtual bool GetConvexHullResult (unsigned int hullIndex, geometry::ChTriangleMesh &convextrimesh)
 Get the n-th computed convex hull, by filling a ChTriangleMesh object that is passed as a parameter. More...
 
virtual bool GetConvexHullResult (unsigned int hullIndex, std::vector< ChVector< double > > &convexhull)
 Get the n-th computed convex hull, by filling a vector of points of the vertexes of the n-th hull that is passed as a parameter. More...
 
virtual void WriteConvexHullsAsWavefrontObj (ChStreamOutAscii &mstream)
 Save the computed convex hulls as a Wavefront file using the '.obj' fileformat, with each hull as a separate group. More...
 
- Public Member Functions inherited from chrono::collision::ChConvexDecomposition
 ChConvexDecomposition ()
 Basic constructor.
 
virtual ~ChConvexDecomposition ()
 Destructor.
 
virtual bool AddTriangle (const geometry::ChTriangle &t1)
 Add a triangle, by passing a ChTriangle object (that will be copied, not referenced). More...
 
virtual bool WriteConvexHullsAsChullsFile (ChStreamOutAscii &mstream)
 Write the convex decomposition to a ".chulls" file, where each hull is a sequence of x y z coords. More...
 

Member Function Documentation

bool chrono::collision::ChConvexDecompositionJR::AddTriangle ( const ChVector<> &  v1,
const ChVector<> &  v2,
const ChVector<> &  v3 
)
virtual

Add a triangle, by passing three points for vertexes.

Note: the vertexes must be properly ordered (oriented triangle, normal pointing outside)

Implements chrono::collision::ChConvexDecomposition.

bool chrono::collision::ChConvexDecompositionJR::AddTriangleMesh ( const geometry::ChTriangleMesh tm)
virtual

Add a triangle mesh soup, by passing an entire ChTriangleMesh object.

Note 1: the triangle mesh does not need connectivity information (a basic 'triangle soup' is enough) Note 2: all vertexes must be properly ordered (oriented triangles, normals pointing outside). Note 3: the triangles must define closed volumes (holes, gaps in edges, etc. may trouble the decomposition)

Reimplemented from chrono::collision::ChConvexDecomposition.

int chrono::collision::ChConvexDecompositionJR::ComputeConvexDecomposition ( )
virtual

Perform the convex decomposition.

This operation is time consuming, and it may take a while to complete. Quality of the results can depend a lot on the parameters. Also, meshes with triangles that are not well oriented (normals always pointing outside) or with gaps/holes, may give wrong results.

Implements chrono::collision::ChConvexDecomposition.

bool chrono::collision::ChConvexDecompositionJR::GetConvexHullResult ( unsigned int  hullIndex,
geometry::ChTriangleMesh convextrimesh 
)
virtual

Get the n-th computed convex hull, by filling a ChTriangleMesh object that is passed as a parameter.

Implements chrono::collision::ChConvexDecomposition.

bool chrono::collision::ChConvexDecompositionJR::GetConvexHullResult ( unsigned int  hullIndex,
std::vector< ChVector< double > > &  convexhull 
)
virtual

Get the n-th computed convex hull, by filling a vector of points of the vertexes of the n-th hull that is passed as a parameter.

Implements chrono::collision::ChConvexDecomposition.

void chrono::collision::ChConvexDecompositionJR::Reset ( void  )
virtual

Access directly the wrapped J.W.Ratcliff convex decomposition object although it shouldn't be necessary, since this class already provide wrapping to all the functions).

Reset the input mesh data

Implements chrono::collision::ChConvexDecomposition.

void chrono::collision::ChConvexDecompositionJR::SetParameters ( float  mskinWidth,
unsigned int  mdecompositionDepth,
unsigned int  mmaxHullVertices,
float  mconcavityThresholdPercent,
float  mmergeThresholdPercent,
float  mvolumeSplitThresholdPercent,
bool  museInitialIslandGeneration,
bool  museIslandGeneration 
)

Set the parameters for this convex decomposition algorithm.

Use this function before calling ComputeConvexDecomposition().

Parameters
mskinWidthSkin width on the convex hulls generated
mdecompositionDepthRecursion depth for convex decomposition.
mmaxHullVerticesMaximum number of vertices in output convex hulls.
mconcavityThresholdPercentThe percentage of concavity allowed without causing a split to occur.
mmergeThresholdPercentThe percentage of volume difference allowed to merge two convex hulls.
mvolumeSplitThresholdPercentThe percentage of the total volume of the object above which splits
museInitialIslandGenerationwill still occur. Whether or not to perform initial island generation on the input mesh.
museIslandGenerationWhether or not to perform island generation at each split. Currently disabled.
void chrono::collision::ChConvexDecompositionJR::WriteConvexHullsAsWavefrontObj ( ChStreamOutAscii mstream)
virtual

Save the computed convex hulls as a Wavefront file using the '.obj' fileformat, with each hull as a separate group.

May throw exceptions if file locked etc.

Implements chrono::collision::ChConvexDecomposition.