3ds Max C++ API Reference
IPFOperator.h

Functions

virtual bool Proceed (IObject *pCont, PreciseTimeValue timeStart, PreciseTimeValue &timeEnd, Object *pSystem, INode *pNode, INode *actionNode, IPFIntegrator *integrator)=0
 Returns true if the operation has been proceeded successfully. More...
 
PFExport bool Proceed (IObject *pCont, TimeValue timeStart, TimeValue &timeEnd, Object *pSystem, INode *pNode, INode *actionNode, FPInterface *integrator)
 "function publishing" alternative for the method above More...
 
virtual bool HasPreProceed (IObject *pCont, PreciseTimeValue timeStart, PreciseTimeValue &timeEnd)
 Three methods apply the Proceed method as a pre-procedure before the regular proceed for all operators starts. More...
 
virtual void PreProceedBegin (IObject *pCont, PreciseTimeValue timeStart, PreciseTimeValue &timeEnd)
 See virtual bool HasPreProceed(}. More...
 
virtual void PreProceedEnd (IObject *pCont, PreciseTimeValue timeStart, PreciseTimeValue &timeEnd)
 See virtual bool HasPreProceed(}. More...
 
virtual bool HasPostProceed (IObject *pCont, PreciseTimeValue time)
 Three methods apply the Proceed method as a post procedure when the amount of particles in all particle groups has been established and there won't be any particle transfers from one particle group to another. More...
 
virtual void PostProceedBegin (IObject *pCont, PreciseTimeValue time)
 See virtual bool HasPostProceed(}. More...
 
virtual void PostProceedEnd (IObject *pCont, PreciseTimeValue time)
 See virtual bool HasPostProceed(}. More...
 
FPInterfaceDescGetDesc ()
 

Detailed Description

Function Documentation

◆ Proceed() [1/2]

virtual bool Proceed ( IObject pCont,
PreciseTimeValue  timeStart,
PreciseTimeValue timeEnd,
Object pSystem,
INode pNode,
INode actionNode,
IPFIntegrator integrator 
)
pure virtual

Returns true if the operation has been proceeded successfully.

Methods' signatures are presented in two forms: one is compact, and the other one is for function-publishing where PreciseTimeValue is presented as a pair (int,float).

Parameters
pContparticleContainer
timeStartthe time for particle to start from the simulation. Each particle may have its own current valid time greater than timeStart. In this case the operator should consider the current particle time and timeEnd parameter. Some operators (like Birth) may not consider current particle time since it works with timeStart and timeEnd parameters only.
timeEndthe time for particles to come to; each particle may have its own current valid time; the parameter sets the time for all particles to synchronize to. If current particle time is greater than timeEnd it means that the particle doesn't require processing at all; the particle has been already updated beyond the interval ]timeStart, timeEnd] of the current operator. Sometimes the operator may not be able to proceed all the particles to the given timeEnd. In this case the operator proceeds the particles as far as possible and set the parameter to the time achieved. All the following operators will be given the new timeEnd value as a time value for particles to come to, and the particle system will run another round of operator stack modification in the attempt to proceed all the particles to the initially set time.
pSystemthe particle system that generates the particle stream; the same operator may get calls from different particle systems; if the result varies according to the particle system that generates particles, then this parameter is useful.
pNodeINode of the particle system that generates the particles.
actionNodeINode of the operator (if any; can be NULL)
integratoran operator to proceed particles according to "inertia" rules. The operator updates time, speed, position, spin, orientation channels on the basis of time, acceleration, speed, angular acceleration and spin channels. Each particle system has a default inertia operator. When an operator want to update current time for particles, it uses the "inertia" operator. An Action in the ActionList stack my "switch" the suggested "inertia" operator by its own if the Action support the "inertial" operator interface. The particle system recognizes such an Action as a holder of "inertia" interface, and use it for "inertia" purposes later on. If the parameter is NULL then the particle system doesn't allow the operator to advance particles in the time channel.

◆ Proceed() [2/2]

PFExport bool Proceed ( IObject pCont,
TimeValue  timeStart,
TimeValue timeEnd,
Object pSystem,
INode pNode,
INode actionNode,
FPInterface integrator 
)

"function publishing" alternative for the method above

◆ HasPreProceed()

virtual bool HasPreProceed ( IObject pCont,
PreciseTimeValue  timeStart,
PreciseTimeValue timeEnd 
)
inlinevirtual

Three methods apply the Proceed method as a pre-procedure before the regular proceed for all operators starts.

It is not recommended to modify particle container. The call is mostly used to give an operator opportunity to snapshot the state of particle container before any operator modifies it. The Proceed method is called in between PretProceedBegin and PreProceedEnd methods if HasPreProceed method returns "true". Those methods are not supported in MaxScript intentionally.

107 { return false; }

◆ PreProceedBegin()

virtual void PreProceedBegin ( IObject pCont,
PreciseTimeValue  timeStart,
PreciseTimeValue timeEnd 
)
inlinevirtual

See virtual bool HasPreProceed(}.

111 { ; }

◆ PreProceedEnd()

virtual void PreProceedEnd ( IObject pCont,
PreciseTimeValue  timeStart,
PreciseTimeValue timeEnd 
)
inlinevirtual

See virtual bool HasPreProceed(}.

115 { ; }

◆ HasPostProceed()

virtual bool HasPostProceed ( IObject pCont,
PreciseTimeValue  time 
)
inlinevirtual

Three methods apply the Proceed method as a post procedure when the amount of particles in all particle groups has been established and there won't be any particle transfers from one particle group to another.

The Proceed method is called again in between PostProceedBegin and PostProceedEnd methods if HasPostProceed method returns "true". Since the post proceed methods are applied after everything has established, it is applied to a "time" moment, not [timeStart, timeEnt] interval. The Proceed method is called with the same value for timeStart and timeEnd. Those methods are not supported in MaxScript intentionally.

126 { return false; }

◆ PostProceedBegin()

virtual void PostProceedBegin ( IObject pCont,
PreciseTimeValue  time 
)
inlinevirtual

See virtual bool HasPostProceed(}.

130 { ; }

◆ PostProceedEnd()

virtual void PostProceedEnd ( IObject pCont,
PreciseTimeValue  time 
)
inlinevirtual

See virtual bool HasPostProceed(}.

134 { ; }

◆ GetDesc()

FPInterfaceDesc* GetDesc ( )
inlinevirtual
Remarks
Returns a pointer to the class which contains the interface metadata.

Implements FPInterface.

#define PFOPERATOR_INTERFACE
Definition: IPFOperator.h:25
virtual FPInterfaceDesc * GetDescByID(Interface_ID id)
Definition: ifnpub.h:613