测试动力学事件

 
 
 

作者:Rob Tesdahl 和 Jonathan Southard,Autodesk(早期名为 Alias)圣巴巴拉开发中心。

此脚本为 dynTestEvent.mel,用于测试粒子和粒子碰撞事件的功能。它将在一个倾斜平面上创建两个发射器。发射的粒子在与倾斜平面碰撞时受到重力影响。碰撞后,粒子会发生分裂或发射,具体取决于其发射器。

dynTestEvent.mel

// dynTestEvent.mel
//
// Alias Script File
// MODIFY THIS AT YOUR OWN RISK
//
//
// Creation Date: 4 September 1996; Modified 09 January 2000
// Author: robt, js
//
// Procedure Name:
// dynTestEvent
//
// Description:
// Test the basic functionality of collision events.
//
// Input Arguments:
// None.
//
// Return Value:
// Number of errors that occurred in the test.
//
//
//
// ========== dynTestEvent ==========
//
// SYNOPSIS
// Test the basic functionality of collision events.
//
global proc int dynTestEvent()
{
 // First delete anything that might be left over
 // from a previous test.
 //
 file -force -new;
 currentTime -e 1;
 int $errors = 0;
 // Create the planes to bounce off.
 //
 nurbsPlane -d 3 -p 0 0 0 -w 1.5cm -lr 1 -axis 0cm 0cm 0cm 
 -name table;
 scale 10 10 10;
 rotate -1.5708rad 0rad 0rad;
 move -os 0.5 0.5 0;
 move -r -5 0 5;
 rotate -r 10 0 0;
 // Create the particle shapes to do the bouncing and splitting.
 // Material assignments will be interesting only if the lighting is
 // set.
 //
 particle -inherit 1.0 -p 0 5 -3 -n blueParticles;
 addAttr -ln colorBlue -dv 1.0 -at double blueParticlesShape;
 particle -inherit 1.0 -p 0 5 -3.5 -n redParticles;
 addAttr -ln colorRed -dv 1.0 -at double redParticlesShape;
 particle -inherit 1.0 -p 0 5 -3.5 -n greenParticles;
 addAttr -ln colorGreen -dv 1.0 -at double redParticlesShape;
 gravity -pos 10 10 10 -m 20 -name gravityField;
 // Warning: Changing resilience will change the (hardcoded)
 // number of particles that this test expects to create.
 //
 collision -r 1.0 -f 0.01 table;
 connectDynamic -f gravityField -c table blueParticles redParticles
 greenParticles;
 event -split 2 -sp 0.2 blueParticles;
 event -emit 3 -die true -sp 0.2 redParticles;
 event -emit 1 greenParticles;
 // Set up the playback options.
 //
 float $frames = 55;
 playbackOptions -min 1 -max $frames -loop once;
 // Time how long it takes to play the scene and then determine the 
 // playback frame rate. Make sure when getting the frame rate
 // that no values are divided by zero.
 //
 float $startTime = `timerX`;
 play -wait;
 float $elapsed = `timerX -st $startTime`;
 float $fps = ($elapsed == 0.0 ? 0.0 : $frames/$elapsed);
 // Check whether any blue particles went through the boundary.
 //
 if ( `getAttr blueParticles.boundingBoxMinZ` 
 < `getAttr table.boundingBoxMinZ` )
 {
 print( "dynTestEvent: Failure: \"blueParticles\" particles "
 + "went through boundary.\n" );
 $errors += 1;
 }
 // Check whether any red particles went through the boundary.
 //
 if ( `getAttr redParticles.boundingBoxMinZ` 
 < `getAttr table.boundingBoxMinZ` )
 {
 print( "dynTestEvent: Failure: \"redParticles\" particles "
 + "went through boundary.\n" );
 $errors += 1;
 }
 // Make sure that the blue particle hit one Z wall, creating two 
 // particles that each hit the other Z wall to create four total particles.
 // This is visually apparent from the side and front views together.
 //
 int $blueParticles_i = `particle -count -q blueParticles`;
 if ( $blueParticles_i != 4 && ! $errors ) // Warning Magic#
 {
 print( "dynTestEvent: Failure: There are " + $blueParticles_i
 + " \"blueParticles\" particles instead of the correct "
 + "value, 4.\n" );
 $errors += 1;
 }
 // Test that the number of events resulting in a red particle
 // creation is correct.
 //
 int $redParticles_i = `particle -count -q redParticles`;
 if ( $redParticles_i != 9 && ! $errors ) // Warning Magic#
 {
 print( "dynTestEvent: Failure: There are " + $redParticles_i
 + " \"redParticles\" particles instead of the correct "
 + "value, 9.\n" );
 $errors += 1;
 }
 // Check the totalEventCount variable.
 //
 if ((`getAttr redParticles.totalEventCount` != 4) ||
 (`getAttr blueParticles.totalEventCount` != 3))
 {
 print( "dynTestEvent: Failure: Event count attributes had " +
 "incorrect value(s).\n" );
 $errors += 1;
 }
 // Check the event attribute on the green particles.
 //
 float $event[] = `particle -at event -order 0 -q greenParticlesShape`;
 if ($event[0] != 2)
 {
 print( "dynTestEvent: Failure: Event attribute had incorrect" +
 "value(s).\n" );
 $errors += 1;
 }
 // If there are no errors, the events passed this test.
 //
 if ( $errors == 0 )
 {
 print( "dynTestEvent: Passed. (" );
 }
 else
 {
 print( "dynTestEvent: Failed. (" );
 }
 // Print the frames per second (fps) in the form X.X.
 //
 print( (int)($fps * 10)/10.0 + " fps)\n" );
 // Reset the current time to zero so user can replay the test.
 //
 currentTime -e 1;
 return $errors;
} // dynTestEvent //