By Ramsey Harris, Autodesk (formerly Alias) Santa Barbara Development Center.
This script, dynTestAddAttr.mel, tests dynamics. It keyframes an added attribute called tailSize and adds it to a particle shape. The particles are emitted by a simple point emitter.
// dynTestAddAttr.mel
//
// Alias Script File
// MODIFY THIS AT YOUR OWN RISK
//
//
// Creation Date: 31 May 1996; Modified 08 January 2000
// Author: rh
//
// Procedure Name:
// dynTestAddAttr
//
// Description:
// Test adding user attributes to a particle shape.
// Create a particle object, set its render type to
// streak, and add a dynamic attribute "tailSize".
// The streak render plug-in will use the attribute
// "tailSize" if it is available.
//
// Input Arguments:
// None.
//
// Return Value:
// Number of errors that occurred in the test.
//
//
//
// ========== dynTestAddAttr ==========
//
// SYNOPSIS
// Test adding user attributes to a particle shape.
// Create a particle object, set its render type to
// streak, and add a dynamic attribute "tailSize".
// The streak render plug-in will use the attribute
// "tailSize" if it is available.
//
global proc int dynTestAddAttr()
{
// First delete anything that might be left over
// from a previous test.
//
file -force -new;
currentTime -e 1;
// Create emitter and particle object.
//
emitter -type omni -r 90 -mnd 0 -mxd 0.5 -spd 5 -pos 2 0 2
-n myEmitter;
particle -n myParticle;
connectDynamic -em myEmitter myParticle;
// Set the render mode to streak and add a dynamic
// attribute for the tail size.
//
setAttr myParticleShape.particleRenderType 6; // Streak
addAttr -ln tailSize -dv 4 myParticleShape;
// Set some keyframes on the dynamic attribute.
//
setKeyframe -t 0 -v 0 -at tailSize myParticleShape;
setKeyframe -t 10 -v 1 -at tailSize myParticleShape;
setKeyframe -t 20 -v 2 -at tailSize myParticleShape;
setKeyframe -t 30 -v 5 -at tailSize myParticleShape;
setKeyframe -t 50 -v 10 -at tailSize myParticleShape;
setKeyframe -t 70 -v 5 -at tailSize myParticleShape;
setKeyframe -t 90 -v 1 -at tailSize myParticleShape;
setKeyframe -t 100 -v 0 -at tailSize myParticleShape;
// Check for correct tail size at start of test.
//
//
currentTime -e 0;
int $errors = 0;
float $tailSize = `getAttr myParticle.tailSize`;
if ( $tailSize != 0 ) // Warning Magic#
{
print( "dynTestAddAttr: Failure: Start of test: The tail "
+ "size ("+ $tailSize + ") should be 0.\n" );
$errors += 1;
}
// Set up the playback options.
//
float $frames = 50;
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 for correct tail size at middle of test.
//
$tailSize = `getAttr myParticle.tailSize`;
if ( ($tailSize < 9.9) || ($tailSize > 10.1) ) // Warning Magic#
{
print( "dynTestAddAttr: Failure: Frame 50: The tail size ("
+ $tailSize + ") should be about 10.\n" );
$errors += 1;
}
// Print the frames per second (fps) in the form X.X of subtest.
//
print( "dynTestAddAttr: Subtest 1. (" + (int)($fps * 10)/10.0 +
" fps)\n");
// Set up the playback options.
//
$frames = 100;
playbackOptions -min 1 -max $frames -loop once;
currentTime -e 1;
// 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.
//
$startTime = `timerX`;
play -wait;
$elapsed = `timerX -st $startTime`;
$fps = ($elapsed == 0.0 ? 0.0 : $frames/$elapsed);
// Check for correct tail size at end of test.
//
$tailSize = `getAttr myParticle.tailSize`;
if ( $tailSize > 0.1 )
{
print( "dynTestAddAttr: Failure: End of test: The "
+ "tail size (" + $tailSize + ") should be close to 0.\n");
$errors += 1;
}
// If there are no errors, the addAttr passed this test.
//
if ( $errors == 0 )
print( "dynTestAddAttr: Passed. (" );
else
print( "dynTestAddAttr: 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;
} // dynTestAddAttr //