132 lines
4.4 KiB
C++
Executable File
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_
|