/********************************************************************** FILE: IBlockRef.h DESCRIPTION: Public intefaces that defines the concept of block references CREATED BY: Attila Szabo, Discreet HISTORY: - created Aug 06, 2002 *> Copyright (c) 1998-2002, All Rights Reserved. **********************************************************************/ #ifndef _IBLOCKREF_H_ #define _IBLOCKREF_H_ #include "iFnPub.h" #include "maxtypes.h" // "Block" is a generic term for one or more objects that are combined // to create a single object. A set of combined objects stored in a block // table are called block definitions while a block reference is the object // that references a block definition and is inserted in the scene. //ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ // class IBlockRefComponent // // This interface models a component of a block reference //________________________________________________________________________ class IBlockRefComponent : public FPMixinInterface { public: // --- Operations on block components virtual const TCHAR* GetName() const = 0; // --- Block management virtual bool Add(IBlockRefComponent* component) = 0; virtual bool Remove(IBlockRefComponent* component) = 0; virtual unsigned long NumComponents() const = 0; virtual unsigned long GetComponents(Tab& components) const = 0; virtual void ExpandSelection(Tab& nodesToSelect) const = 0; // Returns true if an instance of this block component needs a selection // box displayed around it when selected. Otherwise returns false virtual bool IsSelectionBoxNeeded() const = 0; // --- Block data I/O virtual IOResult Save(ISave* isave) const = 0; virtual IOResult Load(ILoad* iload) = 0; }; // Interface ID #define BLOCKREF_COMPONENT_INTERFACE Interface_ID(0x7f1f2104, 0x7ab7322b) #define ADD_BLOCKREF_COMPONENT_INTERFACE Interface_ID(0x4c794c3a, 0x3a693dbb) #define REMOVE_BLOCKREF_COMPONENT_INTERFACE Interface_ID(0x379c7c13, 0x47a32e07) // Utilities: // Client code has to make nodes either block components. // This is accomplished by calling IBlockMgr::MakeBlockRefComponent on a node instance. inline IBlockRefComponent* GetBlockRefComponent(INode& n) { return static_cast(n.GetInterface(BLOCKREF_COMPONENT_INTERFACE)); } #endif //_IBLOCKREF_H_