tge/lib/maxsdk31/FileLinkApi.h
2017-04-17 06:17:10 -06:00

148 lines
4.4 KiB
C++
Executable File

/*********************************************************************
*<
FILE: FileLinkApi.h
DESCRIPTION: File Link interface class
CREATED BY: Nikolai Sander
HISTORY: Created 29 January 1998
*> Copyright (c) 1997-1999, All Rights Reserved.
**********************************************************************/
#ifndef FILELINKAPI_H
#define FILELINKAPI_H
#include <maxtypes.h>
/******
Accessing the Link Table:
If you want your plugin to be able to access the IVizLinkTable interface
without incurring a load-time dependency, add the following function to
your plugin. With this, your plugin will load whether or not the
VizLink plugin is available.
// Returns NULL if the LinkTable plugin is not present on this system.
IVizLinkTable* GetLinkTable()
{
// Look for the LinkTable node in track view.
ITrackViewNode* tvRoot = GetCOREInterface()->GetTrackViewRootNode();
int i = tvRoot->FindItem(VIZLINKTABLE_CLASS_ID);
if (i < 0)
return NULL;
// Get the node's controller.
ITrackViewNode* tvNode = tvRoot->GetNode(i);
Control* pc = tvNode->GetController(VIZLINKTABLE_CLASS_ID);
if (pc == NULL)
return NULL;
// Call GetInterface to confirm that this is the proper instance.
return GetVizLinkTable(pc);
}
******/
#define VIZLINKTABLE_CLASS_ID Class_ID(0xa20bbe82, 0x70c763d)
#define I_VIZLINKCONTROLLER (I_USERINTERFACE+0x1739)
#define GetVizLinkTable(anim) ((IVizLinkTable*)anim->GetInterface(I_VIZLINKCONTROLLER))
#define kFILES_FORMAT -1
class VizLinkList;
class FormatRegistry;
class FormatFactory;
class LinkTableRecord;
class LinkedObjectsEnum;
class IFileLinkManager;
// Interface to the underlying implementation. Also designed as
// a Facade to the more complicated linking process.
//
class IVizLinkTable : public StdControl
{
public :
typedef int Iterator;
// Access to the UI driver.
virtual IFileLinkManager* GetFileLinkManager() = 0;
// If you pass in kFILES_FORMAT for the format argument, the format type will be
// determined from the filename.
virtual BOOL DoAttach(const TCHAR* filename,
int format = 0,
BOOL suppressPrompts = FALSE,
BOOL readOnly = TRUE) = 0;
virtual int NumLinkedFiles() const = 0;
virtual bool GetLinkID(int i, Iterator& iter) const = 0;
virtual bool DoReload(Iterator iter, BOOL suppressPrompts = FALSE) = 0;
virtual bool DoDetach(Iterator iter) = 0;
virtual bool DoBind(Iterator iter) = 0;
virtual LinkTableRecord* RecordAt(IVizLinkTable::Iterator id) = 0;
virtual bool ChangeLinkFile(Iterator iter, const TSTR& str) = 0;
// Auto-reload event handling.
protected:
friend class DBManUI;
// Only DBManUI can turn this on and off.
virtual void EnableAutoReload(bool enable) = 0;
public:
virtual void WaitForReloadThread() const = 0;
public:
// List updating notification.
virtual void RegisterForListUpdates(VizLinkList*) = 0;
virtual void UnregisterForListUpdates(VizLinkList*) = 0;
virtual void UpdateList() = 0;
// For iterating over all linked nodes.
virtual void EnumerateLinkedObjects(LinkedObjectsEnum* EnumProc) = 0;
// Linked splines can be rendered.
virtual void SetRenderSplines(BOOL b) = 0;
virtual BOOL GetRenderSplines() const = 0;
virtual BOOL SetSplineRenderThickness(float f) = 0;
virtual float GetSplineRenderThickness() const = 0;
virtual void SetGenUVs(BOOL b) = 0;
virtual BOOL GetGenUVs() const = 0;
virtual void SetShapeRenderFlags(Object *pObj) const = 0;
// If you are supporting a new format, register your factory class
// here.
virtual BOOL RegisterFactory(Class_ID& cid) = 0;
virtual FormatRegistry* Registry() = 0;
};
// This interface provides access to some of the link manager's functions.
class IFileLinkManager
{
public:
// Select a file, prompt for settings, and link the file.
virtual BOOL DoAttach(BOOL suppressPrompts = FALSE) = 0;
// Display the manager.
virtual void OpenFileLinkManager(Interface* ip) = 0;
// Enable/Disable the manager
virtual void EnableFileLinkManager(BOOL enable) = 0;
};
// If you have a list that you want dynamically updated whenever a
// linked file's status changes, derive your class from this, and
// implement the inherited method(s). For example, a utility plugin
// would derive from both UtilityObj and from VizLinkList.
class VizLinkList
{
public:
virtual void RefreshLinkedFileList() = 0;
};
#endif //FILELINKAPI_H