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

106 lines
3.4 KiB
C++
Executable File

/*! \file IParticleChannelPoint3.h
\brief Channel-generic interfaces for particle channels that store 3D vector data.
*/
/**********************************************************************
*<
CREATED BY: Oleg Bayborodin
HISTORY: created 11-29-01
*> Copyright (c) 2001, All Rights Reserved.
**********************************************************************/
#ifndef _IPARTICLECHANNELPOINT3_H_
#define _IPARTICLECHANNELPOINT3_H_
#include "max.h"
#include "PFExport.h"
// generic particle channel "Point3"
// interface ID
#define PARTICLECHANNELPOINT3R_INTERFACE Interface_ID(0x74f93c03, 0x1eb34500)
#define PARTICLECHANNELPOINT3W_INTERFACE Interface_ID(0x74f93c03, 0x1eb34501)
// since it's a "type" channel there is no "GetChannel" defines
//#define GetParticleChannelPoint3RInterface(obj) ((IParticleChannelPoint3R*)obj->GetInterface(PARTICLECHANNELPOINT3R_INTERFACE))
//#define GetParticleChannelPoint3WInterface(obj) ((IParticleChannelPoint3W*)obj->GetInterface(PARTICLECHANNELPOINT3W_INTERFACE))
class IParticleChannelPoint3R : public FPMixinInterface
{
public:
// function IDs Read
enum { kGetValue,
kIsGlobal,
kGetValueGlobal,
kGetBoundingBox,
kGetMaxLengthValue
};
// Function Map for Function Publish System
//***********************************
BEGIN_FUNCTION_MAP
FN_1(kGetValue, TYPE_POINT3_BR, GetValue, TYPE_INT);
FN_0(kIsGlobal, TYPE_bool, IsGlobal);
FN_0(kGetValueGlobal, TYPE_POINT3_BR, GetValue);
VFN_2(kGetBoundingBox, GetBoundingBox, TYPE_POINT3_BR, TYPE_POINT3_BR);
FN_0(kGetMaxLengthValue, TYPE_FLOAT, GetMaxLengthValue);
END_FUNCTION_MAP
// get property for particle with index
virtual const Point3& GetValue(int index) const = 0;
// verify if the channel is global
virtual bool IsGlobal() const = 0;
// if channel is global returns the global value
// if channel is not global returns value of the first particle
virtual const Point3& GetValue() const = 0;
// returns bounding box for all particles
virtual const Box3& GetBoundingBox() const = 0;
// FnPub alternative for the method above
PFExport void GetBoundingBox(Point3& corner1, Point3& corner2) const;
// returns maximum length of 3D vector of all particles
virtual float GetMaxLengthValue() const = 0;
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELPOINT3R_INTERFACE); }
};
class IParticleChannelPoint3W : public FPMixinInterface
{
public:
// function IDs Write
enum { kSetValue,
kSetValueGlobal,
kBuildBoundingBox,
kUpdateMaxLengthValue
};
// Function Map for Function Publish System
//***********************************
BEGIN_FUNCTION_MAP
VFN_2(kSetValue, SetValue, TYPE_INT, TYPE_POINT3_BR);
VFN_1(kSetValueGlobal, SetValue, TYPE_POINT3_BR);
VFN_0(kBuildBoundingBox, BuildBoundingBox);
VFN_0(kUpdateMaxLengthValue, UpdateMaxLengthValue);
END_FUNCTION_MAP
// set property for particle with index
virtual void SetValue(int index, const Point3& v) = 0;
// set property for all particles at once thus making the channel global
virtual void SetValue(const Point3& v) = 0;
// build bounding box for 3D vector data of all particles
virtual void BuildBoundingBox() = 0;
// update maximum length value for 3d vector data of all particles
virtual void UpdateMaxLengthValue() = 0;
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELPOINT3W_INTERFACE); }
};
#endif // _IPARTICLECHANNELPOINT3_H_