Share
 
 

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

Was this information helpful?