#include <c4d_particles.h>
The master system is the main Thinking Particles engine class. There can only be one master system per document. This is the easiest way to get it:
Private Member Functions | |
TP_MasterSystem () | |
~TP_MasterSystem () | |
Particle/Particles | |
Int32 | AllocParticle () |
Int32 | AllocParticles (Int32 num, Int32 *ids) |
void | FreeParticle (Int32 pid) |
void | FreeAllParticles () |
Int32 | NumParticles () const |
Particle Group | |
TP_PGroup * | AllocParticleGroup () |
void | FreeParticleGroup (TP_PGroup *&group) |
Bool | SetPGroupHierarchy (TP_PGroup *parent, TP_PGroup *group, TP_InsertMode mode) |
Int32 | GetParticleGroups (TP_PGroup *ingroup, TP_PGroupArray *gtab, TP_GetPGroupMode mode, Bool subgroups=true) |
Int32 | GetParticleGroups (const TP_PGroup *ingroup, maxon::BaseArray< const TP_PGroup * > *gtab, TP_GetPGroupMode mode, Bool subgroups=true) const |
Int32 | GetGroupParticleCount (TP_PGroup *ingroup, Bool subgroups=true) |
BaseObject * | GetVirtualObjects (TP_PGroup *ingroup, Bool inRender=true, Bool subgroups=true, const HierarchyHelp *hh=nullptr) |
BaseContainer * | GetGroupInfo (TP_PGroup *group) |
TP_PGroup * | GetGroupFromInfo (BaseContainer *info) |
Bool | UpdateGroup (TP_PGroup *group, const BaseTime &timeDelta) |
Particle Information/Bits | |
Bool | Alive (Int32 pid) const |
Bool | IsBorn (Int32 pid) const |
Bool | IsDie (Int32 pid) const |
Bool | EntersGroup (Int32 pid) const |
TP_PGroup * | Group (Int32 pid) |
Vector | Position (Int32 pid) const |
Vector | Velocity (Int32 pid) const |
Float | Mass (Int32 pid) const |
TP_Spin | Spin (Int32 pid) const |
Float | Size (Int32 pid) const |
Vector | Scale (Int32 pid) const |
BaseTime | Age (Int32 pid) const |
BaseTime | Life (Int32 pid) const |
Matrix | Alignment (Int32 pid) const |
Int32 | Randomseed (Int32 pid) const |
TP_PShapePtr | Shape (Int32 pid) const |
Matrix | Transform (Int32 pid) const |
UInt16 | Flags (Int32 pid) const |
Float | DTFactor (Int32 pid) const |
Set Particle Information/Bits | |
void | SetPosition (Int32 pid, const Vector &p) |
void | SetVelocity (Int32 pid, const Vector &p) |
void | SetMass (Int32 pid, Float mass) |
void | SetSpin (Int32 pid, const TP_Spin &spin) |
void | SetAge (Int32 pid, const BaseTime &age) |
void | SetLife (Int32 pid, const BaseTime &life) |
void | SetGroup (Int32 pid, TP_PGroup *group) |
void | SetSize (Int32 pid, Float size) |
void | SetScale (Int32 pid, const Vector &scale) |
void | SetAlignment (Int32 pid, const Matrix &align) |
void | SetRandomseed (Int32 pid, Int32 seed) |
void | SetShape (Int32 pid, const TP_PShapePtr &shape, Bool deleteold=true) |
void | SetCollision (Int32 pid, Int32 collision) |
void | SetDTFactor (Int32 pid, Float dt) |
Particle Data Channels | |
Bool | AddDataChannel (GvDataID type, const maxon::String &str) |
Bool | RemoveDataChannel (Int32 chan) |
Int32 | NumDataChannels () |
GvDataID | DataChannelType (Int32 chan) |
String | DataChannelName (Int32 chan) |
Int32 | DataChannelUniqueID (Int32 chan) |
Int32 | DataChannelID (Int32 unique_id) |
Bool | SetData (Int32 pid, Int32 chan, void *data, GvValueID type) |
Bool | GetData (Int32 pid, Int32 chan, void *data, GvValueID type) |
Bool | SetDataFromPort (Int32 pid, Int32 chan, GvPort *p, GvRun *r) |
Bool | SetDataToPort (Int32 pid, Int32 chan, GvPort *p, GvRun *r) |
BaseContainer * | GetDataChannelInfo (Int32 chan) |
Int32 | GetDataChannelFromInfo (BaseContainer *info) |
Callbacks | |
void | Reg_FreeParticle_CB (TP_FreeParticle_CB *cb) |
void | UReg_FreeParticle_CB (TP_FreeParticle_CB *cb) |
void | Reg_DeletePShape_CB (TP_FreePShape_CB *cb) |
void | UReg_DeletePShape_CB (TP_FreePShape_CB *cb) |
Operator Link Table | |
Int32 | GetOperatorID (GvNode *op) |
GvOperatorData * | GetOperator (Int32 id) |
Dirty | |
UInt32 | GetDirty () const |
void | SetDirty () |
Collision | |
Bool | CheckCollision (Int32 collision, Int32 pid, Float t, Vector &pos, Vector &vel, TP_Spin &spin, Float dt, Float &ct) |
Particle Shape | |
TP_PShapePtr | GetShapeClone (const TP_PShapePtr &shape, Int32 pid, COPYFLAGS flags, AliasTrans *trn) |
TP_PShapePtr | GetShape (const TP_PShapePtr &shape, Int32 pid, Int32 owner_id) |
BaseObject * | GetShapeVirtualObjects (const TP_PShapePtr &shape, Int32 pid, BaseDocument *doc, const HierarchyHelp *hh) |
Float | GetShapeScale (const TP_PShapePtr &shape, Int32 pid) |
void | FreeShape (TP_PShapePtr &shape, Int32 pid) |
Collider Cache | |
GeColliderCache * | ColliderCache (Int32 pid) |
Color Property | |
Vector32 | Color (Int32 pid) |
void | SetColor (Int32 pid, const Vector32 &color) |
|
private |
|
private |
Int32 AllocParticle | ( | ) |
Allocates a particle.
Allocates num particles and stores their particles IDs in the ids array.
[in] | num | The number of particles to allocate. |
[out] | ids | An array of num Int32 elements. Filled with the allocated particle IDs. The caller owns the pointed array. |
void FreeParticle | ( | Int32 | pid | ) |
Frees a particle.
[in] | pid | The particle ID of the particle to free: 0 <= pid < NumParticles() |
void FreeAllParticles | ( | ) |
Frees all particles.
Int32 NumParticles | ( | ) | const |
Retrieves the number of allocated particles. All particles IDs are less than this value.
TP_PGroup* AllocParticleGroup | ( | ) |
Allocates a new particle group. Must be freed with FreeParticleGroup(), or inserted into the list with SetPGroupHierarchy().
void FreeParticleGroup | ( | TP_PGroup *& | group | ) |
Frees a particle group, removing it from the list.
[in,out] | group | The group to free. Set to nullptr afterwards. |
Bool SetPGroupHierarchy | ( | TP_PGroup * | parent, |
TP_PGroup * | group, | ||
TP_InsertMode | mode | ||
) |
Performs a hierarchy action on a particle group.
[in] | parent | The parent parameter. The caller owns the pointed TP_PGroup. |
[in] | group | The group to act on. The caller owns the pointed TP_PGroup. |
[in] | mode | The hierarchy action: TP_InsertMode |
Int32 GetParticleGroups | ( | TP_PGroup * | ingroup, |
TP_PGroupArray * | gtab, | ||
TP_GetPGroupMode | mode, | ||
Bool | subgroups = true |
||
) |
Returns the particle groups in ingroup, specified by mode, into the gtab list.
Example:
[in] | ingroup | The in-group parameter. The caller owns the pointed TP_PGroup. |
[out] | gtab | The specified groups are added to this list. The caller owns the pointed TP_PGroup. |
[in] | mode | The mode: TP_GetPGroupMode |
[in] | subgroups | If true sub-groups are included. |
Int32 GetParticleGroups | ( | const TP_PGroup * | ingroup, |
maxon::BaseArray< const TP_PGroup * > * | gtab, | ||
TP_GetPGroupMode | mode, | ||
Bool | subgroups = true |
||
) | const |
Calculates the number of particles in ingroup.
[in] | ingroup | The in-group parameter. The caller owns the pointed TP_PGroup. |
[in] | subgroups | If true sub-groups are included. |
BaseObject* GetVirtualObjects | ( | TP_PGroup * | ingroup, |
Bool | inRender = true , |
||
Bool | subgroups = true , |
||
const HierarchyHelp * | hh = nullptr |
||
) |
Creates the virtual object hierarchy for a particle group, i.e. an object group containing all particles. Used by the ParticleGeometry object.
[in] | ingroup | The in-group parameter. The caller owns the pointed TP_PGroup. |
[in] | inRender | true if this is for rendering, otherwise the objects are built for the editor view. |
[in] | subgroups | If true sub-groups are included. |
[in] | hh | The hierarchy helper for the virtual object generation. The caller owns the pointed HierarchyHelp. |
BaseContainer* GetGroupInfo | ( | TP_PGroup * | group | ) |
Retrieves the group information for a group.
[in] | group | The group to get the information for. The caller owns the pointed TP_PGroup. |
TP_PGroup* GetGroupFromInfo | ( | BaseContainer * | info | ) |
Retrieves a group from the information in info.
[in] | info | The group information to search for. The caller owns the pointed TP_PGroupInfo. |
Updates a group at a given time difference since the last update. Use a default timeDelta of 0 to update at the current time.
[in] | group | The group to update. The caller owns the pointed TP_PGroup. |
[in] | timeDelta | The time difference since the last update. |
Retrieves the alive bit of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the is-born bit of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the is-die bit of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the enters-group bit of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the group of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the position of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the velocity of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the mass of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the spin of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the size of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the scale of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the age of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the lifetime of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the alignment matrix of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the random seed of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
TP_PShapePtr Shape | ( | Int32 | pid | ) | const |
Retrieves the shape of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the transformation matrix of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the flags of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the delta time factor of a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Sets the position for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | p | The new particle position. |
Sets the velocity for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | p | The new particle velocity. |
Sets the mass for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | mass | The new particle mass. |
Sets the spin for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | spin | The new particle spin. |
Sets the age for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | age | The new particle age. |
Sets the lifetime for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | life | The new particle lifetime. |
Inserts a particle into another group.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | group | The group to place the particle in. The pointed group must belong to this master system. |
Sets the size for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | size | The new particle size. |
Sets the scale for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | scale | The new particle scale. |
Sets the alignment matrix for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | align | The new particle alignment matrix. |
Sets the random seed for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | seed | The new particle random seed. |
void SetShape | ( | Int32 | pid, |
const TP_PShapePtr & | shape, | ||
Bool | deleteold = true |
||
) |
Sets the shape for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | shape | The new particle shape. TP_PShapeI::owner_id should be set to GetOperatorID() for the node responsible for the shape handling. This node should be prepared to provide a TP_PShapeInterface via the TP_MSG_GET_PSHAPEINTERFACE message. |
[in] | deleteold | If true the old shape is deleted. |
Sets the collision handling information for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | collision | The collision ID. This is the GetOperatorID() for the node responsible for the collision handling. This node should be prepared to provide a TP_CollisionInterface via the TP_MSG_GET_COLLISIONINTERFACE message. |
Sets the delta time factor for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | dt | The new particle delta time factor. |
Bool AddDataChannel | ( | GvDataID | type, |
const maxon::String & | str | ||
) |
Adds a data channel.
[in] | type | The channel data type: GvDataID |
[in] | str | The channel name. |
Removes a data channel.
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
Int32 NumDataChannels | ( | ) |
Retrieves the data channel count.
Retrieves the data type of a data channel.
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
Retrieves the name of a data channel.
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
Retrieves a unique ID for a data channel that is independent of its index.
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
Retrieves the index of a data channel from its unique ID.
[in] | unique_id | The unique channel ID. |
Sets the data channel for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
[in] | data | The data to set. Points to GV data. The layout of the pointed data is determined by type. |
[in] | type | Determines the type of data. |
Retrieves the data channel for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
[out] | data | Filled with the retrieved data. Points to GV data. The layout of the pointed data is determined by type. |
[in] | type | Determines the type of data. |
Sets the data channel for a particle, getting the data from a GV port.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
[in] | p | The port with the data to set. The caller owns the pointed GvPort. |
[in] | r | The run helper. The caller owns the pointed GvRun. |
Retrieves the data channel for a particle, storing the data in a GV port.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | chan | The channel index: 0 <= chan < NumDataChannels() |
[out] | p | The retrieved data is set in this port. The caller owns the pointed GvPort. |
[in] | r | The run helper. The caller owns the pointed GvRun. |
BaseContainer* GetDataChannelInfo | ( | Int32 | chan | ) |
Retrieves the channel information for a data channel.
Int32 GetDataChannelFromInfo | ( | BaseContainer * | info | ) |
Retrieves a data channel index from the information in info.
[in] | info | The information to search for. The caller owns the pointed TP_DataChannelInfo. |
void Reg_FreeParticle_CB | ( | TP_FreeParticle_CB * | cb | ) |
Registers a free-particle callback.
[in] | cb | The callback to register. |
void UReg_FreeParticle_CB | ( | TP_FreeParticle_CB * | cb | ) |
Unregisters a free-particle callback.
[in] | cb | The callback to unregister. |
void Reg_DeletePShape_CB | ( | TP_FreePShape_CB * | cb | ) |
Registers a delete-shape callback.
[in] | cb | The callback to register. |
void UReg_DeletePShape_CB | ( | TP_FreePShape_CB * | cb | ) |
Unregisters a delete-shape callback.
[in] | cb | The callback to unregister. |
Retrieves an ID for op that can later be used with GetOperator() to get op back.
[in] | op | A node. The caller owns the pointed node. |
GvOperatorData* GetOperator | ( | Int32 | id | ) |
Retrieves the operator for an ID previously acquired with GetOperatorID().
[in] | id | The operator ID, as returned by GetOperatorID(). |
UInt32 GetDirty | ( | ) | const |
A dirty counter for the master system. This can be used to see if anything has changed. Use SetDirty() to increment the counter.
void SetDirty | ( | ) |
Increments the dirty counter, i.e. tells anyone using GetDirty() that something has changed.
Bool CheckCollision | ( | Int32 | collision, |
Int32 | pid, | ||
Float | t, | ||
Vector & | pos, | ||
Vector & | vel, | ||
TP_Spin & | spin, | ||
Float | dt, | ||
Float & | ct | ||
) |
Finds the node responsible for collision, the one that called SetCollision(), and tells it to evaluate the passed collision parameters.
[in] | collision | The collision ID. This is GetOperatorID() for the node responsible for the collision. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | t | Time to evaluate the collision at. Collisions are detected between t - dt and t. |
[in] | pos | Assigned the new position of the object if there is a collision. |
[out] | vel | Assigned the new velocity of the object if there is a collision. |
[out] | spin | Assigned the new spin of the object if there is a collision. |
[in] | dt | The time since the last evaluation, i.e. the time to look backwards for collisions. |
[in] | ct | The collision time, if there was a collision. This is generally less than t. |
TP_PShapePtr GetShapeClone | ( | const TP_PShapePtr & | shape, |
Int32 | pid, | ||
COPYFLAGS | flags, | ||
AliasTrans * | trn | ||
) |
Finds the node responsible for shape, as specified by TP_PShapeI::owner_id, and tells it to return a clone of shape.
[in] | shape | The particle shape. The caller owns the pointed shape. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | flags | The flags: COPYFLAGS |
[in] | trn | An alias translator for the operation. Can be nullptr. The caller owns the pointed AliasTrans. |
TP_PShapePtr GetShape | ( | const TP_PShapePtr & | shape, |
Int32 | pid, | ||
Int32 | owner_id | ||
) |
Finds the node responsible for shape, as specified by TP_PShapeI::owner_id, and tells it to return the shape associated with shape. (Normally this is the same object.)
[in] | shape | The particle shape. The caller owns the pointed shape. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | owner_id | The owner ID. |
BaseObject* GetShapeVirtualObjects | ( | const TP_PShapePtr & | shape, |
Int32 | pid, | ||
BaseDocument * | doc, | ||
const HierarchyHelp * | hh | ||
) |
Finds the node responsible for shape, as specified by TP_PShapeI::owner_id, and tells it to return a BaseObject shape for shape.
[in] | shape | The particle shape. The caller owns the pointed shape. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | doc | The current document. The caller owns the pointed BaseDocument. |
[in] | hh | A hierarchy helper for the operation. The caller owns the pointed HierarchyHelp. |
Float GetShapeScale | ( | const TP_PShapePtr & | shape, |
Int32 | pid | ||
) |
Finds the node responsible for shape, as specified by TP_PShapeI::owner_id, and tells it to return the scale of shape.
[in] | shape | The particle shape. The caller owns the pointed shape. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
void FreeShape | ( | TP_PShapePtr & | shape, |
Int32 | pid | ||
) |
Finds the node responsible for shape, as specified by TP_PShapeI::owner_id, and tells it to free shape.
[in] | shape | The particle shape. The caller owns the pointed shape. |
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
GeColliderCache* ColliderCache | ( | Int32 | pid | ) |
Retrieves a collider cache for the shape associated with a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Retrieves the color for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
Sets the color for a particle.
[in] | pid | The particle ID: 0 <= pid < NumParticles() |
[in] | color | The particle color. |