tge/lib/maxsdk70/include/iassembly.h
2017-04-17 06:17:10 -06:00

147 lines
5.1 KiB
C++
Executable File

/**********************************************************************
FILE: IAssembly.h
DESCRIPTION: Public interface for setting and getting assembly flags
CREATED BY: Attila Szabo, Discreet
HISTORY: - created April 03, 2001
*> Copyright (c) 1998-2000, All Rights Reserved.
**********************************************************************/
#ifndef __IASSEMBLY__H
#define __IASSEMBLY__H
#include "iFnPub.h"
#include "maxtypes.h"
// This type is not being used currently
typedef int AssemblyCode;
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// class IAssembly
//
// This interface allows for setting and retrieving assembly membership
// information to\from nodes. All methods of the interface are implemented
// by the system (Max).
// Client code can query an INode for this interface:
// INode* n;
// IAssembly* a = GetAssemblyInterface(n);
//________________________________________________________________________
class IAssembly : public FPMixinInterface
{
public:
//
// -- Methods for setting assembly flags
//
// NOTE: nodes can be both assembly members and heads in the same time.
// If b=TRUE, sets a node as an assembly member.
// If b=FALSE sets a closed or open assembly member as not an assembly member
// If the member is open, it closes it first then removes the member flag
// To close an assembly member, call SetAssemblyMemberOpen(FALSE)
virtual void SetAssemblyMember(BOOL b) = 0;
// Should only be called on assembly members
// If b=TRUE opens an assembly member
// If b=FALSE closes an assembly member
virtual void SetAssemblyMemberOpen(BOOL b) = 0;
// If b=TRUE sets a node as an assembly head
// If b=FALSE sets a closed or open assembly head as not an assembly head
// If the head is open, it closes it first then removes the head flag
// To close an assembly head, call SetAssemblyHeadOpen(FALSE)
virtual void SetAssemblyHead(BOOL b) = 0;
// Should only be called on assembly heads
// If b=TRUE opens an assembly head
// If b=FALSE closes an assembly head
virtual void SetAssemblyHeadOpen(BOOL b) = 0;
//
// -- Methods for querying the assembly flags
//
// NOTE: to detect closed assembly members\heads, check for both
// the assembly member\head flag and open member\head flags:
// IsAssemblyHead() && !IsAssemblyMemberOpen()
// Returns TRUE for both closed and open assembly members\heads
virtual BOOL IsAssemblyMember() const = 0;
virtual BOOL IsAssemblyHead() const = 0;
// Returns TRUE for open assembly members\heads
virtual BOOL IsAssemblyMemberOpen() const = 0;
virtual BOOL IsAssemblyHeadOpen() const = 0;
// This method is used for detecting assemblies in assemblies.
// The method checks if this assembly node is a head node and whether it's a
// member of the assembly head node passed in as parameter.
virtual BOOL IsAssemblyHeadMemberOf(const IAssembly* const assemblyHead) const = 0;
// Allow persistance of info kept in object implementing this interface
virtual IOResult Save(ISave* isave) = 0;
virtual IOResult Load(ILoad* iload) = 0;
// -- IAssembly function publishing
// Methods IDs
enum
{
E_SET_ASSEMBLY_MEMBER,
E_GET_ASSEMBLY_MEMBER,
E_SET_ASSEMBLY_HEAD,
E_GET_ASSEMBLY_HEAD,
E_SET_ASSEMBLY_MEMBER_OPEN,
E_GET_ASSEMBLY_MEMBER_OPEN,
E_SET_ASSEMBLY_HEAD_OPEN,
E_GET_ASSEMBLY_HEAD_OPEN,
};
};
// Assembly interface ID
#define ASSEMBLY_INTERFACE Interface_ID(0x2512714b, 0x4b456518)
inline IAssembly* GetAssemblyInterface(BaseInterface* baseIfc)
{ DbgAssert( baseIfc != NULL); return static_cast<IAssembly*>(baseIfc->GetInterface(ASSEMBLY_INTERFACE)); }
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// class IAssembly2
//
// This new version of the assembly interface extends IAssembly
// SDK programmers are encouraged to use this version of the assembly interface
//
// All methods of the interface are implemented by the system (Max).
// Client code can query an INode for this interface:
// INode* n;
// IAssembly2* a = GetAssemblyInterface2(n);
//________________________________________________________________________
class IAssembly2 : public IAssembly
{
public:
// Methods to control the display of assembly world
// bounding box of open assemblies, on a per assembly basis
// These methods should be called on assembly head nodes only
// If called on assembly member nodes, the display of the world
// bounding box won't get turned off.
virtual void SetAssemblyBBoxDisplay(BOOL b) = 0;
virtual BOOL GetAssemblyBBoxDisplay() = 0;
// -- IAssembly2 function publishing
// Methods IDs
enum
{
E_SET_ASSEMBLY_BBOX_DISPLAY = IAssembly::E_GET_ASSEMBLY_HEAD_OPEN + 1,
E_GET_ASSEMBLY_BBOX_DISPLAY,
};
};
#define ASSEMBLY_INTERFACE2 Interface_ID(0x6fd5515a, 0x353c6734)
inline IAssembly2* GetAssemblyInterface2(BaseInterface* baseIfc)
{ DbgAssert( baseIfc != NULL); return static_cast<IAssembly2*>(baseIfc->GetInterface(ASSEMBLY_INTERFACE2)); }
#endif