69 lines
2.4 KiB
C++
Executable File
69 lines
2.4 KiB
C++
Executable File
/**********************************************************************
|
|
|
|
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<IBlockRefComponent*>& components) const = 0;
|
|
virtual void ExpandSelection(Tab<INode*>& 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<IBlockRefComponent*>(n.GetInterface(BLOCKREF_COMPONENT_INTERFACE));
|
|
}
|
|
|
|
|
|
#endif //_IBLOCKREF_H_
|