tge/lib/maxsdk31/RefArrayBase.h
2025-02-17 23:17:30 -06:00

76 lines
2.9 KiB
C++
Executable File

/**********************************************************************
*<
FILE: RefArrayBase.h
DESCRIPTION: A base class for implementing objects which need to maintain
multiple arrays of references. This implementation makes the following assumptions:
1) The arrays are implemented as Tab<RefTargetHandle>
CREATED BY: John Hutchinson
HISTORY: created 8/24/98
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#pragma once
#ifndef _REF_ARRAY_BASE
#define _REF_ARRAY_BASE
#include "object.h"
#include "Irefarray.h"
//SS 4/12/99: Now derives from ShapeObject; if your reference array only
// supports mesh geometry, override SuperClassID() and IsShapeObject().
class RefArrayBase : public ShapeObject, public IRefArray
{
public:
CoreExport virtual int NumRefCols() const; // the size of arrays (the same size!)
protected:
//From IRefArray
CoreExport virtual int TotalRefs() const;
CoreExport virtual IRefArray* Inner(){return NULL;} //Access to the containee
CoreExport virtual const IRefArray* Inner() const{return NULL;} //Access to the containee
CoreExport virtual int InnerArrays() const; //the number of arrays in any containee
CoreExport virtual int Remap(int row, int col) const; //Converts to linear, inner index
CoreExport virtual int ArrayOffset() const{return 0;} //The number of non-array references
CoreExport virtual bool IsSubArrayIndex(int i) const {return i< ArrayOffset();}
CoreExport virtual RefTargetHandle GetSubArrayReference(int i) {assert(0); return NULL;}
CoreExport virtual void SetSubArrayReference(int i, RefTargetHandle rtarg) {assert(0);}
//Local methods
CoreExport int LinearIndex(int row, int col);
public:
CoreExport RefArrayBase() : ShapeObject() {}
//From Animatable
CoreExport void * GetInterface(ULONG id)
{
if (id == I_REFARRAY)
return static_cast<IRefArray *>(this);
else
return GeomObject::GetInterface(id);
}
//From ReferenceMaker
CoreExport virtual int NumRefs();
CoreExport virtual RefTargetHandle GetReference(int i);
CoreExport virtual void SetReference(int i, RefTargetHandle rtarg);
//Referencemaker overloads
CoreExport virtual RefTargetHandle GetReference(int row, int col);
CoreExport virtual void SetReference(int row, int col, RefTargetHandle rtarg);
CoreExport virtual RefResult MakeRefByID(Interval refInterval, int row, int col, RefTargetHandle rtarg);
CoreExport virtual RefResult ReplaceReference(int row, int col, RefTargetHandle newtarg, BOOL delOld=TRUE);
CoreExport virtual RefResult DeleteReference(int row, int col);
CoreExport virtual BOOL CanTransferReference(int row, int col);
CoreExport virtual bool FindRef(RefTargetHandle rtarg, int& row, int& col);
CoreExport virtual void CloneRefs(ReferenceMaker *, RemapDir& remap);
};
#endif //_REF_ARRAY_BASE