tge/lib/maxsdk70/include/ParticleFlow/IParticleChannelID.h
2017-04-17 06:17:10 -06:00

132 lines
4.4 KiB
C++
Executable File

/*! \file IParticleChannelID.h
\brief Channel-specific interfaces for ParticleChannelID. The channel is used to identify particles.
Particle ID consists of two integers: particleIndex and
particleBorn. ParticleIndex gives relative correspondense
to the whole amount of particles. If PF ParticleAmountMultiplier
is set to 100% then the given particleIndex are successive
ordinal numbers. If it's set to 50% then the given particle indeces
are 0, 2, 4, 6 etc. If it is a Birth by Total Number then the
last particle born has an index of the total number whatever
multiplier is. ParticleBorn number always are successive
ordinal numbers when particles were born: 0, 1, 2, 3 etc.
If ParticleAmountMultiplier equals 100% then for a
particular particle particleIndex and particleBorn are the
same number. If ParticleAmountMultiplier is greater then
100% then you may have several particles with the same
particleIndex. It is recommended to link non-random properties to
particleIndex and random properties to particleBorn.
*/
/**********************************************************************
*<
CREATED BY: Oleg Bayborodin
HISTORY: created 10-04-01
*> Copyright (c) 2001, All Rights Reserved.
**********************************************************************/
#ifndef _IPARTICLECHANNELID_H_
#define _IPARTICLECHANNELID_H_
// standard particle channel "particleID"
// interface ID
#define PARTICLECHANNELIDR_INTERFACE Interface_ID(0x74f93b02, 0x1eb34500)
#define PARTICLECHANNELIDW_INTERFACE Interface_ID(0x74f93b02, 0x1eb34501)
#define GetParticleChannelIDRInterface(obj) ((IParticleChannelIDR*)obj->GetInterface(PARTICLECHANNELIDR_INTERFACE))
#define GetParticleChannelIDWInterface(obj) ((IParticleChannelIDW*)obj->GetInterface(PARTICLECHANNELIDW_INTERFACE))
// function IDs Read
enum { particleChannelID_getID,
particleChannelID_getParticleIndex,
particleChannelID_getParticleBorn
};
// function IDs Write
enum { particleChannelID_setID
};
struct ParticleID {
int index;
int born;
};
class IParticleChannelIDR : public FPMixinInterface
{
BEGIN_FUNCTION_MAP
VFN_3(particleChannelID_getID, GetID, TYPE_INT, TYPE_INT_BR, TYPE_INT_BR);
FN_1(particleChannelID_getParticleIndex, TYPE_INT, GetParticleIndex, TYPE_INT);
FN_1(particleChannelID_getParticleBorn, TYPE_INT, GetParticleBorn, TYPE_INT);
END_FUNCTION_MAP
public:
/** @defgroup IParticleChannelID IParticleChannelID.h
* @{
*/
/*! \fn virtual void GetID(int index, int& particleIndex, int& particleBorn) const = 0;
* \brief
*/
virtual void GetID(int index, int& particleIndex, int& particleBorn) const = 0;
/*! \fn virtual int GetParticleIndex(int index) const = 0;
* \brief Returns particleIndex
*/
virtual int GetParticleIndex(int index) const = 0; // returns particleIndex
/*! \fn virtual int GetParticleBorn(int index) const = 0;
* \brief Returns particleBorn
*/
virtual int GetParticleBorn(int index) const = 0; // returns particleBorn
/*! \fn virtual const ParticleID& GetID(int index) const = 0;
* \brief Methods not in the mapped interface
*/
virtual const ParticleID& GetID(int index) const = 0;
/*! \fn FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELIDR_INTERFACE); }
* \brief
*/
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELIDR_INTERFACE); }
};
class IParticleChannelIDW : public FPMixinInterface
{
BEGIN_FUNCTION_MAP
VFN_3(particleChannelID_setID, SetID, TYPE_INT, TYPE_INT, TYPE_INT);
END_FUNCTION_MAP
public:
/** @defgroup IParticleChannelID IParticleChannelID.h
* @{
*/
/*! \fn virtual void SetID(int index, int particleIndex, int particleBorn) = 0;
* \brief Set particle property
*/
virtual void SetID(int index, int particleIndex, int particleBorn) = 0;
/*! \fn virtual void SetID(int index, const ParticleID& id) = 0;
* \brief Methods not in the mapped interface
*/
virtual void SetID(int index, const ParticleID& id) = 0;
/*! \fn FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELIDW_INTERFACE); }
* \brief
*/
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELIDW_INTERFACE); }
};
/*@}*/
#endif // _IPARTICLECHANNELID_H_