Summation and Averages
The script calculates the average velocities of a scene's active rigid bodies for each frame of a simulation and prints out the result:
Initializing the Objects
Add the script to Simulation Flow (Ctrl/Cmd + F2) > SimulationPre.
# Get all objects and create an empty list objects = scene.getObjects() activeObjects = [] # Loop through the objects and add them to the "activeObjects" when they are active rigid bodies for entry in objects: dynamicsMode = entry.getParameter("Dynamics") if (dynamicsMode == "Active rigid body"): activeObjects.append(entry) # The global variable is necessary to transfer the active objects from "SimulationPre" to "FramesPost". scene.setGlobalVariableValue("activeObjects", activeObjects)
Calculating the Velocity
Add the script to Simulation Flow (Ctrl/Cmd + F2) > FramesPost.
The output is formatted ("%.2f" % averageVelocity
) and clips the result to two digits, e.g. 3.67 instead of 3.671472813
# Read out the global variable and make it local again # Count how many objects are inside "activeObjects" activeObjects = scene.getGlobalVariableValue("activeObjects") numOfObjects = len(activeObjects) objectVelocity = 0.0 # Go through the objects and add up their velocities for entry in activeObjects: objectVelocity += entry.getVelocity().module() # Calculate the average and print it averageVelocity = objectVelocity / numOfObjects  scene.message("The average velocity is "+str("%.2f" % averageVelocity)+" m/s")