Testing Added Particle Attributes
 
 
 

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

// 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 //