Introduced
3.0
Description
Adds a Particle Event to a Particle Type or Obstacle extension property.
Note: This command uses output arguments. C# and some scripting languages (such as JScript, PerlScript and Python) don't support arguments passed by reference so you need to use the best workaround for your situation:
For scripting languages this command returns an ISIVTCollection which you can use to get the output arguments.
For C# you can use the XSIApplication.ExecuteCommand method to call this command. ExecuteCommand packs the output arguments into a C# System.Object containing an Array of the output arguments (see Calling Commands from C#).
Scripting Syntax
AddParticleEvent( Target, Source, [Output] )
Parameters
|
Parameter |
Type |
Description |
|
Target [in/out] |
Particle Type or Obstacle extension property on which the Particle Event will be added. Default Value: Selected Particle Types or Obstacle extension properties. |
|
|
Source [in/out] |
Particle Type the Particle Event will generate. |
|
|
Output [out] |
XSICollection of particle events (Property objects). |
Particle Event generated. |
Examples
1. VBScript Example
' ' This example demonstrates how to set up a particle event script with a particle goal ' NewScene , false ' Note: Since the CreateParticleCloud command returns the newly created ParticleCloud wrapped in ' an XSICollection, we can get a pointer to the new cloud by extracting just the first member set myParticleCloud = CreateParticleCloud()(0) set myParticleEmitter = ActiveSceneRoot.AddGeometry( "Sphere","MeshSurface", "ParticleEmitter" ) AddParticleEmitter myParticleCloud, myParticleEmitter set myParticleGoal = ActiveSceneRoot.AddGeometry( "Sphere", "MeshSurface", "ParticleGoal" ) myParticleGoal.posx = 10.0 myParticleGoal.posy = 15.0 ' Note: The AddParticleGoal command uses an input/output type of parameter to specify which ' particle cloud object to use. Unfortunately, if you pass the actual ParticleCloud object ' for this parameter, the command will convert it to an XSICollection again, so avoid this ' by passing in only the name (SIObject.Name property) of the ParticleCloud object AddParticleGoal myParticleCloud.Name, myParticleGoal set myParticleCloudPrimitive = myParticleCloud.ActivePrimitive set oEventColl = AddParticleEvent( myParticleCloudPrimitive.ParticleTypes(0))(0) ' Converting the event collection into a Property set oEvent = oEventColl(0) oEvent.Parameters("EventAction").value = 6 ' script oEvent.EventTrigger.Value = 3 ' Every NFrame oEvent.TriggerValue.Value = 50 ' Every 50 frames oEvent.ScriptContext.Value = 1 ' Per particle oEvent.Script.Value = "for each oAttr in inParticle.Attributes " & vbCrLf & "" & vbTab & _ "Application.LogMessage ""Reading "" & oAttr.Name" & vbCrLf & "next" PlayForwardsFromStart ' Expected results: 'INFO : Reading Goal_0_UVWI 'INFO : Reading Goal_0_Offset 'INFO : Reading Goal_0_Weight ' .... 'INFO : Reading Goal_0_UVWI 'INFO : Reading Goal_0_Offset 'INFO : Reading Goal_0_Weight
2. JScript Example
/* This example demonstrates how to set up a particle event script with a particle goal */ NewScene( null, false ); // Note: Since the CreateParticleCloud command returns the newly created ParticleCloud wrapped in // an XSICollection, we can get a pointer to the new cloud by extracting just the first member var myParticleCloud = CreateParticleCloud()(0); var myParticleEmitter = ActiveSceneRoot.AddGeometry( "Sphere","MeshSurface", "ParticleEmitter" ); AddParticleEmitter( myParticleCloud, myParticleEmitter ); var myParticleGoal = ActiveSceneRoot.AddGeometry( "Sphere", "MeshSurface", "ParticleGoal" ); myParticleGoal.posx = 10.0; myParticleGoal.posy = 15.0; // Note: The AddParticleGoal command uses an input/output type of parameter to specify which // particle cloud object to use. Unfortunately, if you pass the actual ParticleCloud object // for this parameter, the command will convert it to an XSICollection again, so avoid this // by passing in only the name (SIObject.Name property) of the ParticleCloud object AddParticleGoal( myParticleCloud.Name, myParticleGoal ); var myParticleCloudPrimitive = myParticleCloud.ActivePrimitive; var oEventColl = AddParticleEvent( myParticleCloudPrimitive.ParticleTypes(0))(0); // Converting the event collection into a Property var oEvent = oEventColl(0); oEvent.Parameters("EventAction").Value = 6; // script oEvent.EventTrigger.Value = 3; // Every NFrame oEvent.TriggerValue.Value = 50; // Every 50 frames oEvent.ScriptContext.Value = 1; // Per particle oEvent.Script.Value = "for each oAttr in inParticle.Attributes " + "\n\tApplication.LogMessage \"Reading \" & oAttr.Name \nnext"; PlayForwardsFromStart(); // Expected results: //INFO : Reading Goal_0_UVWI //INFO : Reading Goal_0_Offset //INFO : Reading Goal_0_Weight // ... //INFO : Reading Goal_0_UVWI //INFO : Reading Goal_0_Offset //INFO : Reading Goal_0_Weight
3. Python Example
# # This example demonstrates how to set up a particle event script with a particle goal # Application.NewScene( "", 0 ) # Note: Since the CreateParticleCloud command returns the newly created ParticleCloud wrapped in # an XSICollection, we can get a pointer to the new cloud by extracting just the first member myParticleCloud = Application.CreateParticleCloud()(0) myParticleEmitter = Application.ActiveSceneRoot.AddGeometry( "Sphere","MeshSurface", "ParticleEmitter" ) Application.AddParticleEmitter( myParticleCloud, myParticleEmitter ) myParticleGoal = Application.ActiveSceneRoot.AddGeometry( "Sphere", "MeshSurface", "ParticleGoal" ) myParticleGoal.posx = 10.0 myParticleGoal.posy = 15.0 # Note: The AddParticleGoal command uses an input/output type of parameter to specify which # particle cloud object to use. Unfortunately, if you pass the actual ParticleCloud object # for this parameter, the command will convert it to an XSICollection again, so avoid this # by passing in only the name (SIObject.Name property) of the ParticleCloud object Application.AddParticleGoal( myParticleCloud.Name, myParticleGoal ) myParticleCloudPrimitive = myParticleCloud.ActivePrimitive oEventColl = Application.AddParticleEvent( myParticleCloudPrimitive.ParticleTypes(0))(0) # Converting the event collection into a Property oEvent = oEventColl(0) oEvent.Parameters("EventAction").Value = 6 # script oEvent.EventTrigger.Value = 3 # Every NFrame oEvent.TriggerValue.Value = 50 # Every 50 frames oEvent.ScriptContext.Value = 1 # Per particle oEvent.Script.Value = "for each oAttr in inParticle.Attributes \n\tApplication.LogMessage \"Reading \" + oAttr.Name \nnext" Application.PlayForwardsFromStart() # Expected results: #INFO : Reading Goal_0_UVWI #INFO : Reading Goal_0_Offset #INFO : Reading Goal_0_Weight #INFO : Reading Goal_0_UVWI #INFO : Reading Goal_0_Offset #INFO : Reading Goal_0_Weight
See Also
Autodesk Softimage v7.5