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

158 lines
7.4 KiB
C++
Executable File

/**********************************************************************
FILE: IADTStyle.h
DESCRIPTION: Public intefaces that defines the concept of ADT Styles
CREATED BY: Attila Szabo, Discreet
HISTORY: - created Sep 29, 2002
*> Copyright (c) 1998-2002, All Rights Reserved.
**********************************************************************/
#ifndef _IADTSTYLE_H_
#define _IADTSTYLE_H_
#include "iFnPub.h"
#include "maxtypes.h"
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// Forward declarations
class IADTCategory;
class BitArray;
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// class IADTStyle
//
// This interface models an ADT Style that can have components
// A number of ADT objects can be associated with the same style. These
// objects are reffered to as style instances. The components of these
// objects are associated with style components and are also reffered to as
// style instance.
//
// Once a style is created through the ADT Object Manager, instances of that
// style can be created and components can be added to it
// See iADTObjMgr for more details.
//________________________________________________________________________
class IADTStyle : public ReferenceTarget, public FPMixinInterface
{
public:
using ReferenceTarget::GetInterface;
typedef int InstIterator;
// Access to the name of the style. The name is not case sensitive.
virtual const TCHAR* GetName() const = 0;
virtual void SetName(const TCHAR* pName) = 0;
// Creates an instance of the desired style, by associating it with a node.
// If the node represents an instance of another style,
// that association will be destroyed first, and then a new one created.
// - INode& styleInst - The node that will represent an instance of this style
// - const bool hasCompVisOverride - A value of 'true' means that this particular
// style instance has the visibility of some of its components overriden, i.e.
// set to a different value than the visibility defined by the style for those
// components.
// - Returns an iterator that can be used later to get to this particular instance
// of this style. A negative value means failure, while a positive value means success
virtual InstIterator SetInstance(INode& styleInst, const bool hasCompVisOverride) = 0;
// Destroys the association between the given node and this style, and between
// the instances of the components of this style and their style components.
// To find out if a node is a style instance, call
// IADTStyle* IADTObjMgr::IsStyleInstance(INode& n) const;
// - INode& n - Node representing a style instance
// - Returns false if the node is not a style instance.
virtual bool RemoveInstance(INode& n) = 0;
// Adds a component to this style, and in the same time, creates an instance
// of the style component. This instance becomes a component of the style instance
// represented by the iterator. If the style already has a component with the given
// name, a new one won't be created. If the given node is already an instance
// of another style or style component, this operation changes that and makes
// it an instance of this style component.
// The style component names are case in-sensitive, thus if a component with
// this name exists aleady, an new one won't be created.
// - const Iterator& i - This iterator represents the style instance whose
// component we are creating
// - INode& styleCompInst - The node that will represent an instance of the
// style component
// - const TCHAR* pCompName - The name of the style component. Cannot be NULL.
// It's not case sensitive
// - const bool mtlOverride - A value of 'true' means that the material of this
// style component instance is different than that defined by the style component
// - const bool keepRelTransf - A value of 'true' means that the transform
// of the style component instance relative to the style instance should not be
// changed by this operation
// - Returns a pointer to the style component
virtual IADTStyle* SetComponent(const InstIterator& instIt,
INode& styleCompInst,
const TCHAR* pCompName,
const bool hasMtlOverride,
const bool keepRelTransf) = 0;
// A style component can be removed from a style if that style component
// has zero instances associated with it.
// - const TCHAR* pCompName - The name of the style component. Cannot be NULL.
// It's not case sensitive
// - Returns false if the component cannot be found or it still has instances
virtual bool RemoveComponent(const TCHAR* pCompName) = 0;
// Returns NULL if the style component does not exist
virtual IADTStyle* FindComponent(const TCHAR* pCompName) const = 0;
// TODO: style component iteration
virtual unsigned long NumComponents() const = 0;
virtual unsigned long GetComponents(Tab<IADTStyle*>& components) const = 0;
// Returns NULL if the Style doesn't belong to a category.
// This indicates an inconsistency in the scene
virtual IADTCategory* GetCategory() const = 0;
// If this style is a component of another style, it returns that style
// owtherwise itself
virtual IADTStyle* GetCompositeStyle() = 0;
// Returns the number of all nodes in the scene that represent instances of
// this style.
virtual unsigned long NumInstances() const = 0;
// Fills out the provided arrays with all the nodes in the scene that represent
// instances of this style and their material override flags. Returns their count
virtual unsigned long GetInstances(Tab<INode*>& instances, BitArray* pMtlOverrides = NULL) const = 0;
// Searches the instances of this style for a match with the provided style
// instance. If it finds it, returns the iterator withis this style to it,
// material and visibility override information for the style instance.
// - INode& styleInst - The alleged style instance to search for
// - bool* pMtlOverride - The material override flag for the instance
// - Returns an iterator to the found style instance. If the provided style
// instance is not an instance of this style, the iterator value will be
// negative.
virtual InstIterator FindInstance(INode& styleInst, bool* pMtlOverride = NULL) const = 0;
// Returns true if the given style instance needs a selection box displayed
// around it when selected
virtual bool IsSelectionBoxNeeded(INode& styleInst) const = 0;
// Creates a name that is unique among the names of all style components and it's
// based on the given name. The unique name is seeded by passing in a seed-name
// through the TSTR&
// - TSTR& - Input\Output parameter. As input parameter, it represents a seed
// for the the unique name. As output parameter, it holds the unique name that
// was generated
virtual void MakeUniqueComponentName(TSTR& name) const = 0;
};
#define ADT_STYLE_INTERFACE Interface_ID(0x4cd242c8, 0x554201b3)
inline IADTStyle* GetADTStyleInterface(BaseInterface* baseIfc)
{
DbgAssert( baseIfc != NULL);
return static_cast<IADTStyle*>(baseIfc->GetInterface(ADT_STYLE_INTERFACE));
}
#endif //_IADTSTYLE_H_