130 lines
4.6 KiB
C++
Executable File
130 lines
4.6 KiB
C++
Executable File
/*! \file IParticleChannelMesh.h
|
|
\brief Channel-generic interface for particle channels
|
|
that store data in "mesh" form
|
|
The channel can be local (each particle has its own mesh)
|
|
global (all particles have the same mesh) and shared
|
|
(particles are sharing a limited set of meshes)
|
|
*/
|
|
/**********************************************************************
|
|
*<
|
|
CREATED BY: Oleg Bayborodin
|
|
|
|
HISTORY: created 11-28-01
|
|
|
|
*> Copyright (c) 2001, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef _IPARTICLECHANNELMESH_H_
|
|
#define _IPARTICLECHANNELMESH_H_
|
|
|
|
#include "max.h"
|
|
|
|
#include "PFExport.h"
|
|
|
|
// standard particle channel "Mesh"
|
|
// interface ID
|
|
#define PARTICLECHANNELMESHR_INTERFACE Interface_ID(0x74f93c11, 0x1eb34500)
|
|
#define PARTICLECHANNELMESHW_INTERFACE Interface_ID(0x74f93c11, 0x1eb34501)
|
|
|
|
// since it's a "type" channel there is no "GetChannel" defines
|
|
//#define GetParticleChannelMeshRInterface(obj) ((IParticleChannelMeshR*)obj->GetInterface(PARTICLECHANNELMESHR_INTERFACE))
|
|
//#define GetParticleChannelMeshWInterface(obj) ((IParticleChannelMeshW*)obj->GetInterface(PARTICLECHANNELMESHW_INTERFACE))
|
|
|
|
|
|
class IParticleChannelMeshR : public FPMixinInterface
|
|
{
|
|
public:
|
|
|
|
// function IDs Read
|
|
enum { kIsShared,
|
|
kGetValueCount,
|
|
kGetValueIndex,
|
|
kGetValueByIndex,
|
|
kGetValue,
|
|
kGetValueFirst,
|
|
kGetMaxBoundingBox
|
|
};
|
|
|
|
BEGIN_FUNCTION_MAP
|
|
|
|
FN_0(kIsShared, TYPE_bool, IsShared);
|
|
FN_0(kGetValueCount, TYPE_INT, GetValueCount);
|
|
FN_1(kGetValueIndex, TYPE_INT, GetValueIndex, TYPE_INT);
|
|
FN_1(kGetValueByIndex, TYPE_MESH, GetValueByIndex, TYPE_INT);
|
|
FN_1(kGetValue, TYPE_MESH, GetValue, TYPE_INT);
|
|
FN_0(kGetValueFirst, TYPE_MESH, GetValue);
|
|
VFN_2(kGetMaxBoundingBox, GetMaxBoundingBox, TYPE_POINT3_BR, TYPE_POINT3_BR);
|
|
|
|
END_FUNCTION_MAP
|
|
|
|
// check out if some particles have shared mesh
|
|
// if it's true then there is no need to get a shape for each particle
|
|
virtual bool IsShared() const = 0;
|
|
// get total number of actual meshes (values) in the channel
|
|
virtual int GetValueCount() const = 0;
|
|
// get the value index of a particle
|
|
virtual int GetValueIndex(int particleIndex) const = 0;
|
|
// get shape of the valueIndex-th value
|
|
virtual const Mesh* GetValueByIndex(int valueIndex) const = 0;
|
|
// get shape for particle with index
|
|
virtual const Mesh* GetValue(int particleIndex) const = 0;
|
|
// get global shape for all particles
|
|
// the method returns the mesh of the first particle if it is local or shared
|
|
virtual const Mesh* GetValue() const = 0;
|
|
// returns maximal bounding box
|
|
virtual const Box3& GetMaxBoundingBox() const = 0;
|
|
// FnPub alternative for the method above
|
|
PFExport void GetMaxBoundingBox(Point3& corner1, Point3& corner2) const;
|
|
|
|
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELMESHR_INTERFACE); }
|
|
};
|
|
|
|
class IParticleChannelMeshW : public FPMixinInterface
|
|
{
|
|
public:
|
|
|
|
// function IDs Write
|
|
enum { kSetValue,
|
|
kSetValueMany,
|
|
kSetValueAll,
|
|
kCopyValue,
|
|
kCopyValueMany,
|
|
kCopyValueAll,
|
|
kBuildMaxBoundingBox
|
|
};
|
|
|
|
BEGIN_FUNCTION_MAP
|
|
|
|
FN_2(kSetValue, TYPE_bool, SetValue, TYPE_INT, TYPE_MESH);
|
|
FN_2(kSetValueMany, TYPE_bool, SetValue, TYPE_INT_TAB_BR, TYPE_MESH);
|
|
FN_1(kSetValueAll, TYPE_bool, SetValue, TYPE_MESH);
|
|
FN_2(kCopyValue, TYPE_bool, CopyValue, TYPE_INT, TYPE_INT);
|
|
FN_2(kCopyValueMany, TYPE_bool, CopyValue, TYPE_INT, TYPE_INT_TAB_BR);
|
|
FN_1(kCopyValueAll, TYPE_bool, CopyValue, TYPE_INT);
|
|
VFN_0(kBuildMaxBoundingBox, BuildMaxBoundingBox);
|
|
|
|
END_FUNCTION_MAP
|
|
|
|
// copies mesh to be a local value for particle with index "particleIndex"
|
|
// returns true if successful
|
|
virtual bool SetValue(int particleIndex, Mesh* mesh) = 0;
|
|
// copies mesh to be a shared value with indices in "particleIndices"
|
|
// returns true if successful
|
|
virtual bool SetValue(Tab<int>& particleIndices, Mesh* mesh) = 0;
|
|
// copies mesh to be a global values for all particles
|
|
// returns true if successful
|
|
virtual bool SetValue(Mesh* mesh) = 0;
|
|
// copy mesh value from fromParticle to toParticle
|
|
virtual bool CopyValue(int fromParticle, int toParticle) = 0;
|
|
// copy mesh value from fromParticle to toParticles
|
|
virtual bool CopyValue(int fromParticle, Tab<int>& toParticles) = 0;
|
|
// copy mesh value from fromParticle to all particles
|
|
virtual bool CopyValue(int fromParticle) = 0;
|
|
// build maximal bounding box for the set of all shapes
|
|
virtual void BuildMaxBoundingBox() = 0;
|
|
|
|
FPInterfaceDesc* GetDesc() { return GetDescByID(PARTICLECHANNELMESHW_INTERFACE); }
|
|
};
|
|
|
|
#endif // _IPARTICLECHANNELMESH_H_
|