76 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | 
