Initial commit
This commit is contained in:
181
Torque/SDK/lib/maxsdk40/IDataChannel.h
Normal file
181
Torque/SDK/lib/maxsdk40/IDataChannel.h
Normal file
@@ -0,0 +1,181 @@
|
||||
/**********************************************************************
|
||||
|
||||
FILE: IDataChannel.h
|
||||
|
||||
DESCRIPTION: Intelligent Data Channel API
|
||||
|
||||
CREATED BY: Attila Szabo, Discreet
|
||||
|
||||
HISTORY: [attilas|19.6.2000]
|
||||
|
||||
|
||||
*> Copyright (c) 1998-2000, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __IDATACHANNEL__H
|
||||
#define __IDATACHANNEL__H
|
||||
|
||||
#include "maxtypes.h"
|
||||
|
||||
// Macros to be used if any of the method below are implemented in a dll
|
||||
// The dll project that implements the methods needs to define DATACHANNEL_IMP
|
||||
#ifdef DATACHANNEL_IMP
|
||||
#define DataChanExport __declspec(dllexport)
|
||||
#else
|
||||
#define DataChanExport __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
// forward declaration
|
||||
class FPInterface;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// A data channel is a homogeneous collection of objects of a user defined
|
||||
// type (data objects). Data channels are uniquely identified by a Class_ID.
|
||||
//
|
||||
// Data channels can be associated with any element type of a Max object:
|
||||
// faces or vertexes of Meshes, etc.
|
||||
//________________________________________________________________________
|
||||
class IDataChannel : public InterfaceServer
|
||||
{
|
||||
public:
|
||||
// Returns the unique id of the channel
|
||||
virtual Class_ID DataChannelID() const =0;
|
||||
|
||||
// Returns the number of data objects in this channel
|
||||
virtual ULONG Count() const { return 0; }
|
||||
|
||||
// Self destruction
|
||||
virtual void DeleteThis() = 0;
|
||||
};
|
||||
|
||||
// interface ID
|
||||
#define DATACHANNEL_INTERFACE Interface_ID(0x38a718a8, 0x14685b4b)
|
||||
#define GetDataChannelInterface(obj) ((IDataChannel*)obj->GetInterface(DATACHANNEL_INTERFACE))
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Face-data channel interface
|
||||
//
|
||||
// This is an abstraction of a collection of data objects that is
|
||||
// associated with faces of Max objects
|
||||
// Max objects that have face-data channels call the methods of this interface
|
||||
// when those faces change in some way. The data channels can then react to
|
||||
// the changes to the faces.
|
||||
//
|
||||
// Currently only Meshes support face-data channels.
|
||||
//________________________________________________________________________
|
||||
class IFaceDataChannel : public IDataChannel
|
||||
{
|
||||
public:
|
||||
|
||||
//
|
||||
// --- face specific operations\events ---
|
||||
//
|
||||
// These methods are called by the owner of face-data channels
|
||||
// when its faces change in some way. It's up to the face-data channel
|
||||
// to do wathever it wants to do on these notification methods.
|
||||
|
||||
// Called when num new faces were created at index at in the
|
||||
// object's list of faces. Returns TRUE on success
|
||||
// ULONG at - index in the object's array of faces where the new faces
|
||||
// were inserted
|
||||
// ULONG num - the number of new faces created
|
||||
virtual BOOL FacesCreated( ULONG at, ULONG num ) = 0;
|
||||
|
||||
// Called when the owner object has cloned some of its faces and appended
|
||||
// then to its list of faces.
|
||||
// BitArray& set - bitarray with as many bits as many faces the owner
|
||||
// object has. Bits set to 1 correspond to cloned faces
|
||||
virtual BOOL FacesClonedAndAppended( BitArray& set ) = 0;
|
||||
|
||||
// Called when faces were deleted in the owner object. Returns TRUE on success
|
||||
// BitArray& set - bitarray with as many bits as many faces the owner
|
||||
// object has. Bits set to 1 correspond to deleted faces
|
||||
virtual BOOL FacesDeleted( BitArray& set ) = 0;
|
||||
|
||||
// Called when faces were deleted in the owner object. Returns TRUE on success
|
||||
// Allwos for a more efficient deletion of a range of data objects
|
||||
// than using a BitArray
|
||||
// ULONG from - index in the object's array of faces. Faces starting
|
||||
// from this index were deleted
|
||||
// ULONG num - number of faces that were deleted
|
||||
virtual BOOL FacesDeleted( ULONG from, ULONG num ) = 0;
|
||||
|
||||
// Called when all faces in the owner object are deleted
|
||||
virtual void AllFacesDeleted() = 0;
|
||||
|
||||
// Called when a face has been copied from index from in the owner object's
|
||||
// array of faces to the face at index to.
|
||||
// ULONG from - index of source face
|
||||
// ULONG to - index of dest face
|
||||
virtual BOOL FaceCopied( ULONG from, ULONG to ) = 0;
|
||||
|
||||
// Called when a new face has been created in the owner object based on
|
||||
// data interpolated from other faces
|
||||
// ULONG numSrc - the number of faces used in the interpolation
|
||||
// ULONG* srcFaces - array of numSrc face indeces in the owner object's
|
||||
// face array. These faces were used when creating the new face
|
||||
// float* coeff - array of numSrc coefficients used in the interpolation
|
||||
// ULONG targetFace - the index in the owner object's array of faces of the
|
||||
// newly created face
|
||||
virtual BOOL FaceInterpolated( ULONG numSrc,
|
||||
ULONG* srcFaces,
|
||||
float* coeff,
|
||||
ULONG targetFace ) = 0;
|
||||
|
||||
//
|
||||
// --- geometry pipeline (stack) specific methods ---
|
||||
//
|
||||
// These methods are called when the owner object is flowing up the
|
||||
// pipeline (stack). They must be implemented to ensure that the
|
||||
// face-data channel flows up the pipeline correctly.
|
||||
// The owner object expects the face-data to do exactly what the
|
||||
// names of these methods imply. These can be seen as commands that are
|
||||
// given by the owner object to the face-data channel
|
||||
|
||||
// Allocates an empty data-channel
|
||||
virtual IFaceDataChannel* CreateChannel( ) = 0;
|
||||
|
||||
// The data-channel needs to allocate a new instance of itself and fill it
|
||||
// with copies of all data items it stores.
|
||||
// This method exist to make it more efficient to clone the whole data-channel
|
||||
virtual IFaceDataChannel* CloneChannel( ) = 0;
|
||||
|
||||
// The data-channel needs to append the data objects in the fromChan
|
||||
// to itself.
|
||||
virtual BOOL AppendChannel( const IFaceDataChannel* fromChan ) = 0;
|
||||
};
|
||||
|
||||
// interface ID
|
||||
#define FACEDATACHANNEL_INTERFACE Interface_ID(0x181358d5, 0x3cab1bc9)
|
||||
#define GetFaceDataChannelInterface(obj) ((IFaceDataChannel*)obj->GetInterface(FACEDATACHANNEL_INTERFACE))
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Interface class that allows to execute a callback method (Proc) for all
|
||||
// face-data channels of an object.
|
||||
//
|
||||
// Developers should derive their own classes from this interface and
|
||||
// overwrite the Proc method to call the desired IFaceDataChannel method
|
||||
// It is up to derived class to interpret the context parameter passed to
|
||||
// Proc.
|
||||
//
|
||||
// --- Usage ---
|
||||
// Classes that hold face-data channels, can implement a method called
|
||||
// EnumFaceDataChannels( IFaceDataEnumCallBack& cb, void* pContext)
|
||||
// This method would be called with a reference to an instance of a class
|
||||
// derived from IFaceDataEnumCallBack in which Proc was overwritten. The
|
||||
// implementation of EnumFaceDataChannels would call cb.Proc for each of
|
||||
// the face-data channels of the object
|
||||
//
|
||||
// Warning:
|
||||
// Deleting data channels from within Proc can lead to unexpected behaviour
|
||||
//________________________________________________________________________
|
||||
class IFaceDataChannelsEnumCallBack
|
||||
{
|
||||
public:
|
||||
virtual BOOL Proc( IFaceDataChannel* pChan, void* pContext ) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user