// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== // // global proc rigidBodyInterpenetrate( int $flag ) // // Enable the cache for all the selected dynamic objects. { int $i; int $okToInterpenetrate = 1; int $rigidBodyCount; string $rigidSolver; string $rigidBodyList[]; string $selObj[] = `ls -sl`; for ($i = 0; $i < size( $selObj ); $i++) { string $leaves[] = `ls -selection -dag -leaf -showType $selObj[$i]`; // Turn on all the caches for the selected objects. // for ($j = 0; $j < size( $leaves ); $j += 2) { if ($leaves[$j+1] == "rigidBody") { $rigidBodyList[ $rigidBodyCount ] = $selObj[$i]; $rigidBodyCount++; } } } $rigidBodyCount = size($rigidBodyList); // First make sure all the selected rigid bodies are in the same // solver. // if ( $rigidBodyCount > 1 ) { $rigidSolver = `rigidBody -q -solver $rigidBodyList[0]`; for ( $i = 0; $i < $rigidBodyCount; $i++ ) { string $solverName = `rigidBody -q -solver $rigidBodyList[$i]`; if ( $solverName != $rigidSolver ) { $okToInterpenetrate = 0; warning ( (uiRes("m_rigidBodyInterpenetrate.kAllRigidBodiesSameSolver"))); break; } } } else { $okToInterpenetrate = 0; warning ( (uiRes("m_rigidBodyInterpenetrate.kAtLeastTwoRigidBodies"))); } if ( $okToInterpenetrate == 1 ) { string $rigidBodies; string $rigidSolver = `rigidBody -q -solver $rigidBodyList[0]`; for ( $i = 0; $i < $rigidBodyCount; $i++ ) { $rigidBodies += $rigidBodyList[$i]; $rigidBodies += " "; } string $cmd = "rigidSolver -e "; if ( $flag == 0 ) { $cmd = $cmd + "-collide "; } else { $cmd = $cmd + "-interpenetrate "; } $cmd = $cmd + $rigidBodies + " " + $rigidSolver; evalEcho $cmd; } }