The particleObjectExt Interface is exposed in Particle Flow Source Classes.
Properties:
<PF_Source>.particleIndex : index : Read|Write|Validated by Range: 1 to 100000000
Gets/sets the current particle index.
<PF_Source>.particleID : index : Read|Write|Validated by Range: 1 to 100000000
Gets/sets the current particle ID.
<PF_Source>.particleAge : time : Read|Write|Validated by Range: 0f to 625000f
Gets/sets the current particle Age.
<PF_Source>.particleGroupTime : time : Read|Write|Validated by Range: 0f to 625000f
Gets/sets the current particle Group Time.
<PF_Source>.particlePosition : point3 : Read|Write
Gets/sets the current particle position.
<PF_Source>.particleSpeed : point3 : Read|Write
Gets/sets the current particle speed.
<PF_Source>.particleOrientation : point3 : Read|Write
Gets/sets the current particle orientation.
<PF_Source>.particleSpin : angleAxis : Read|Write
Gets/sets the current particle spin.
<PF_Source>.particleScale : float : Read|Write|Validated by Range: 0.0 to 1e+009
Gets/sets the size of the current particle.
<PF_Source>.particleScaleXYZ : point3 : Read|Write
Gets/sets the Scale of the current particle as Point3 value.
<PF_Source>.particleTM : matrix3 : Read|Write
Gets/sets the Transformation Matrix of the current particle.
<PF_Source>.particleSelected : boolean : Read|Write
Gets/sets the Selected state of the current particle.
<PF_Source>.particleShape : mesh : Read|Write
Gets/sets the current particle’s mesh.
EXAMPLES AND RESULTS:
--Create a default PF Source in the Scene from the Create Tab. --Get the Source by name to test the Interface Properties: pf = PF_Source() particleFlow.BeginEdit() op1 = Birth() op2 = Position_Icon() op3 = Speed() op4 = Rotation() op5 = ShapeLibrary() op6 = RenderParticles() op7 = DisplayParticles() op7.color = pf.wireColor ev1 = Event() ev1.SetPViewLocation (pf.X_Coord) (pf.Y_Coord+100) particleFlow.EndEdit() ev1.AppendAction op1 ev1.AppendAction op2 ev1.AppendAction op3 ev1.AppendAction op4 ev1.AppendAction op5 ev1.AppendAction op7 pf.AppendAction op6 pf.AppendInitialActionList ev1 --> $PF_Source:PF Source 01 @ [2.536594,-48.031052,0.000000] --Get the curren particle's index pf.particleIndex --> 1 --Change the particle index. Any subsequent --properties will be from particle 2 pf.particleIndex = 2 --> 2 --Check to make sure it worked... pf.particleIndex --> 2 --Get the Particle ID of particle 2 pf.particleID --> 0 --Get the Particle Age on frame 0 --This is a newborn particle, age is 0! pf.particleAge --> 0f --Now change the scene time to frame 10... sliderTime = 10 --> 10 --...and get the Age again - --10 frames later, the Age is 9.7 frames! pf.particleAge --> 9.7f --Check whether particle 2 is selected - --No, it is not pf.particleSelected --> false -- Select PF Source select pf --Change to Modify panel max modify mode --> OK --Change to Particle sub-object level subObjectLevel = 1 --> 1 --Select Particle 2 - one particle --should turn red in the viewport pf.particleSelected = true --> true --Get the particle position pf.particlePosition --> [12.1301,-40.7149,-96.9697] --You can change it - --The Particle should move there... pf.particlePosition = [10.0,-10.0,-40.0] --> [10,-10,-40] --Get the Speed of particle 2 pf.particleSpeed --> [0,0,-0.0625] --Get the Orientation of particle 2 pf.particleOrientation --> [-2.75317,-1.18547,-0.402363] --Get the Spin of particle 2 pf.particleSpin --> (angleAxis 0 [1,0,0]) --Get the size of the particle pf.particleScale --> 16.3299 --Get the Scale of the particle pf.particleScaleXYZ --> [1,1,1] --Get the complete TM of the particle pf.particleTM --> (matrix3 [0.345842,-0.147184,0.926677] [-0.0394943,-0.989029,-0.142347] [0.937461,0.0126313,-0.34786] [12.1301,-40.7149,-96.9697]) --Get the Shape as TriMesh. msh = pf.particleShape --> TriMesh --Take a look at the number of vertices msh.numverts --> 4 --...and the number of faces msh.numfaces --> 4 --Why not take a look at the actual TriMesh? --Create a new empty Editable Mesh new_mesh = Editable_mesh() --> $Editable_Mesh:Object01 @ [0.000000,0.000000,0.000000] --Assign the shape snapshot to the mesh new_mesh.mesh = msh --> TriMesh --And finally update all caches of the Emesh to see the result: update new_mesh --> OK
Methods:
<void><PF_Source>.updateParticles <node>particleSystem <time>time
Forces a particle update at the specified time.
<integer><PF_Source>.numParticles()
Returns the number of particles.
<integer><PF_Source>.numParticlesGenerated()
Returns the number of generated particles.
<void><PF_Source>.setEveryStepUpdateScriptLine <string>script
Sets the script string to be executed on each update step.
<void><PF_Source>.setEveryStepUpdateScriptFile <filename>fileName
Sets the script file to be executed on each update step.
<void><PF_Source>.setFinalStepUpdateScriptLine <string>script
Sets the script string to be executed at the final update step.
<void><PF_Source>.setFinalStepUpdateScriptFile <filename>fileName
Sets the script file to be executed at the final update step.
<time><PF_Source>.getUpdateTime()
Returns the current update time.
<void><PF_Source>.getUpdateInterval <&time>timeStart <&time>timeEnd
timeStart is In and Out parameter
timeEnd is In and Out parameter
Returns the update interval in the two by-reference variables.
<index><PF_Source>.getParticleID <index>particleIndex
Returns the particle ID of the indexed particle.
<boolean><PF_Source>.hasParticleID <index>particleBornIndex <&index>particleIndex
particleIndex is In and Out parameter
Returns true if a particle with the specified particle birth ID exists. Returns the actual particle index in the specified by-reference variable.
<node><PF_Source>.getParticleGroup <index>particleIndex
Returns the particle group node of the indexed particle.
<index><PF_Source>.getParticleIndex <index>particleBornIndex
Returns the particle index of the particle with the specified birth index.
<time><PF_Source>.getParticleAge <index>particleIndex
Returns the particle Age of the indexed particle.
<time><PF_Source>.getParticleAgeByID <index>particleID
Returns the particle Age of the particle specified by the particle ID.
<void><PF_Source>.setParticleAge <index>particleIndex <time>age
Sets the particle age of the specified indexed particle to the specified age value.
<void><PF_Source>.setParticleAgeByID <index>particleID <time>age
Sets the particle age of the particle specified by the ID to the specified age value.
<time><PF_Source>.getParticleLifeSpan <index>particleIndex
Returns the life span time of the specified indexed particle.
<time><PF_Source>.getParticleLifeSpanByID <index>particleID
Returns the life span time of the particle specified by the ID.
<void><PF_Source>.setParticleLifeSpan <index>particleIndex <time>lifeSpan
Sets the life span time of the indexed particle to the specified lifeSpan value.
<void><PF_Source>.setParticleLifeSpanByID <index>particleID <time>lifeSpan
Sets the life span time of the particle specified by the ID to the specified lifeSpan value.
<time><PF_Source>.getParticleGroupTime <index>particleIndex
Returns the Group Time of the indexed particle.
<time><PF_Source>.getParticleGroupTimeByID <index>particleID
Returns the Group Time of the particle specified by the ID.
<void><PF_Source>.setParticleGroupTime <index>particleIndex <time>age
Sets the Group Time of the indexed particle to the specified age value.
<void><PF_Source>.setParticleGroupTimeByID <index>particleID <time>age
Sets the Group Time of the particle specified by the ID to the specified age value.
<point3><PF_Source>.getParticlePosition <index>particleIndex
Returns the position of the indexed particle.
<point3><PF_Source>.getParticlePositionByID <index>particleID
Returns the position of the particle specified by the ID.
<void><PF_Source>.setParticlePosition <index>particleIndex <point3>position
Sets the position of the indexed particle to the specified Point3 value.
<void><PF_Source>.setParticlePositionByID <index>particleID <point3>position
Sets the position of the particle specified by the ID to the specified Point3 value.
<point3><PF_Source>.getParticleSpeed <index>particleIndex
Returns the speed of the indexed particle as a Point3 value.
<point3><PF_Source>.getParticleSpeedByID <index>particleID
Returns the speed of the particle specified by the ID as a Point3 value.
<void><PF_Source>.setParticleSpeed <index>particleIndex <point3>speed
Sets the speed of the indexed particle to the specified Point3 value.
<void><PF_Source>.setParticleSpeedByID <index>particleID <point3>speed
Sets the speed of the particle specified by the ID to the specified Point3 value.
<point3><PF_Source>.getParticleOrientation <index>particleIndex
Returns the orientation of the indexed particle as a Point3 value.
<point3><PF_Source>.getParticleOrientationByID <index>particleID
Returns the orientation of the particle specified by the ID as a Point3 value.
<void><PF_Source>.setParticleOrientation <index>particleIndex <point3>orientation
Sets the orientation of the indexed particle to the specified Point3 value.
<void><PF_Source>.setParticleOrientationByID <index>particleID <point3>orientation
Sets the orientation of the particle specified by the ID to the specified Point3 value.
<angleAxis><PF_Source>.getParticleSpin <index>particleIndex
Returns the Spin of the indexed particle as an angleAxis value.
<angleAxis><PF_Source>.getParticleSpinByID <index>particleID
Returns the Spin of the particle specified by the ID as an angleAxis value.
<void><PF_Source>.setParticleSpin <index>particleIndex <angleAxis>spin
Sets the Spin of the indexed particle to the specified AngleAxis value.
<void><PF_Source>.setParticleSpinByID <index>particleID <angleAxis>spin
Sets the Spin of the particle specified by the ID to the specified angleAxis value.
<float><PF_Source>.getParticleScale <index>particleIndex
Returns the size of the indexed particle as a Float value.
<float><PF_Source>.getParticleScaleByID <index>particleID
Returns the size of the particle specified by the ID as a Float value.
<void><PF_Source>.setParticleScale <index>particleIndex <float>scale
Sets the size of the indexed particle to the specified Float value.
<void><PF_Source>.setParticleScaleByID <index>particleID <float>scale
Sets the size of the particle specified by the ID to the specified Float value.
<point3><PF_Source>.getParticleScaleXYZ <index>particleIndex
Returns the Scale of the indexed particle as a Point3 value.
<point3><PF_Source>.getParticleScaleXYZByID <index>particleID
Returns the Scale of the particle specified by the ID as a Point3 value.
<void><PF_Source>.setParticleScaleXYZ <index>particleIndex <point3>scaleXYZ
Sets the Scale of the indexed particle to the specified Point3 value.
<void><PF_Source>.setParticleScaleXYZByID <index>particleID <point3>scaleXYZ
Sets the Scale of the particle specified by the ID to the specified Point3 value.
<matrix3><PF_Source>.getParticleTM <index>particleIndex
Returns the Transformation Matrix of the indexed particle.
<matrix3><PF_Source>.getParticleTMByID <index>particleID
Returns the Transformation Matrix of the particle specified by the ID.
<void><PF_Source>.setParticleTM <index>particleIndex <matrix3>TM
Sets the Transformation Matrix of the indexed particle.
<void><PF_Source>.setParticleTMByID <index>particleID <matrix3>TM
Sets the Transformation Matrix of the particle specified by the ID.
<boolean><PF_Source>.getParticleSelected <index>particleIndex
Returns the selected state of the indexed particle.
<boolean><PF_Source>.getParticleSelectedByID <index>particleID
Returns the selected state of the particle specified by the ID.
<void><PF_Source>.setParticleSelected <index>particleIndex <boolean>selected
Sets the selected state of the indexed particle.
<void><PF_Source>.setParticleSelectedByID <index>particleID <boolean>selected
Sets the selected state of the particle specified by the ID.
<mesh><PF_Source>.getParticleShape <index>particleIndex
Returns the shape of the indexed particle as a mesh value.
<mesh><PF_Source>.getParticleShapeByID <index>particleID
Returns the shape of the particle specified by the ID as a mesh value.
<void><PF_Source>.setParticleShape <index>particleIndex <mesh>shape
Sets the shape of the indexed particle to the specified mesh value.
<void><PF_Source>.setParticleShapeByID <index>particleID <mesh>shape
Sets the shape of the particle specified by the ID to the specified mesh value.
<void><PF_Source>.setShapeForAllParticles <mesh>shape
Sets the shape of all particles to the specified mesh value.
EXAMPLES AND RESULTS:
--Create a new Particle Flow Source in the Viewport, --then get it by name from the scene pf = $'PF Source 001' --> $PF_Source:PF Source 01 @ [2.536594,-48.031052,0.000000] --Set the scene time to frame 10 sliderTime = 10 --> 10 --Update the particles at time 10 pf.updateParticles pf 10f --> OK --Get total number of particles at current time pf.numParticles() --> 34 --Get the total number of particles generated up to the current time pf.numParticlesGenerated() --> 34 --Get the particles update time pf.getUpdateTime() --> 10f --Initialize two user variables to 0 ts = te = 0 --> 0 --Set scene time to frame 10 sliderTime = 10f --> 10f --Get the update interval into the variables passed by reference pf.getUpdateInterval &ts &te --> OK --Check the start time ts --> 9f --Check the end time te --> 10f pf.getParticleID 34--Get the particle ID of the 34th particle --> 34 --Try to get the 35th particle. --There are only 34 particles, so ID is 0 pf.getParticleID 35 --> 0 --Initialize a variable to pass by reference idx = 0 --> 0 --Check if there is particle with ID 34 - --Yes, there is one pf.hasParticleID 34 &idx --> true --and its index is 34 idx --> 34 --Check the same about particle ID 35 - --no, there is none pf.hasParticleID 35 &idx --> false --Get the Particle Group node pf.getParticleGroup 2 --> $Particle_Group:PF Source 01->Event 01 @ [0.000000,0.000000,0.000000] --Get the index of particle 34 pf.getParticleIndex 34 --> 34 --Get the index of particle 35 --No such particle ID, index is 0 pf.getParticleIndex 35 --> 0 --Get the particle age of particle 2 pf.getParticleAge 2 --> 9.7f --Get the particle age of particle ID 2 - --It is the same particle! pf.getParticleAgeByID 2 --> 9.7f --Get the particle age of particle 34 --It was born later, age is smaller pf.getParticleAge 34 --> 9f --Set age of particle 2 to 5 frames pf.setParticleAge 2 5f --> OK --Check to see if it worked - It did! pf.getParticleAge 2 --> 5f --Get the life span of particle 2 --Who wants to live forever? This one! pf.getParticleLifeSpan 2 --> 1.34218e+007f --Change the life span of particle 2 pf.setParticleLifeSpan 2 10f --> OK --Check again - it changed! pf.getParticleLifeSpan 2 --> 10f --Get the Group Time of Particle 2 pf.getParticleGroupTime 2 --> 0f --Set the Particle Group Time to 10 pf.setParticleGroupTime 2 10f --> OK --Get the time again - it was set! pf.getParticleGroupTime 2 --> 10f --Let’s change the mesh of particle 2 to a Geosphere gs = (geosphere radius:5).mesh --> TriMesh --Change the Display to Geometry pf.Event_001.Display_001.Type = 6 --> 6 --Set the particle mesh --One particle should become a Geosphere! pf.setParticleShape 2 gs --> OK --Get the mesh of a teapot tp = (teapot radius:5).mesh --> TriMesh --and assign to all particles - they should turn into teapots! --IT’S TEA TIME! pf.setShapeForAllParticles tp --> OK
This Interface is available in: