83 lines
2.8 KiB
C++
Executable File
83 lines
2.8 KiB
C++
Executable File
/**********************************************************************
|
|
|
|
FILE: IBlockMgr.h
|
|
|
|
DESCRIPTION: Public interface for working with blocks (the same
|
|
concept as Autocad Blocks)
|
|
|
|
CREATED BY: Attila Szabo, Discreet
|
|
|
|
HISTORY: - created Aug 08, 2002
|
|
|
|
*> Copyright (c) 1998-2002, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef _IBLOCKMGR_H_
|
|
#define _IBLOCKMGR_H_
|
|
|
|
#include "iFnPub.h"
|
|
#include "maxtypes.h"
|
|
|
|
// --- Forward declaration
|
|
class IBlockRefComponent;
|
|
class INode;
|
|
|
|
// --- Interface IDs
|
|
#define BLOCK_MGR_INTERFACE Interface_ID(0x327d3c71, 0x542b7dac)
|
|
|
|
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
|
// class IBlockMgr
|
|
//
|
|
// This interface allows different parts of the system (max) and plugins
|
|
// to work with blocks
|
|
//
|
|
// Right now, it provides very limitted functionality, the plan being to
|
|
// extend it in the future as we identify functionality that can be factored
|
|
// out from FileLink into this object.
|
|
//________________________________________________________________________
|
|
class IBlockMgr : public FPStaticInterface
|
|
{
|
|
public:
|
|
// Checks whether a node is a block instance. If yes, the method it returns
|
|
// a pointer to the block interface.
|
|
// INode& n - is this node a block instance?
|
|
virtual IBlockRefComponent* IsInstance(INode& n) const = 0;
|
|
|
|
// Retrieves instances of a block.
|
|
// INode& source - The block whose instances are to be retrieved.
|
|
// INodeTab& instances - An array of nodes representing the instances the
|
|
// given block. This array is cleared before collection of instances
|
|
// starts. The original object is also included in this array since every
|
|
// object can be thought of as having at least one instance.
|
|
// Return value - The number of instances found. There's always at least 1 instance found
|
|
virtual unsigned long GetInstances(INode& source, INodeTab& instances) const = 0;
|
|
|
|
// Extends a node with a IBlockRefComponent interface.
|
|
// If the node is a block component already, it does nothing
|
|
virtual IBlockRefComponent* MakeBlockRefComponent(INode& n) const = 0;
|
|
|
|
// Removes the IBlockRefComponent interface from the node
|
|
virtual bool RemoveBlockRefComponent(INode& n) const = 0;
|
|
|
|
// Returns the top block of the component passed in as param.
|
|
virtual INode* GetTopBlock(INode& n) const = 0;
|
|
|
|
// For each block in the node array that has components,
|
|
// adds these components to the array of nodes to be selected
|
|
virtual void ExpandSelection(INodeTab& nodes) const = 0;
|
|
|
|
// --- File I/O
|
|
virtual IOResult Save(ISave* isave) const = 0;
|
|
virtual IOResult Load(ILoad* iload) = 0;
|
|
|
|
static IBlockMgr* GetBlockMgr()
|
|
{
|
|
return static_cast<IBlockMgr*>(GetCOREInterface(BLOCK_MGR_INTERFACE));
|
|
}
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif //_IBLOCKMGR_H_
|