MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / findCollisionStatus

Function findCollisionStatus

source/MRMesh/MRMeshMeshDistance.cpp:276–306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

274}
275
276MeshMeshCollisionStatus findCollisionStatus( const MeshPart& a, const MeshPart& b, const MeshMeshDistanceResult& distRes,
277 const AffineXf3f* rigidB2A /*= nullptr*/, std::vector<FaceFace>* collisions /*= nullptr */ )
278{
279 MR_TIMER;
280 MeshMeshCollisionStatus status;
281 if ( distRes.distSq == 0.0f )
282 {
283 auto thisCollisions = findCollidingTriangles( a, b, rigidB2A );
284 status = thisCollisions.empty() ? MeshMeshCollisionStatus::Touching : MeshMeshCollisionStatus::Colliding;
285 if ( collisions )
286 *collisions = std::move( thisCollisions );
287 return status;
288 }
289 MeshProjectionResult aRes, bRes;
290 aRes.proj = distRes.a;
291 bRes.proj = distRes.b;
292 aRes.mtp = a.mesh.toTriPoint( distRes.a );
293 bRes.mtp = b.mesh.toTriPoint( distRes.b );
294 bRes.distSq = aRes.distSq = distRes.distSq;
295 bool isBOutside = a.mesh.isOutsideByProjNorm( rigidB2A ? ( *rigidB2A )( distRes.b.point ) : distRes.b.point, aRes, a.region );
296 bool isAOutside = b.mesh.isOutsideByProjNorm( rigidB2A ? rigidB2A->inverse()( distRes.a.point ) : distRes.a.point, bRes, b.region );
297 if ( isBOutside && isAOutside )
298 status = MeshMeshCollisionStatus::BothOutside;
299 else if ( !isBOutside && !isAOutside )
300 status = MeshMeshCollisionStatus::BothInside;
301 else if ( isBOutside )
302 status = MeshMeshCollisionStatus::AInside;
303 else
304 status = MeshMeshCollisionStatus::BInside;
305 return status;
306}
307
308MeshMeshCollisionStatus findCollisionStatus( const MeshPart& a, const MeshPart& b, const AffineXf3f* rigidB2A /*= nullptr */ )
309{

Callers 1

findSignedDistanceFunction · 0.85

Calls 6

findCollidingTrianglesFunction · 0.85
findDistanceFunction · 0.85
isOutsideByProjNormMethod · 0.80
emptyMethod · 0.45
toTriPointMethod · 0.45
inverseMethod · 0.45

Tested by

no test coverage detected