/********************************************************************* *< FILE: maxapi.h DESCRIPTION: These are functions that are exported from the 3DS MAX executable. CREATED BY: Rolf Berteig HISTORY: Created 28 November 1994 *> Copyright (c) 1994, All Rights Reserved. **********************************************************************/ #ifndef __MAXAPI__ #define __MAXAPI__ #include #include "cmdmode.h" #include "sceneapi.h" #include "rtclick.h" #include "evuser.h" #include "maxcom.h" #include "plugin.h" #include "log.h" #include "ActionTable.h" #include "iTreeVw.h" #include "iRenderPresets.h" #include "excllist.h" #include "DefaultActions.h" class ViewParams; class ModContext; class HitData; class HitLog; class CtrlHitLog; class MtlBase; class Mtl; class Texmap; class PickNodeCallback; class Renderer; class IScanRenderer; class RendParams; class IRenderElementMgr; class RendProgressCallback; class Bitmap; class BitmapInfo; class Texmap; class SoundObj; class GenCamera; class GenLight; class NameTab; class ShadowType; class MacroRecorder; class CommandLineCallback; #ifdef _OSNAP class IOsnapManager; class IOsnapManager7; class MouseManager; #endif class MtlBaseLib; class Atmospheric; class IRollupWindow; class ITrackViewNode; class DllDir; class Effect; class SpaceArrayCallback; class IMenuManager; class IColorManager; class Modifier; // RB: I didn't want to include render.h here #ifndef _REND_TYPE_DEFINED #define _REND_TYPE_DEFINED enum RendType { RENDTYPE_NORMAL, RENDTYPE_REGION, RENDTYPE_BLOWUP, RENDTYPE_SELECT, RENDTYPE_REGIONCROP, // The following 2 types are to be passed into plugin renderers. There purpos is for passing to // the function Interface::OpenCurRenderer, which converts them into RENDTYPE_REGION and RENDTYPE_REGIONCROP, resp. RENDTYPE_REGION_SEL, // do a region render using the bounding rectangle of the selection RENDTYPE_CROP_SEL, // do a crop render using the bounding rectangle of the selection RENDTYPE_BAKE_SEL, // bake textures on selected objects RENDTYPE_BAKE_ALL, // bake textures on all objects }; #endif // mjm - begin - 05.26.00 // used to define distinct sets of rendering parameters enum RenderSettingID { RS_Production = 0, RS_Draft, RS_IReshade, RS_MEdit // [dl | 15may2003] }; // mjm - end // This type describes the clone type when cloning nodes enum CloneType { NODE_COPY, NODE_INSTANCE, NODE_REFERENCE, NODE_NONE }; // values for dupAction, passed into MergeFromFile #define MERGE_DUPS_PROMPT 0 // prompt user when duplicate node names encountered #define MERGE_DUPS_MERGE 1 // merge new, keep old when duplicate node names encountered #define MERGE_DUPS_SKIP 2 // skip duplicates #define MERGE_DUPS_DELOLD 3 // delete old when duplicate node names encountered #define MERGE_LIST_NAMES 4 // Causes a list of objects in the file to be // placed into mrgList. No actual merging will be done. mergeAll must be TRUE. // added for r6.0 - 8/5/03 // values for dupMtlAction, passed into MergeFromFile #define MERGE_DUP_MTL_PROMPT 0 // prompt user when duplicate materials encountered #define MERGE_DUP_MTL_USE_MERGED MERGE_DUPS_DELOLD // use merged material #define MERGE_DUP_MTL_USE_SCENE MERGE_DUPS_SKIP // use scene material #define MERGE_DUP_MTL_RENAME 1000 // auto-rename merged material // values for reparentAction, passed into MergeFromFile #define MERGE_REPARENT_PROMPT 0 // prompt user when reparenting #define MERGE_REPARENT_ALWAYS 1 // always reparent #define MERGE_REPARENT_NEVER 2 // never reparent // ConvertFlagedNodesToXRefs() xflags bits #define XREF_AS_PROXY (1<<0) #define XREF_XREF_MODIFIERS 0 #define XREF_DROP_MODIFIERS (1<<1) #define XREF_MERGE_MODIFIERS (1<<2) #define XREF_MERGE_MANIPULATORS (1<<3) // CCJ: Property Set definitions // For internal reasons these must be bitflags #define PROPSET_SUMMARYINFO 0x01 #define PROPSET_DOCSUMMARYINFO 0x02 #define PROPSET_USERDEFINED 0x04 // Interface::Execute cmd values #define I_EXEC_ACTIVATE_TEXTURE 1 // arg1: Texmap *tx; arg2: Mtl *mtl; arg3: int subnum; #define I_EXEC_DEACTIVATE_TEXTURE 2 // arg1: Texmap *tx; arg2: Mtl *mtl; arg3: int subnum; #define I_EXEC_RENDER_MTL_SAMPLE 3 // arg1: MtlBase *mb; arg2: int size; arg3: UBYTE *image; returns 0:fail, 1: success #define I_EXEC_GET_VPDISPLAY_DIB 4 // arg1: Texmap *tx; arg2: TimeValue t; arg3: TexHandleMaker *thm; arg4: BOOL mono; // arg5: int forceW; arg6: int forceH -- returns *BITMAPINFO // added as complement to Interface::GetDir(), 020919 --prs. #define I_EXEC_SET_DIR 10 // arg1: int which; arg2: TCHAR *dir; #ifdef ACAD_MAXSCRIPT_EXTENSIONS #define I_EXEC_OFFSET_SPLINE 80 // arg1: INode *spline; arg2: float amount; #define I_EXEC_OFFSET_MEASURE 81 // arg1: INode *spline; arg2: Point3 *point; arg3: float *result; #define I_EXEC_TRIM_EXTEND 82 // arg1: INodeTab *all; arg2: INodeTab *act; //#define I_EXEC_REG_VIEWWINDOW2 85 // arg1: ViewWindow2* (deprecated) #endif #ifdef DESIGN_VER #define I_EXEC_SET_DISABLED_COLOR 84 // arg1: COLORREF #endif //SS 3/11/2002: Added to max to support Substitute modifier #define I_EXEC_NEW_OBJ_XREF_DLG 83 // arg1: INodeTab *nodes; arg2: BOOL forceSingle; #define I_EXEC_MODIFYTASK_INVALIDATEPANEL 86 //No Args // russom - 08/27/03 - ECO 1146 #define I_EXEC_INVALIDATE_VIEWEXP 87 // arg1: ViewExp *vp -- set invalidate flag on ViewExp*; arg2: BOOL Update all view related objects #define I_EXEC_SET_NUDGE 88 // arg1: BOOL bEnableNude -- Enable/Disable viewport arrow key nudge #define I_EXEC_COUNT_MTL_SCENEREFS 0x2001 // arg1 Mtl *mt: returns number of refs from scene // Interface::Execute return values #ifdef ACAD_MAXSCRIPT_EXTENSIONS #define I_EXEC_RET_NULL_NODE 1 #define I_EXEC_RET_NULL_OBJECT 2 #define I_EXEC_RET_NOT_SPLINE 3 #endif #define I_EXEC_RET_OFFSET_FAIL 4 class NameMaker { public: virtual void MakeUniqueName(TSTR &name)=0; virtual void AddName(TSTR &name) = 0; virtual BOOL NameExists(TSTR& name) = 0; virtual ~NameMaker() {} }; // Viewport degradation flags used by Interface7::RedrawViewportsNow #define VP_DEFAULT_RENDER 0x0000 // same as REDRAW_INTERACTIVE #define VP_DONT_RENDER 0x0001 #define VP_DONT_SIMPLIFY 0x0002 // same as REDRAW_NORMAL #define VP_START_SEQUENCE 0x0004 // same as REDRAW_BEGIN #define VP_END_SEQUENCE 0x0008 // same as REDRAW_END #define VP_SECOND_PASS 0x0010 // for when both back- and fore-ground is rendered // Viewport Rendering Levels #define SHADE_LEVELS 9 enum ShadeType { SMOOTH_HIGHLIGHT, SMOOTH, FACET_HIGHLITE, FACET, CONSTANT, LITE_WIREFRAME, Z_WIREFRAME, WIREFRAME, BOX, }; //JH 05/06/98 // VIEW_OTHER must be last, since "other" types are then numbered consecutively!!! // And the order can't be changed, or old MAX files won't load properly DB 11/98 enum ViewType { VIEW_LEFT,VIEW_RIGHT,VIEW_TOP,VIEW_BOTTOM,VIEW_FRONT,VIEW_BACK, VIEW_ISO_USER, VIEW_PERSP_USER, VIEW_CAMERA, VIEW_GRID, VIEW_NONE, VIEW_TRACK, VIEW_SPOT, VIEW_SHAPE, VIEW_SCHEMATIC, VIEW_RENDER, VIEW_OTHER}; // class for registering a window that can appear in a MAX viewport DB 10/6/98 class ViewWindow : public InterfaceServer { public: virtual TCHAR *GetName()=0; virtual HWND CreateViewWindow(HWND hParent, int x, int y, int w, int h)=0; virtual void DestroyViewWindow(HWND hWnd)=0; // CanCreate can be overridden to return FALSE if a ViewWindow can only have // a single instance, and that instance is already present. If CanCreate // returns FALSE, then the menu item for this ViewWindow will be grayed out. virtual BOOL CanCreate() { return TRUE; } // mep 7/12/99 // NumberCanCreate() returns the number of instances of a given window that // can be created. This allows, for example, the UI to know without physically // creating a window that only a limited number of windows of that type can // be created. A -1 implies that the count is not known. virtual int NumberCanCreate() { return -1; } }; //docking states for opening a trackview window static const int FLOAT_TRACKVIEW = 0; // float window. can't dock on top (the default) static const int DOCK_TRACKVIEW_TOP = 1; // dock on top static const int DOCK_TRACKVIEW_BOTTOM = 2; // dock on bottom. can't dock on top static const int CAN_DOCK_TRACKVIEW_TOP = 3; // floating but able to dock on top #define TRACKBAR_FILTER_ALL 1 #define TRACKBAR_FILTER_TMONLY 2 #define TRACKBAR_FILTER_CURRENTTM 3 #define TRACKBAR_FILTER_OBJECT 4 #define TRACKBAR_FILTER_MATERIAL 5 /// The TrackBar filter callback function /// **************************************************** /// The anim argument is the node you are filtering. /// The parent argument is the owning animatable. It returns the anim with its cooresponding subAnimIndex. /// anim == parent->SubAnim(subAnimIndex) /// The grandParent argument is provided as an additional layer that is needed in case the parent is a ParamBlock(2) or something similar. /// For instance you may need to know that the grandParent is a Bend modifier and the subAnimIndex is /// an index into the param block storage unit. /// The node argument is the originating scene node. /// Return true if the node should be included, otherswise return false. typedef bool (* TRACKBAR_FILTER_PROC)(Animatable* anim, Animatable* parent, int subAnimIndex, Animatable* grandParent, INode* node); /// The TrackBar filter addition callback function /// **************************************************** /// The anims argument is a Tab of the parent animatables to add /// The subAnims argument is a Tab of the SubAnim numbers. /// The actual animatable added will be anim = anims[i]->SubAnim(subAnims[i]) /// The node argument is the originating scene node. /// /// The anims, subAnims, and nodes Tab should all have the same count. /// Return true if the addition should occur or false if is should not. typedef bool (* TRACKBAR_ADDITION_PROC)(Tab &anims, Tab &subAnims, Tab &nodes); /// The ITrackBarFilterManager interface is implemented by the TrackBar. /// You can get an instance of this interface from the TrackBar using the following: /// ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)GetCOREInterface()->GetTrackBar()->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); #define TRACKBAR_FILTER_MANAGER_INTERFACE Interface_ID(0xc85046, 0x2def7c7d) class ITrackBarFilterManager : public BaseInterface { public: /// Register a new filter with the filter manager. This is usually done at startup, but does not have to be. /// callbackFilter or callbackAddition can be NULL /// The name is a UI displayable name. /// The ID is a unique ID so filters are not duplicated. /// If active is true the filter will be used to filter TrackBar key display. /// If stopTraversal is false. This filter will not filter out subAnims of the object is supports. virtual int RegisterFilter(TRACKBAR_FILTER_PROC callbackFilter, TRACKBAR_ADDITION_PROC callbackAddition, TSTR name, Class_ID filterID, bool active = false, bool stopTraversal = true)=0; /// Remove a registered filter from the filter manager. virtual void UnRegisterFilter(int index)=0; /// Remove a registered filter from the filter manager. virtual void UnRegisterFilter(Class_ID filterID) { for (int i = FilterCount()-1; i >=0; i--) { if (GetFilterID(i) == filterID) { UnRegisterFilter(i); break; } } } /// Returns the number of filters registered with the filter manager virtual int FilterCount()=0; /// Get a registered filter's ID. virtual Class_ID GetFilterID(int index)=0; /// Get a registered filter's Name. virtual TSTR GetFilterName(int index)=0; /// If the filter is active its Filter() method will be called once for /// each animatable visited by the TrackBar's traverser. virtual bool IsFilterActive(int index)=0; /// Activate or deactivate the filter. If active it will be used to filter the key display. virtual void SetFilterActive(int index, bool state)=0; private: friend class ITrackBar; /// MAXScript support through function publishing virtual int RegisterFilter(Value* callbackFilter, Value* callbackAddition, TSTR name, int id, bool active = false, bool stopTraversal = true)=0; }; #define TRACKBAR_INTERFACE Interface_ID(0x2aff3557, 0x16aa714b) // class for accessing the TrackBar (the Mini TrackView) class ITrackBar : public FPMixinInterface { public: virtual void SetVisible(BOOL bVisible) = 0; virtual BOOL IsVisible() = 0; virtual void SetFilter(UINT nFilter) = 0; virtual UINT GetFilter() = 0; virtual TimeValue GetNextKey(TimeValue tStart, BOOL bForward) = 0; virtual void RedrawTrackBar(bool bForce = false) = 0; virtual void SetShowFrames(bool b) = 0; virtual bool GetShowFrames() = 0; virtual void SetShowAudio(bool b) = 0; virtual bool GetShowAudio() = 0; virtual void SetShowSelectionRange(bool b) = 0; virtual bool GetShowSelectionRange() = 0; virtual void SetSnapToFrames(bool b) = 0; virtual bool GetSnapToFrames() = 0; virtual void SetKeyTransparency(int xp) = 0; virtual int GetKeyTransparency() = 0; virtual void SetSelKeyTransparency(int xp) = 0; virtual int GetSelKeyTransparency() = 0; virtual void SetCursorTransparency(int xp) = 0; virtual int GetCursorTransparency() = 0; //Function ID's for Function Publishing -- Added by AF (09/27/00) enum { fIdgetVisible, fIdsetVisible, fIdgetFilter, fIdsetFilter, fIdgetNextKeyTime, fIdgetPreviousKeyTime, fIdredrawTrackBar, fIdgetShowFrames, fIdsetShowFrames, fIdgetShowAudio, fIdsetShowAudio, fIdgetShowSelectionRange, fIdsetShowSelectionRange, fIdgetSnapToFrames, fIdsetSnapToFrames, fIdgetKeyTransparency, fIdsetKeyTransparency, fIdgetSelKeyTransparency, fIdsetSelKeyTransparency, fIdgetCursorTransparency, fIdsetCursorTransparency, fIdregisterFilter, fIdUnRegisterFilter, fIdFilterCount, fIdFilterID, fIdFilterName, fIdIsFilterActive, fIdSetFilterActive, }; //symbolic enum ID for Function Publishing enum {enumIDfilterType, }; //Function Publishing methods added by AF (9/27/00) BaseInterface* GetInterface(Interface_ID id) { return (id == TRACKBAR_INTERFACE) ? this : FPMixinInterface::GetInterface(id); } FPInterfaceDesc* GetDesc() { return (FPInterfaceDesc*)GetCOREInterface(TRACKBAR_INTERFACE); } // dispatch map for FP-published functions BEGIN_FUNCTION_MAP VFN_1(fIdredrawTrackBar, RedrawTrackBar, TYPE_bool); FNT_0(fIdgetNextKeyTime, TYPE_TIMEVALUE, fpGetNextKey); FNT_0(fIdgetPreviousKeyTime, TYPE_TIMEVALUE, fpGetPreviousKey); FN_6(fIdregisterFilter, TYPE_INDEX, fpRegisterFilter, TYPE_VALUE, TYPE_VALUE, TYPE_TSTR, TYPE_INT, TYPE_bool, TYPE_bool); VFN_1(fIdUnRegisterFilter, fpUnRegisterFilter, TYPE_INDEX); FN_0(fIdFilterCount, TYPE_INT, fpFilterCount); FN_1(fIdFilterID, TYPE_INT_TAB_BV, fpGetFilterID, TYPE_INDEX); FN_1(fIdFilterName, TYPE_TSTR_BV, fpGetFilterName, TYPE_INDEX); FN_1(fIdIsFilterActive, TYPE_bool, fpIsFilterActive, TYPE_INDEX); VFN_2(fIdSetFilterActive, fpSetFilterActive, TYPE_INDEX, TYPE_bool); PROP_FNS(fIdgetVisible, IsVisible, fIdsetVisible, SetVisible, TYPE_BOOL); PROP_FNS(fIdgetFilter, GetFilter, fIdsetFilter, SetFilter, TYPE_ENUM); PROP_FNS(fIdgetShowFrames, GetShowFrames, fIdsetShowFrames, SetShowFrames, TYPE_bool); PROP_FNS(fIdgetShowAudio, GetShowAudio, fIdsetShowAudio, SetShowAudio, TYPE_bool); PROP_FNS(fIdgetShowSelectionRange, GetShowSelectionRange, fIdsetShowSelectionRange, SetShowSelectionRange, TYPE_bool); PROP_FNS(fIdgetSnapToFrames, GetSnapToFrames, fIdsetSnapToFrames, SetSnapToFrames, TYPE_bool); PROP_FNS(fIdgetKeyTransparency, GetKeyTransparency, fIdsetKeyTransparency, SetKeyTransparency, TYPE_INT); PROP_FNS(fIdgetSelKeyTransparency, GetSelKeyTransparency, fIdsetSelKeyTransparency, SetSelKeyTransparency, TYPE_INT); PROP_FNS(fIdgetCursorTransparency, GetCursorTransparency, fIdsetCursorTransparency, SetCursorTransparency, TYPE_INT); END_FUNCTION_MAP private: //Private methods for Maxscript exposure -- Added by AF (09/27/00) TimeValue fpGetNextKey(TimeValue t) {return GetNextKey(t, TRUE);} TimeValue fpGetPreviousKey(TimeValue t) { return GetNextKey(t, FALSE);} int fpRegisterFilter(Value* callbackFilter, Value* callbackAddition, TSTR name, int id, bool active = false, bool stopTraversal = true) { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) return filterManager->RegisterFilter(callbackFilter, callbackAddition, name, id, active, stopTraversal); return -1; } void fpUnRegisterFilter(int index) { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) filterManager->UnRegisterFilter(index); } int fpFilterCount() { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) { return filterManager->FilterCount(); } return 0; } Tab fpGetFilterID(int index) { Tab ids; ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) { Class_ID id = filterManager->GetFilterID(index); int IDa = id.PartA(); int IDb = id.PartB(); ids.Append(1, &IDa); ids.Append(1, &IDb); } return ids; } TSTR fpGetFilterName(int index) { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) { return filterManager->GetFilterName(index); } return _T(""); } bool fpIsFilterActive(int index) { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) { return filterManager->IsFilterActive(index); } return false; } void fpSetFilterActive(int index, bool state) { ITrackBarFilterManager* filterManager = (ITrackBarFilterManager*)this->GetInterface(TRACKBAR_FILTER_MANAGER_INTERFACE); if (filterManager != NULL) filterManager->SetFilterActive(index, state); } }; // This class provides functions that expose the portions of View3D // that are exported for use by plug-ins. class ViewExp : public InterfaceServer { public: virtual Point3 GetPointOnCP(const IPoint2 &ps)=0; virtual Point3 SnapPoint(const IPoint2 &in, IPoint2 &out, Matrix3 *plane2d = NULL, DWORD flags = 0)=0; #ifdef _OSNAP virtual void SnapPreview(const IPoint2 &in, IPoint2 &out, Matrix3 *plane2d = NULL, DWORD flags = 0)=0; virtual void GetGridDims(float *MinX, float *MaxX, float *MinY, float *MaxY) = 0; #endif virtual float SnapLength(float in)=0; virtual float GetCPDisp(const Point3 base, const Point3& dir, const IPoint2& sp1, const IPoint2& sp2, BOOL snap = FALSE )=0; virtual GraphicsWindow *getGW()=0; virtual int IsWire()=0; virtual Rect GetDammageRect()=0; virtual Point3 MapScreenToView( IPoint2& sp, float depth )=0; virtual void MapScreenToWorldRay(float sx, float sy, Ray& ray)=0; // set the affine tm for the view and ret TRUE if the view is ISO_USER or PERSP_USER // else do nothing and return FALSE virtual BOOL SetAffineTM(const Matrix3& m)=0; virtual void GetAffineTM( Matrix3& tm )=0; virtual int GetViewType() = 0; virtual BOOL IsPerspView()=0; virtual float GetFOV()=0; virtual float GetFocalDist()=0; virtual float GetScreenScaleFactor(const Point3 worldPoint)=0; // return the viewPort screen width factor in world space at // a point in world space virtual float GetVPWorldWidth(const Point3 wPoint)=0; virtual Point3 MapCPToWorld(const Point3 cpPoint)=0; virtual void GetConstructionTM( Matrix3 &tm )=0; virtual void SetGridSize( float size )=0; virtual float GetGridSize()=0; virtual BOOL IsGridVisible()=0; virtual int GetGridType()=0; // Get the camera if there is one. virtual INode *GetViewCamera()=0; // Set this viewport to a camera view virtual void SetViewCamera(INode *camNode)=0; // Set this viewport to a user view virtual void SetViewUser(BOOL persp)=0; // Get the spot if there is one virtual INode *GetViewSpot()=0; // Set this viewport to a spotlight view virtual void SetViewSpot(INode *spotNode)=0; // node level hit-testing virtual void ClearHitList()=0; virtual INode *GetClosestHit()=0; virtual INode *GetHit(int i)=0; virtual int HitCount()=0; // subobject level hit-testing virtual void LogHit(INode *nr, ModContext *mc, DWORD dist, ulong info, HitData *hitdat = NULL)=0; virtual HitLog& GetSubObjHitList()=0; virtual void ClearSubObjHitList()=0; virtual int NumSubObjHits()=0; // For controller apparatus hit testing virtual void CtrlLogHit(INode *nr,DWORD dist,ulong info,DWORD infoExtra)=0; virtual CtrlHitLog& GetCtrlHitList()=0; virtual void ClearCtrlHitList()=0; virtual float NonScalingObjectSize()=0; // 1.0 is "default" // Turn on and off image background display virtual BOOL setBkgImageDsp(BOOL onOff)=0; virtual int getBkgImageDsp(void)=0; // Turn on and off safe frame display virtual void setSFDisplay(int onOff)=0; virtual int getSFDisplay(void)=0; // This is the window handle of the viewport. This is the // same window handle past to GetViewport() to get a ViewExp* virtual HWND GetHWnd()=0; // Test if the viewport is active virtual BOOL IsActive() = 0; // Test if the viewport is enabled virtual BOOL IsEnabled() = 0; //methods for floating grids virtual void TrackImplicitGrid(IPoint2 m, Matrix3* mat = NULL, ULONG hitTestFlags = 0) = 0; virtual void CommitImplicitGrid(IPoint2 m, int mouseflags, Matrix3* mat = NULL) = 0; virtual void ReleaseImplicitGrid() = 0; // Generic expansion function virtual INT_PTR_MSVC70 Execute(int cmd, ULONG_PTR arg1=0, ULONG_PTR arg2=0, ULONG_PTR arg3=0) { return 0; } }; // return values for CreateMouseCallBack #define CREATE_CONTINUE 1 #define CREATE_STOP 0 // creation terminated normally #define CREATE_ABORT -1 // delete the created object and node //JH 5/15/01 //return values for MouseCallback //Historically this method just returned 0 or 1 to indicate if processing should continue //Now we'll add a return value to indicate that the Mouse proc requires window capture #define MOUSE_STOP 0 #define MOUSE_CONTINUE 1 #define MOUSE_CAPTURE_CONTINUE 2 // This is a specific call-back proc for handling the creation process // of a plug-in object. // The vpt passed in will have had setTransform called with the // transform of the current construction plane. class CreateMouseCallBack { public: virtual int proc( ViewExp *vpt, int msg, int point, int flags, IPoint2 m, Matrix3& mat )=0; virtual int override(int mode) { return mode; } // Defaults to mode supplied // Tells the system that we aren't starting a new creation virtual BOOL StartNewCreation() { return TRUE; } //Tells the system if ortho mode makes sense for this creation //In general this won't be true but splines and such... virtual BOOL TolerateOrthoMode() { return FALSE; } }; class Object; class ConstObject; class MouseCallBack; class IObjCreate; class IObjParam; class ModContext; class ModContextList; class INodeTab; // Passed to getBkgFrameRange() #define VIEWPORT_BKG_START 0 #define VIEWPORT_BKG_END 1 // Passed to setBkgORType(). #define VIEWPORT_BKG_BLANK 0 #define VIEWPORT_BKG_HOLD 1 #define VIEWPORT_BKG_LOOP 2 // Passed to setBkgImageAspect() #define VIEWPORT_BKG_ASPECT_VIEW 0 #define VIEWPORT_BKG_ASPECT_BITMAP 1 #define VIEWPORT_BKG_ASPECT_OUTPUT 2 // Identify the transform tool buttons #define MOVE_BUTTON 1 #define ROTATE_BUTTON 2 #define NUSCALE_BUTTON 3 #define USCALE_BUTTON 4 #define SQUASH_BUTTON 5 #define SELECT_BUTTON 6 // Axis constraints. #define AXIS_XY 2 #define AXIS_ZX 1 #define AXIS_YZ 0 #define AXIS_X 3 #define AXIS_Y 4 #define AXIS_Z 5 // Origin modes #define ORIGIN_LOCAL 0 // Object's pivot #define ORIGIN_SELECTION 1 // Center of selection set (or center of individual object for local or parent space) #define ORIGIN_SYSTEM 2 // Center of the reference coord. system // Reference coordinate system #define COORDS_HYBRID 0 #define COORDS_SCREEN 1 #define COORDS_WORLD 2 #define COORDS_PARENT 3 #define COORDS_LOCAL 4 #define COORDS_OBJECT 5 #define COORDS_GIMBAL 6 // Task Modes #define TASK_MODE_CREATE 1 #define TASK_MODE_MODIFY 2 #define TASK_MODE_HIERARCHY 3 #define TASK_MODE_MOTION 4 #define TASK_MODE_DISPLAY 5 #define TASK_MODE_UTILITY 6 // Max cursors #define SYSCUR_MOVE 1 #define SYSCUR_ROTATE 2 #define SYSCUR_USCALE 3 #define SYSCUR_NUSCALE 4 #define SYSCUR_SQUASH 5 #define SYSCUR_SELECT 6 #define SYSCUR_DEFARROW 7 #define SYSCUR_MOVE_SNAP 8 // flags to pass to RedrawViews #define REDRAW_BEGIN (1<<0) #define REDRAW_INTERACTIVE (1<<1) #define REDRAW_END (1<<2) #define REDRAW_NORMAL (1<<3) // Return values for GetNumAxis() #define NUMAXIS_ZERO 0 // Nothing to transform #define NUMAXIS_ALL 1 // Use only one axis. #define NUMAXIS_INDIVIDUAL 2 // Do all, one at a time // MAX Directories #define APP_FONT_DIR 0 #define APP_SCENE_DIR 1 #define APP_IMPORT_DIR 2 #define APP_EXPORT_DIR 3 #define APP_HELP_DIR 4 #define APP_EXPRESSION_DIR 5 #define APP_PREVIEW_DIR 6 #define APP_IMAGE_DIR 7 #define APP_SOUND_DIR 8 #define APP_PLUGCFG_DIR 9 #define APP_MAXSTART_DIR 10 #define APP_VPOST_DIR 11 #define APP_DRIVERS_DIR 12 #define APP_AUTOBACK_DIR 13 #define APP_MATLIB_DIR 14 #define APP_SCRIPTS_DIR 15 #define APP_STARTUPSCRIPTS_DIR 16 #define APP_MARKETDEFAULTS_DIR 17 #define APP_RENDER_PRESETS_DIR 18 #ifndef RENDER_VER_CONFIG_PATHS // xavier robitaille | 03.01.24 | modify kahn's config. paths #define APP_UI_DIR 19 // this must be next to last!! #define APP_MAXROOT_DIR 20 // this must be last!! #else #define APP_PLUGCFG_CATALOGS_DIR 19 #define APP_UI_DIR 20 // this must be next to last!! #define APP_MAXROOT_DIR 21 // this must be last!! #endif // RENDER_VER_CONFIG_PATHS // Types for status numbers #define STATUS_UNIVERSE 1 #define STATUS_SCALE 2 #define STATUS_ANGLE 3 #define STATUS_OTHER 4 #define STATUS_UNIVERSE_RELATIVE 5 #define STATUS_POLAR 6 #define STATUS_POLAR_RELATIVE 7 // Extended display modes #define EXT_DISP_NONE 0 #define EXT_DISP_SELECTED (1<<0) // object is selected #define EXT_DISP_TARGET_SELECTED (1<<1) // object's target is selected #define EXT_DISP_LOOKAT_SELECTED (1<<2) // object's lookat node is selected #define EXT_DISP_ONLY_SELECTED (1<<3) // object is only thing selected #define EXT_DISP_DRAGGING (1<<4) // object is being "dragged" #define EXT_DISP_ZOOM_EXT (1<<5) // object is being tested for zoom ext #define EXT_DISP_GROUP_EXT (1<<6) // object is being tested for extents as member of group // Render time types passed to SetRendTimeType() #define REND_TIMESINGLE 0 #define REND_TIMESEGMENT 1 #define REND_TIMERANGE 2 #define REND_TIMEPICKUP 3 // Flag bits for hide by category. #define HIDE_OBJECTS 0x0001 #define HIDE_SHAPES 0x0002 #define HIDE_LIGHTS 0x0004 #define HIDE_CAMERAS 0x0008 #define HIDE_HELPERS 0x0010 #define HIDE_WSMS 0x0020 #define HIDE_SYSTEMS 0x0040 #define HIDE_PARTICLES 0x0080 #define HIDE_BONEOBJECTS 0x0100 #define HIDE_ALL 0xffff #define HIDE_NONE 0 // viewport layout configuration // VP_LAYOUT_ LEGEND // # is number of viewports (total) in view panel // V = vertical split // H = horizontal split // L/R = left/right placement // T/B = top/bottom placement // CONSTANT LEGEND // bottom nibble is total number of views #define VP_LAYOUT_1 0x0001 #define VP_LAYOUT_2V 0x0012 #define VP_LAYOUT_2H 0x0022 #define VP_LAYOUT_2HT 0x0032 #define VP_LAYOUT_2HB 0x0042 #define VP_LAYOUT_3VL 0x0033 #define VP_LAYOUT_3VR 0x0043 #define VP_LAYOUT_3HT 0x0053 #define VP_LAYOUT_3HB 0x0063 #define VP_LAYOUT_4 0x0074 #define VP_LAYOUT_4VL 0x0084 #define VP_LAYOUT_4VR 0x0094 #define VP_LAYOUT_4HT 0x00a4 #define VP_LAYOUT_4HB 0x00b4 #define VP_LAYOUT_1C 0x00c1 #define VP_NUM_VIEWS_MASK 0x000f // Node attribute flags used by Interface7::SetNodeAttribute #define ATTRIB_HIDE 0 #define ATTRIB_FREEZE 1 #define ATTRIB_BOXMODE 2 #define ATTRIB_BACKCULL 3 #define ATTRIB_ALLEDGES 4 #define ATTRIB_LINKDISP 5 #define ATTRIB_LINKREPL 6 #define ATTRIB_UNSEL 7 // for internal use only; something is not selected #define ATTRIB_HIDE_UNSEL 8 // for internal use only #define ATTRIB_FREEZE_UNSEL 9 // for internal use only #define ATTRIB_VERTTICKS 10 #define ATTRIB_UNHIDE 11 // for internal use only #define ATTRIB_UNFREEZE 12 // for internal use only #define ATTRIB_CVERTS 13 #define ATTRIB_SHADE_CVERTS 14 #define ATTRIB_XRAY 15 #define ATTRIB_IGNORE_EXT 16 #define ATTRIB_TRAJECTORY 17 // valid if DESIGN_VER #define ATTRIB_FRZMTL 18 #define ATTRIB_HIDE_WITH_LAYER 19 // used by MXS - also unhides layer if hidden #define ATTRIB_FREEZE_WITH_LAYER 20 // used by MXS - also unhides layer if hidden #define ATTRIB_INHERITVISIBILITY 100 #define ATTRIB_CASTSHADOWS 101 #define ATTRIB_RECEIVESHADOWS 102 #define ATTRIB_ISTARGET 103 #define ATTRIB_RENDERABLE 104 #define ATTRIB_RENDEROCCLUDED 105 #define ATTRIB_RCVCAUSTICS 106 #define ATTRIB_GENERATECAUSTICS 107 #define ATTRIB_RCVGLOBALILLUM 108 #define ATTRIB_GENERATEGLOBALILLUM 109 #define ATTRIB_SETWIRECOLOR 110 #define ATTRIB_SETGBUFID 111 #define ATTRIB_PRIMARYVISIBILITY 112 #define ATTRIB_SECONDARYVISIBILITY 113 #define ATTRIB_MOTIONBLUR 114 class DWORDTab : public Tab {}; // A callback object passed to Execute #define I_EXEC_REGISTER_POSTSAVE_CB 1001 #define I_EXEC_UNREGISTER_POSTSAVE_CB 1002 #define I_EXEC_REGISTER_PRESAVE_CB 1003 #define I_EXEC_UNREGISTER_PRESAVE_CB 1004 class GenericCallback { public: virtual void Callme()=0; }; // A callback object passed to RegisterTimeChangeCallback() class TimeChangeCallback { public: virtual void TimeChanged(TimeValue t)=0; }; // A callback object passed to RegisterCommandModeChangeCallback() class CommandModeChangedCallback { public: virtual void ModeChanged(CommandMode *oldM, CommandMode *newM)=0; }; // A callback to allow plug-ins that aren't actually objects (such as utilities) // to draw something in the viewports. class ViewportDisplayCallback { public: virtual void Display(TimeValue t, ViewExp *vpt, int flags)=0; virtual void GetViewportRect( TimeValue t, ViewExp *vpt, Rect *rect )=0; virtual BOOL Foreground()=0; // return TRUE if the object changes a lot or FALSE if it doesn't change much }; // A callback object that will get called before the program exits. class ExitMAXCallback { public: // MAX main window handle is passed in. Return FALSE to abort // the exit, TRUE otherwise. virtual BOOL Exit(HWND hWnd)=0; }; class MAXFileOpenDialog { public: virtual BOOL BrowseMAXFileOpen(TSTR& fileName, TSTR* defDir, TSTR* defFile) = 0; }; class MAXFileSaveDialog { public: virtual BOOL BrowseMAXFileSave(TSTR& fileName) = 0; }; // A callback object to filter selection in the track view. class TrackViewFilter : public InterfaceServer{ public: // Return TRUE to accept the anim as selectable. virtual BOOL proc(Animatable *anim, Animatable *client, int subNum)=0; virtual BOOL TextColor(Animatable *anim, Animatable *client, int subNum, COLORREF& color) { return FALSE; } }; // Stores the result of a track view pick class TrackViewPick { public: ReferenceTarget *anim; ReferenceTarget *client; int subNum; TrackViewPick() {anim=NULL;client=NULL;subNum=0;} }; // A callback object passed to SetPickMode() class PickModeCallback : public InterfaceServer { public: // Called when ever the pick mode needs to hit test. Return TRUE if something was hit virtual BOOL HitTest(IObjParam *ip,HWND hWnd,ViewExp *vpt,IPoint2 m,int flags)=0; // Called when the user picks something. The vpt should have the result of the hit test in it. // return TRUE to end the pick mode. virtual BOOL Pick(IObjParam *ip,ViewExp *vpt)=0; //Called when a node or controller is picked from Trackview or Schematic view //return TRUE if the Pick Mode callback accepts the animatable object. //the track will not be selected in trackview if the this function returns FALSE virtual BOOL PickAnimatable(Animatable* anim) { return TRUE; } // Called when the user right-clicks or presses ESC // return TRUE to end the pick mode, FALSE to continue picking virtual BOOL RightClick(IObjParam *ip,ViewExp *vpt) { return FALSE; } // Called when the mode is entered and exited. virtual void EnterMode(IObjParam *ip) {} virtual void ExitMode(IObjParam *ip) {} virtual HCURSOR GetDefCursor(IObjParam *ip) {return NULL;} virtual HCURSOR GetHitCursor(IObjParam *ip) {return NULL;} // If the user hits the H key while in your pick mode, you // can provide a filter to filter the name list. virtual PickNodeCallback *GetFilter() {return NULL;} // Return TRUE to allow the user to pick more than one thing. // In this case the Pick method may be called more than once. virtual BOOL AllowMultiSelect() {return FALSE;} }; // Not to be confused with a PickMODEcallback... // Used to filter node's during a hit test (PickNode) class PickNodeCallback { public: // Return TRUE if this is an acceptable hit, FALSE otherwise. virtual BOOL Filter(INode *node)=0; }; // Used with DoHitByNameDialog(); class HitByNameDlgCallback { public: virtual TCHAR *dialogTitle() { return _T(""); } virtual TCHAR *buttonText() { return _T(""); } virtual BOOL singleSelect() { return FALSE; } virtual BOOL useFilter() { return TRUE; } virtual int filter(INode *node) { return TRUE; } virtual BOOL useProc() { return TRUE; } virtual void proc(INodeTab &nodeTab) {} virtual BOOL doCustomHilite() { return FALSE; } virtual BOOL doHilite(INode *node) { return FALSE; } virtual BOOL showHiddenAndFrozen() { return FALSE; } }; //watje new selection filters //this is a call back for the selection filter drop down in the tab panel //it allows plugins and maxscripts to add additional filters to this list class SelectFilterCallback : public InterfaceServer { public: virtual TCHAR* GetName() = 0; // the name that will appear in the drop down list when it is registered //the actual proc that does the filtering // the node, class id, and super class id are passed as parameter to check the filter again //return FALSE if the node is not selectable, true if it is selectable virtual BOOL IsFiltered(SClass_ID sid, Class_ID cid, INode *node) = 0; }; //watje new display filters //this is a call back for the display filter list in the display command panel //it allows plugins and maxscripts to add additional filters to this list class DisplayFilterCallback : public InterfaceServer { public: BOOL on; virtual TCHAR* GetName() = 0; // the name that will appear in the drop down list when it is registered //the actual proc that does the filtering // the node, class id, and super class id are passed as parameter to check the filter again //return FALSE if the node is not selectable, true if it is selectable virtual BOOL IsVisible(SClass_ID sid, Class_ID cid, INode *node) = 0; }; class Interface; // A callback used with RegisterRedrawViewsCallback() class RedrawViewsCallback { public: // this will be called after all the viewport have completed drawing. virtual void proc(Interface *ip)=0; }; // A callback used with RegisterAxisChangeCallback() class AxisChangeCallback { public: // this will be called when the axis system is changed virtual void proc(Interface *ip)=0; }; // parameters for creation of a preview class PreviewParams { public: BOOL outputType; // 0=default AVI codec, 1=user picks file, 2=user picks device int pctSize; // percent (0-100) of current rendering output res // frame limits int start; int end; int skip; // frame rate int fps; // display control BOOL dspGeometry; BOOL dspShapes; BOOL dspLights; BOOL dspCameras; BOOL dspHelpers; BOOL dspSpaceWarps; BOOL dspGrid; BOOL dspSafeFrame; BOOL dspFrameNums; // rendering level int rndLevel; // 0=smooth/hi, 1=smooth, 2=facet/hi, 3=facet // 4=lit wire, 6=wire, 7=box int dspBkg; }; // Viewport transparency rendering modes #define VPT_TRANS_NONE 0 #define VPT_TRANS_STIPPLE 1 #define VPT_TRANS_BLEND 2 #define VPT_TRANS_SORT_BLEND 3 // Scene Display Flags #define DISPLAY_WIRE_AS_MTL 1 #define DISPLAY_SHADED_AS_MTL (1<<1) #define DISPLAY_SELECTED_ONLY (1<<2) // flag values for TrackViewPickMultiDlg and TrackViewPickDlg #define PICKTRACK_FLAG_ANIMATED (1<<0) /*-- turn on display of animated tracks only--*/ #define PICKTRACK_FLAG_VISTRACKS (1<<1) /*-- turn off display of node Visibility track--*/ #define PICKTRACK_FLAG_SELOBJECTS (1<<2) /*-- turn on display of only selected nodes--*/ #define PICKTRACK_FLAG_WORLDMODS (1<<3) /*-- turn off display of World Space Modifiers--*/ #define PICKTRACK_FLAG_OBJECTMODS (1<<4) /*-- turn off display of Object Space Modifiers--*/ #define PICKTRACK_FLAG_TRANSFORM (1<<5) /*-- turn off display of node Transform track--*/ #define PICKTRACK_FLAG_BASEPARAMS (1<<6) /*-- turn off display of node base object--*/ #define PICKTRACK_FLAG_CONTTYPES (1<<7) /*-- turn off display of controller types--*/ #define PICKTRACK_FLAG_NOTETRACKS (1<<8) /*-- turn off display of note tracks--*/ #define PICKTRACK_FLAG_SOUND (1<<9) /*-- turn off display of the sound track--*/ #define PICKTRACK_FLAG_MATMAPS (1<<10) /*-- turn off display of maps in materials--*/ #define PICKTRACK_FLAG_MATPARAMS (1<<11) /*-- turn off display of material parameters--*/ #define PICKTRACK_FLAG_VISIBLE_OBJS (1<<12) /*-- turn on display of hidden nodes--*/ #define PICKTRACK_FLAG_HIERARCHY (1<<13) /*-- turn off display of hierarchy--*/ #define PICKTRACK_FLAG_KEYABLE (1<<14) /*-- turn off display of non-keyable tracks--*/ #define PICKTRACK_FLAG_NODES (1<<15) /*-- turn off display of nodes--*/ #define PICKTRACK_FLAG_GEOM (1<<16) /*-- turn off display of geometry nodes--*/ #define PICKTRACK_FLAG_SHAPES (1<<17) /*-- turn off display of shape nodes--*/ #define PICKTRACK_FLAG_LIGHTS (1<<18) /*-- turn off display of light nodes--*/ #define PICKTRACK_FLAG_CAMERAS (1<<19) /*-- turn off display of camera nodes--*/ #define PICKTRACK_FLAG_HELPERS (1<<20) /*-- turn off display of helper nodes--*/ #define PICKTRACK_FLAG_WARPS (1<<21) /*-- turn off display of warp nodes--*/ #define PICKTRACK_FLAG_POSITION (1<<22) /*-- turn off display of position controllers--*/ #define PICKTRACK_FLAG_ROTATION (1<<23) /*-- turn off display of rotation controllers--*/ #define PICKTRACK_FLAG_SCALE (1<<24) /*-- turn off display of scale controllers--*/ #define PICKTRACK_FLAG_BONES (1<<25) /*-- turn off display of bone nodes--*/ #define PICKTRACK_FLAG_FOCUS_SEL_NODES (1<<26) /*-- set focus to first selected node found--*/ #define MAIN_MAX_INTERFACE Interface_ID(0x64854123, 0x7b9e551c) // Generic interface into Max class Interface : public FPStaticInterface { public: virtual HFONT GetAppHFont()=0; virtual void RedrawViews(TimeValue t,DWORD vpFlags=REDRAW_NORMAL, ReferenceTarget *change=NULL)=0; virtual BOOL SetActiveViewport(HWND hwnd)=0; virtual ViewExp *GetActiveViewport()=0; // remember to release ViewExp* with ReleaseViewport() virtual IObjCreate *GetIObjCreate()=0; virtual IObjParam *GetIObjParam()=0; virtual HWND GetMAXHWnd()=0; // This will cause all viewports to be completely redrawn. // This is extremely heavy handed and should only be used when // necessary. virtual void ForceCompleteRedraw(BOOL doDisabled=TRUE)=0; // This will draw the active view (if it is a camera view with a multi-pass effect // enabled) with that effect active. Returns TRUE if the active view is a camera view // with a multi-pass effect enabled, FALSE otherwise virtual BOOL DisplayActiveCameraViewWithMultiPassEffect() = 0; // Determines the way transparency will be displayed in the active viewport, based on transType setting // VPT_TRANS_NONE => all objects are always opaque // VPT_TRANS_STIPPLE => use screendoor transparency // VPT_TRANS_BLEND => use hardware blending, based on drawing transparent objects last virtual BOOL SetActiveViewportTransparencyDisplay(int transType) = 0; // Turn scene redraw on/off. Each call to disable redraw should be // matched by a call to enable it, since this is implemented with an // internal counter. This can be used to stop scene redraws from // happening during rendering, for example. virtual void DisableSceneRedraw()=0; virtual void EnableSceneRedraw()=0; virtual int IsSceneRedrawDisabled()=0; // returns non-zero if disabled // Register a call back object that gets called evrytime // the viewports are redrawn. virtual void RegisterRedrawViewsCallback(RedrawViewsCallback *cb)=0; virtual void UnRegisterRedrawViewsCallback(RedrawViewsCallback *cb)=0; //watje new selection filters //these work just like all the other register callback function //except they are used to register filter selection call backs virtual void RegisterSelectFilterCallback(SelectFilterCallback *cb)=0; virtual void UnRegisterSelectFilterCallback(SelectFilterCallback *cb)=0; //watje new display filters //these work just like all the other register callback function //except they are used to register display selection call backs virtual void RegisterDisplayFilterCallback(DisplayFilterCallback *cb)=0; virtual void UnRegisterDisplayFilterCallback(DisplayFilterCallback *cb)=0; // set the selection type to automatic window/crossing (based on dir, as set by 2nd arg), // or to manual window/crossing (based on second arg) // // if autoWinCross is TRUE, then Window/Crossing is chosen by direction // if winCrossOrAutoDir is set to AC_DIR_RL_CROSS, then right-to-left implies crossing // if winCrossOrAutoDir is set to AC_DIR_LR_CROSS, then left-to-right implies crossing // if autoWinCross is FALSE, then Window/Crossing is set explicitly, as follows: // if winCrossOrAutoDir is TRUE, then you get crossing selection // if winCrossOrAutoDir is FALSE, then you get window selection virtual BOOL SetSelectionType(BOOL autoWinCross, int winCrossOrAutoDir) = 0; // For use with extended views: // - make the extended viewport active (set on mouse click, for example) // - put up the view type popup menu (put up on right-click, for example) virtual void MakeExtendedViewportActive(HWND hWnd)=0; virtual void PutUpViewMenu(HWND hWnd, POINT pt)=0; // Execute a track view pick dialog. virtual BOOL TrackViewPickDlg(HWND hParent, TrackViewPick *res, TrackViewFilter *filter=NULL, DWORD flags=0)=0; //watje virtual BOOL TrackViewPickMultiDlg(HWND hParent, Tab *res, TrackViewFilter *filter=NULL,DWORD flags=0)=0; // Command mode methods virtual void PushCommandMode( CommandMode *m )=0; virtual void SetCommandMode( CommandMode *m )=0; virtual void PopCommandMode()=0; virtual CommandMode* GetCommandMode()=0; virtual void SetStdCommandMode( int cid )=0; virtual void PushStdCommandMode( int cid )=0; virtual void RemoveMode( CommandMode *m )=0; virtual void DeleteMode( CommandMode *m )=0; // This will set the command mode to a standard pick mode. // The callback implements hit testing and a method that is // called when the user actually pick an item. virtual void SetPickMode(PickModeCallback *pc)=0; // makes sure no pick modes are in the command stack. virtual void ClearPickMode()=0; //added by AF (08/18/2000) //if a Pick Mode is on top of the command stack this function will return it //otherwise it returns NULL virtual PickModeCallback* GetCurPickMode()=0; // Puts up a hit by name dialog. If the callback is NULL it // just does a standard select by name. // returns TRUE if the user OKs the dialog, FALSE otherwise. virtual BOOL DoHitByNameDialog(HitByNameDlgCallback *hbncb=NULL)=0; // status panel prompt stuff virtual void PushPrompt( TCHAR *s )=0; virtual void PopPrompt()=0; virtual void ReplacePrompt( TCHAR *s )=0; virtual void DisplayTempPrompt( TCHAR *s, int msec=1000)=0; virtual void RemoveTempPrompt()=0; // put up a directory choose dialog // hWnd = parent // title is dialog box title // dir is return value for chosen dir (empty on cancel) // desc, if non-null, puts up a description field and returns new desc. virtual void ChooseDirectory(HWND hWnd, TCHAR *title, TCHAR *dir, TCHAR *desc=NULL)=0; // auto-backup control -- times are in minutes virtual float GetAutoBackupTime()=0; virtual void SetAutoBackupTime(float minutes)=0; virtual BOOL AutoBackupEnabled()=0; virtual void EnableAutoBackup(BOOL onOff)=0; // status panel progress bar virtual BOOL ProgressStart(TCHAR *title, BOOL dispBar, LPTHREAD_START_ROUTINE fn, LPVOID arg)=0; virtual void ProgressUpdate(int pct, BOOL showPct = TRUE, TCHAR *title = NULL)=0; virtual void ProgressEnd()=0; virtual BOOL GetCancel()=0; virtual void SetCancel(BOOL sw)=0; // create preview from active view. // If pvp is NULL, this uses the parameters from the preview rendering dialog box. virtual void CreatePreview(PreviewParams *pvp=NULL)=0; // Some info about the current grid settings virtual float GetGridSpacing()=0; virtual int GetGridMajorLines()=0; // Write values to x,y,z status boxes. Before doing this, mouse // tracking must be disabled. Typically a plug-in would disable // mouse tracking on mouse down and enable it on mouse up. virtual void DisableStatusXYZ()=0; virtual void EnableStatusXYZ()=0; virtual void SetStatusXYZ(Point3 xyz,int type)=0; virtual void SetStatusXYZ(AngAxis aa)=0; // this will convert the aa for status display // Extended display modes (such as camera cones that only appear when dragging a camera) virtual void SetExtendedDisplayMode(int flags)=0; virtual int GetExtendedDisplayMode()=0; // UI flyoff timing virtual void SetFlyOffTime(int msecs)=0; virtual int GetFlyOffTime()=0; // Get standard Max cursors. virtual HCURSOR GetSysCursor( int id )=0; // Turn on or off a cross hair cursor which draws horizontal and vertical // lines the size of the viewport's width and height and intersect at // the mouse position. virtual void SetCrossHairCur(BOOL onOff)=0; virtual BOOL GetCrossHairCur()=0; // This pops all modes above the create or modify mode. // NOTE: This is obsolete with the new modifiy panel design. virtual void RealizeParamPanel()=0; // Snap an angle value (in radians) virtual float SnapAngle(float angleIn, BOOL fastSnap=TRUE, BOOL forceSnap=FALSE)=0; // Snap a percentage value (1.0 = 100%) virtual float SnapPercent(float percentIn)=0; // Get the snap switch state virtual BOOL GetSnapState()=0; // Get the snap type -- Absolute or Relative (grid.h) virtual int GetSnapMode()=0; // Set the snap mode -- Set to absolute will fail if not in screen space // Returns TRUE if succeeded virtual BOOL SetSnapMode(int mode)=0; // Hit tests the screen position for nodes and returns a // INode pointer if one is hit, NULL otherwise. virtual INode *PickNode(HWND hWnd,IPoint2 pt,PickNodeCallback *filt=NULL)=0; // Region hit testing. To access the result, use the ViewExp funtions // GetClosestHit() or GetHit(). virtual void BoxPickNode(ViewExp *vpt,IPoint2 *pt,BOOL crossing,PickNodeCallback *filt=NULL)=0; virtual void CirclePickNode(ViewExp *vpt,IPoint2 *pt,BOOL crossing,PickNodeCallback *filt=NULL)=0; virtual void FencePickNode(ViewExp *vpt,IPoint2 *pt,BOOL crossing,PickNodeCallback *filt=NULL)=0; //----- Modify-related Methods-------------------------- // Registers the sub-object types for a given plug-in object type. // This method is obsolete for the modifiy panel from 3DS MAX 4 on. // All subobject types have to be registered through the new methods // BaseObject::NumSubObjTypes() and BaseObject::GetSubObjType(int i). // This method is still working for motion panel subobject types. // Please check the SDK help file for more information. virtual void RegisterSubObjectTypes( const TCHAR **types, int count, int startIndex = 0)=0; // Add sub-object named selection sets the named selection set drop down. // This should be done whenever the selection level changes. virtual void AppendSubObjectNamedSelSet(const TCHAR *set)=0; // Clear the named selections from the drop down. virtual void ClearSubObjectNamedSelSets()=0; // Clears the edit field of the named selection set drop down virtual void ClearCurNamedSelSet()=0; // Sets the edit field of the named selection set drop down virtual void SetCurNamedSelSet(TCHAR *setName)=0; // new for V2... tell the system that the named sets have changed at // that the drop down needs to be rebuilt. virtual void NamedSelSetListChanged()=0; // Returns the state of the sub object drop-down. 0 is object level // and >= 1 refer to the levels registered by the object. virtual int GetSubObjectLevel()=0; // Sets the sub-object drop down. This will cause the object being edited // to receive a notification that the current subobject level has changed. // if force == TRUE, the it will set the level even if the current // level is the same as the level requested. This is to support // objects that change sub-object levels on the fly, like NURBS virtual void SetSubObjectLevel(int level, BOOL force = FALSE)=0; // Returns the number of entries in the sub-object drop down list. virtual int GetNumSubObjectLevels()=0; // Enables or disables sub object selection. Note that it // will already be disabled if there are no subobject levels // registered. In this case, it can not be enabled. virtual void EnableSubObjectSelection(BOOL enable)=0; virtual BOOL IsSubObjectSelectionEnabled()=0; // Notifies the system that the selection level in the pipeline has chaned. virtual void PipeSelLevelChanged()=0; // Returns the sub-object selection level at the point in the // pipeline just before the current place in the history. virtual void GetPipelineSubObjLevel(DWORDTab &levels)=0; // Get's all instance contexts for the modifier at the current // place in the history. virtual void GetModContexts(ModContextList& list, INodeTab& nodes)=0; // Get the object (or modifier) that is currently being edited in the // modifier panel virtual BaseObject* GetCurEditObject()=0; // Hit tests the object currently being edited at the sub object level. virtual int SubObHitTest(TimeValue t, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt)=0; // Is the selection set frozen? virtual BOOL SelectionFrozen()=0; virtual void FreezeSelection()=0; virtual void ThawSelection()=0; // Nodes in the current selection set. virtual INode *GetSelNode(int i)=0; virtual int GetSelNodeCount()=0; // Enable/disable, get/set show end result. virtual void EnableShowEndResult(BOOL enabled)=0; virtual BOOL GetShowEndResult ()=0; virtual void SetShowEndResult (BOOL show)=0; // Returns the state of the 'crossing' preference for hit testing. virtual BOOL GetCrossing()=0; // Sets the state of one of the transform tool buttons. // TRUE indecates pressed, FALSE is not pressed. virtual void SetToolButtonState(int button, BOOL state )=0; virtual BOOL GetToolButtonState(int button)=0; virtual void EnableToolButton(int button, BOOL enable=TRUE )=0; // Enable and disable Undo/Redo. virtual void EnableUndo(BOOL enable)=0; // Get and set the command panel task mode virtual int GetCommandPanelTaskMode()=0; virtual void SetCommandPanelTaskMode(int mode)=0; // Finds the vpt given the HWND virtual ViewExp *GetViewport( HWND hwnd )=0; virtual void ReleaseViewport( ViewExp *vpt )=0; // Disables/Enables animate button virtual void EnableAnimateButton(BOOL enable)=0; virtual BOOL IsAnimateEnabled()=0; // Turns the animate button on or off virtual void SetAnimateButtonState(BOOL onOff)=0; // In some simpulation task, a time sequence of matrices are computed // and to be set to node via // INode::SetNodeTM(TimeValue t, Matrix3& tm). If the node // employs the standard PRS controller and the rotation is the // standard Euler XYZ controller, it would achieve better animation // result if we decides euler angles at this frame based on those at // the previous frame. The Progressive Mode tells the Euler // controller to derive angles based on the previous frame. // It is assumed that in this mode, SetNodeTM() are called // in strictly forward time order. // Synoposis: // GetCOREInterface()->BeginProgressiveMode(); // for (t = start_time, t < end_time; t += time_per_frame) { // node.SetNodeTM(t, tm_at_t); // } // GetCOREInterface()->EndProgressiveMode(); // virtual bool InProgressiveMode() =0; virtual void BeginProgressiveMode() =0; virtual void EndProgressiveMode() =0; // Registers a callback that gets called whenever the axis // system is changed. virtual void RegisterAxisChangeCallback(AxisChangeCallback *cb)=0; virtual void UnRegisterAxisChangeCallback(AxisChangeCallback *cb)=0; // Gets/Sets the state of the axis constraints. virtual int GetAxisConstraints()=0; virtual void SetAxisConstraints(int c)=0; virtual void EnableAxisConstraints(int c,BOOL enabled)=0; // An axis constraint stack virtual void PushAxisConstraints(int c) = 0; virtual void PopAxisConstraints() = 0; // Gets/Sets the state of the coordinate system center virtual int GetCoordCenter()=0; virtual void SetCoordCenter(int c)=0; virtual void EnableCoordCenter(BOOL enabled)=0; // Gets/Sets the reference coordinate systems virtual int GetRefCoordSys()=0; virtual void SetRefCoordSys(int c)=0; virtual void EnableRefCoordSys(BOOL enabled)=0; // watje Gets/Sets the selection filter virtual int GetSelectFilter()=0; virtual void SetSelectFilter(int c)=0; virtual int GetNumberSelectFilters()=0; virtual TCHAR* GetSelectFilterName(int index)=0; virtual BOOL GetDisplayFilter(int index) = 0; virtual void SetDisplayFilter(int index, BOOL on) = 0; virtual int GetNumberDisplayFilters() = 0; virtual BOOL DisplayFilterIsNodeVisible(int index, int sid, Class_ID cid, INode *node) = 0; virtual TCHAR* GetDisplayFilterName(int index)=0; // Gets the axis which define the space in which transforms should // take place. // The node and subIndex refer to the object and sub object which the axis // system should be based on (this should be the thing the user clicked on) // If 'local' is not NULL, it will be set to TRUE if the center of the axis // is the pivot point of the node, FALSE otherwise. virtual Matrix3 GetTransformAxis(INode *node,int subIndex,BOOL* local = NULL)=0; // This returns the number of axis tripods in the scene. When transforming // multiple sub-objects, in some cases each sub-object is transformed in // a different space. // Return Values: // NUMAXIS_ZERO - Nothing to transform // NUMAXIS_ALL - Use only one axis. // NUMAXIS_INDIVIDUAL - Do all, one at a time virtual int GetNumAxis()=0; // Locks axis tripods so that they will not be updated. virtual void LockAxisTripods(BOOL onOff)=0; virtual BOOL AxisTripodLocked()=0; // Registers a dialog window so IsDlgMesage() gets called for it. virtual void RegisterDlgWnd( HWND hDlg )=0; virtual int UnRegisterDlgWnd( HWND hDlg )=0; // Registers a keyboard accelerator table // These functions are obsolete. Use the AcceleratorTable // funciton below to get tables that use the keyboard prefs dialog virtual void RegisterAccelTable( HWND hWnd, HACCEL hAccel )=0; virtual int UnRegisterAccelTable( HWND hWnd, HACCEL hAccel )=0; // The action manager is used to manage ActionTables which // plug-ins can use to export operations that can be tied to UI // elements like keyboard shortcuts, menus and toolbars. virtual IActionManager* GetActionManager() = 0; // Returns a pointer to the manager for cusomizable menus // see iMenuMan.h for a description of the menu manager virtual IMenuManager* GetMenuManager() = 0; // Adds rollup pages to the command panel. Returns the window // handle of the dialog that makes up the page. virtual HWND AddRollupPage( HINSTANCE hInst, TCHAR *dlgTemplate, DLGPROC dlgProc, TCHAR *title, LPARAM param=0,DWORD flags=0, int category = ROLLUP_CAT_STANDARD )=0; virtual HWND AddRollupPage( HINSTANCE hInst, DLGTEMPLATE *dlgTemplate, DLGPROC dlgProc, TCHAR *title, LPARAM param=0,DWORD flags=0, int category = ROLLUP_CAT_STANDARD )=0; // Removes a rollup page and destroys it. virtual void DeleteRollupPage( HWND hRollup )=0; // Replaces existing rollup with another. (and deletes the old one) virtual HWND ReplaceRollupPage( HWND hOldRollup, HINSTANCE hInst, TCHAR *dlgTemplate, DLGPROC dlgProc, TCHAR *title, LPARAM param=0,DWORD flags=0, int category = ROLLUP_CAT_STANDARD )=0; virtual HWND ReplaceRollupPage( HWND hOldRollup, HINSTANCE hInst, DLGTEMPLATE *dlgTemplate, DLGPROC dlgProc, TCHAR *title, LPARAM param=0,DWORD flags=0, int category = ROLLUP_CAT_STANDARD )=0; // Gets a rollup window interface to the command panel rollup virtual IRollupWindow *GetCommandPanelRollup()=0; // When the user mouses down in dead area, the plug-in should pass // mouse messages to this function which will pass them on to the rollup. virtual void RollupMouseMessage( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )=0; // get/set the current time. virtual TimeValue GetTime()=0; virtual void SetTime(TimeValue t,BOOL redraw=TRUE)=0; // get/set the anim interval. virtual Interval GetAnimRange()=0; virtual void SetAnimRange(Interval range)=0; // Register a callback object that will get called every time the // user changes the frame slider. virtual void RegisterTimeChangeCallback(TimeChangeCallback *tc)=0; virtual void UnRegisterTimeChangeCallback(TimeChangeCallback *tc)=0; // Register a callback object that will get called when the user // causes the command mode to change virtual void RegisterCommandModeChangedCallback(CommandModeChangedCallback *cb)=0; virtual void UnRegisterCommandModeChangedCallback(CommandModeChangedCallback *cb)=0; // Register a ViewportDisplayCallback // If 'preScene' is TRUE then the callback will be called before object are rendered (typically, but not always). virtual void RegisterViewportDisplayCallback(BOOL preScene,ViewportDisplayCallback *cb)=0; virtual void UnRegisterViewportDisplayCallback(BOOL preScene,ViewportDisplayCallback *cb)=0; virtual void NotifyViewportDisplayCallbackChanged(BOOL preScene,ViewportDisplayCallback *cb)=0; // Register a ExitMAXCallback virtual void RegisterExitMAXCallback(ExitMAXCallback *cb)=0; virtual void UnRegisterExitMAXCallback(ExitMAXCallback *cb)=0; virtual RightClickMenuManager* GetRightClickMenuManager()=0; // Delete key notitfication virtual void RegisterDeleteUser(EventUser *user)=0; // Register & Activate virtual void UnRegisterDeleteUser(EventUser *user)=0; // Deactivate & UnRegister //----- Creation-related Methods-------------------------- virtual void MakeNameUnique(TSTR &name)=0; virtual INode *CreateObjectNode( Object *obj)=0; virtual GenCamera *CreateCameraObject(int type) = 0; virtual Object *CreateTargetObject() = 0; virtual GenLight *CreateLightObject(int type) = 0; virtual void *CreateInstance(SClass_ID superID, Class_ID classID)=0; virtual int BindToTarget(INode *laNode, INode *targNode)=0; virtual int IsCPEdgeOnInView()=0; virtual void DeleteNode(INode *node, BOOL redraw=TRUE, BOOL overrideSlaves=FALSE)=0; virtual INode *GetRootNode()=0; virtual void NodeInvalidateRect( INode *node )=0; virtual void SelectNode( INode *node, int clearSel = 1)=0; virtual void DeSelectNode(INode *node)=0; virtual void SelectNodeTab(INodeTab &nodes,BOOL sel,BOOL redraw=TRUE)=0; virtual void ClearNodeSelection(BOOL redraw=TRUE)=0; virtual void AddLightToScene(INode *node)=0; virtual void AddGridToScene(INode *node) = 0; virtual void SetNodeTMRelConstPlane(INode *node, Matrix3& mat)=0; virtual void SetActiveGrid(INode *node)=0; virtual INode *GetActiveGrid()=0; // When a plug-in object implements it's own BeginCreate()/EndCreate() // it can cause EndCreate() to be called by calling this method. virtual void StopCreating()=0; // This creates a new object/node with out going throught the usual // create mouse proc sequence. // The matrix is relative to the contruction plane. virtual Object *NonMouseCreate(Matrix3 tm)=0; virtual void NonMouseCreateFinish(Matrix3 tm)=0; // directories virtual TCHAR *GetDir(int which)=0; // which = APP_XXX_DIR virtual int GetPlugInEntryCount()=0; // # of entries in PLUGIN.INI virtual TCHAR *GetPlugInDesc(int i)=0; // ith description virtual TCHAR *GetPlugInDir(int i)=0; // ith directory // bitmap path virtual int GetMapDirCount(BOOL xref=FALSE)=0; // number of dirs in path virtual TCHAR *GetMapDir(int i, BOOL xref=FALSE)=0; // i'th dir of path virtual BOOL AddMapDir(TCHAR *dir, BOOL xref=FALSE)=0; // add a path to the list virtual BOOL AddSessionMapDir(TCHAR *dir, int update=TRUE, BOOL xref=FALSE)=0; virtual int GetSessionMapDirCount(BOOL xref=FALSE)=0; virtual TCHAR *GetSessionMapDir(int i, BOOL xref=FALSE)=0; virtual BOOL DeleteSessionMapDir(int i, int update=TRUE, BOOL xref=FALSE)=0; //These methods provide access to the combined list of permanent and temporary (session) map dirs, //therefore the current total set of map directories virtual int GetCurMapDirCount(BOOL xref=FALSE)=0; virtual TCHAR *GetCurMapDir(int i, BOOL xref=FALSE)=0; virtual float GetLightConeConstraint()=0; // New Method for light exclusion/inclusion lists virtual int DoExclusionListDialog(ExclList *nl, BOOL doShadows=TRUE)=0; // Convert a NameTab to an ExclList ( the new format for Exclusion lists). virtual void ConvertNameTabToExclList(const NameTab *nt, ExclList *excList)=0; virtual MtlBase *DoMaterialBrowseDlg(HWND hParent,DWORD flags,BOOL &newMat,BOOL &cancel)=0; virtual void PutMtlToMtlEditor(MtlBase *mb, int slot=-1)=0; virtual MtlBase* GetMtlSlot(int slot)=0; virtual MtlBaseLib* GetSceneMtls()=0; // Before assigning material to scene, call this to avoid duplicate names. // returns 1:OK 0:Cancel virtual BOOL OkMtlForScene(MtlBase *m)=0; // Access names of current files virtual TSTR &GetCurFileName()=0; virtual TSTR &GetCurFilePath()=0; virtual TCHAR *GetMatLibFileName()=0; // These may bring up file requesters virtual void FileOpen()=0; virtual BOOL FileSave()=0; virtual BOOL FileSaveAs()=0; virtual void FileSaveSelected()=0; virtual void FileReset(BOOL noPrompt=FALSE)=0; virtual void FileMerge()=0; virtual void FileHold()=0; virtual void FileFetch()=0; virtual void FileOpenMatLib(HWND hWnd)=0; // Window handle is parent window #ifndef NO_MATLIB_SAVING // orb 01-09-2002 virtual void FileSaveMatLib(HWND hWnd)=0; virtual void FileSaveAsMatLib(HWND hWnd)=0; #endif // NO_MATLIB_SAVING virtual BOOL FileImport()=0; virtual BOOL FileExport()=0; // This loads 3dsmax.mat (if it exists virtual void LoadDefaultMatLib()=0; // These do not bring up file requesters virtual int LoadFromFile(const TCHAR *name, BOOL refresh=TRUE)=0; // LAM - 8/8/03 - ECO 1125 - added clearNeedSaveFlag, useNewFile // if clearNeedSaveFlag is false, the scene 'dirty' flag is not cleared // if useNewFile is false, the file is not added to the MRU list and the current scene file is not set to the saved file virtual int SaveToFile(const TCHAR *fname, BOOL clearNeedSaveFlag = TRUE, BOOL useNewFile = TRUE)=0; virtual void FileSaveSelected(TCHAR *fname)=0; virtual void FileSaveNodes(INodeTab* nodes, TCHAR *fname)=0; virtual int LoadMaterialLib(const TCHAR *name, MtlBaseLib *lib=NULL)=0; #ifndef NO_MATLIB_SAVING // orb 01-09-2002 virtual int SaveMaterialLib(const TCHAR *name, MtlBaseLib *lib=NULL)=0; #endif // #ifndef NO_MATLIB_SAVING // orb 01-09-2002 // dupMtlAction and reparentAction added for r6.0 - 8/5/03 virtual int MergeFromFile(const TCHAR *name, BOOL mergeAll=FALSE, // when true, merge dialog is not put up BOOL selMerged=FALSE, // select merged items? BOOL refresh=TRUE, // refresh viewports ? int dupAction = MERGE_DUPS_PROMPT, // what to do when duplicate node names are encountered NameTab* mrgList=NULL, // names to be merged (mergeAll must be TRUE) int dupMtlAction = MERGE_DUP_MTL_PROMPT, // what to do when duplicate material names are encountered int reparentAction = MERGE_REPARENT_PROMPT // what to do when can reparent )=0; virtual BOOL ImportFromFile(const TCHAR *name, BOOL suppressPrompts=FALSE, Class_ID *importerID=NULL)=0; virtual BOOL ExportToFile(const TCHAR *name, BOOL suppressPrompts=FALSE, DWORD options=0, Class_ID *exporterID=NULL)=0; // Returns TRUE if this instance of MAX is in slave mode virtual BOOL InSlaveMode()=0; // Brings up the object color picker. Returns TRUE if the user // picks a color and FALSE if the user cancels the dialog. // If the user picks a color then 'col' will be set to the color. virtual BOOL NodeColorPicker(HWND hWnd,DWORD &col)=0; // The following gourping functions will operate on the table // of nodes passed in or the current selection set if the table is NULL // If name is NULL a dialog box will prompt the user to select a name. // If sel group is TRUE, the group node will be selected after the operation completes. // returns a pointer to the group node created. virtual INode *GroupNodes(INodeTab *nodes=NULL,TSTR *name=NULL,BOOL selGroup=TRUE)=0; virtual void UngroupNodes(INodeTab *nodes=NULL)=0; virtual void ExplodeNodes(INodeTab *nodes=NULL)=0; virtual void OpenGroup(INodeTab *nodes=NULL,BOOL clearSel=TRUE)=0; virtual void CloseGroup(INodeTab *nodes=NULL,BOOL selGroup=TRUE)=0; // Flashes nodes (to be used to indicate the completion of a pick operation, for example) virtual void FlashNodes(INodeTab *nodes)=0; // If a plug-in needs to do a PeekMessage() and wants to actually remove the // message from the queue, it can use this method to have the message // translated and dispatched. virtual void TranslateAndDispatchMAXMessage(MSG &msg)=0; // This will go into a PeekMessage loop until there are no more // messages left. If this method returns FALSE then the user // is attempting to quit MAX and the caller should return. virtual BOOL CheckMAXMessages()=0; // Access viewport background image settings. virtual BOOL setBkgImageName(TCHAR *name)=0; virtual TCHAR * getBkgImageName(void)=0; virtual void setBkgImageAspect(int t)=0; virtual int getBkgImageAspect()=0; virtual void setBkgImageAnimate(BOOL onOff)=0; virtual int getBkgImageAnimate(void)=0; virtual void setBkgFrameRange(int start, int end, int step=1)=0; virtual int getBkgFrameRangeVal(int which)=0; virtual void setBkgORType(int which, int type)=0; // which=0 => before start, which=1 => after end virtual int getBkgORType(int which)=0; virtual void setBkgStartTime(TimeValue t)=0; virtual TimeValue getBkgStartTime()=0; virtual void setBkgSyncFrame(int f)=0; virtual int getBkgSyncFrame()=0; virtual int getBkgFrameNum(TimeValue t)=0; // Gets the state of the real-time animation playback toggle. virtual BOOL GetRealTimePlayback()=0; virtual void SetRealTimePlayback(BOOL realTime)=0; virtual BOOL GetPlayActiveOnly()=0; virtual void SetPlayActiveOnly(BOOL playActive)=0; virtual void StartAnimPlayback(int selOnly=FALSE)=0; virtual void EndAnimPlayback()=0; virtual BOOL IsAnimPlaying()=0; virtual int GetPlaybackSpeed()=0; virtual void SetPlaybackSpeed(int s)=0; virtual BOOL GetPlaybackLoop()=0; virtual void SetPlaybackLoop(BOOL loop)=0; // mjm - 09.07.00 // provide access to a global validity token, used essentially as a timestamp. // several areas of code may use it, one being interactive reshading. virtual void IncrementValidityToken()=0; virtual unsigned int CurrentValidityToken()=0; // The following APIs provide a simplistic method to call // the renderer and render frames. The renderer just uses the // current user specified parameters. // Note that the renderer uses the width, height, and aspect // of the specified bitmap so the caller can control the size // of the rendered image rendered. // Renderer must be opened before frames can be rendered. // Either camNode or view must be non-NULL but not both. // // Returns the result of the open call on the current renderer. // 0 is fail and 1 is succeed. virtual int OpenCurRenderer(INode *camNode,ViewExp *view, RendType t = RENDTYPE_NORMAL, int w=0, int h=0)=0; // optional way to specify the view when Opening the renderer. virtual int OpenCurRenderer(ViewParams *vpar, RendType t = RENDTYPE_NORMAL, int w=0, int h=0)=0; // The renderer must be closed when you are done with it. virtual void CloseCurRenderer()=0; // Renders a frame to the given bitmap. // The RendProgressCallback is an optional callback (the base class is // defined in render.h). // // Returns the result of the render call on the current renderer. // 0 is fail and 1 is succeed. virtual int CurRendererRenderFrame(TimeValue t, Bitmap *bm, RendProgressCallback *prog=NULL, float frameDur = 1.0f, ViewParams *vp=NULL, RECT *regionRect = NULL)=0; // creates a default scanline renderer - must be deleted with IScanRenderer::DeleteThis() virtual IScanRenderer *CreateDefaultScanlineRenderer()=0; // [dl | 15may2003] Creates an instance of the default renderer for the given render setting. // If the class ID of the default renderer (see SetDefaultRendererClassID()) does not // exist, then an instance of the MAX scanline renderer is created. // The instance returned must be deleted with Renderer::DeleteThis(). virtual Renderer* CreateDefaultRenderer(RenderSettingID renderSettingID) = 0; // [dl | 15may2003] Gets/sets the class ID of the default renderer for the given render setting. // An instance of the default renderer can be created by using CreateDefaultRenderer() virtual Class_ID GetDefaultRendererClassID(RenderSettingID renderSettingID) = 0; virtual void SetDefaultRendererClassID(RenderSettingID renderSettingID, Class_ID classID) = 0; // a set of functions parallel to those above, to work with any Renderer instance virtual int OpenRenderer(Renderer *pRenderer, INode *camNode,ViewExp *view, RendType type = RENDTYPE_NORMAL, int w=0, int h=0)=0; virtual int OpenRenderer(Renderer *pRenderer, ViewParams *vpar, RendType type = RENDTYPE_NORMAL, int w=0, int h=0)=0; virtual int RendererRenderFrame(Renderer *pRenderer, TimeValue t, Bitmap *bm, RendProgressCallback *prog=NULL, float frameDur = 1.0f, ViewParams *vp=NULL, RECT *regionRect = NULL)=0; virtual void CloseRenderer(Renderer *pRenderer)=0; // To get more control over the renderer, the renderer can be called directly. // The following methods give access to the current renderer and the the user's // current rendering settings. // gets a pointer to the renderer being used with the currently active render settings virtual Renderer *GetCurrentRenderer()=0; // gets a pointer to the renderer being used for each of the render settings // GetRenderer(RenderSettingID) can be used to access all settings virtual Renderer *GetProductionRenderer()=0; virtual Renderer *GetDraftRenderer()=0; // this function can be used instead of the two above. // RS_MEdit: Returns the renderer in the MEdit slot. Does not consider the lock. virtual Renderer *GetRenderer(RenderSettingID renderSettingID)=0; // mjm - 05.26.00 // assigns a renderer to be used with the currently active render settings virtual void AssignCurRenderer(Renderer *rend)=0; // assigns a renderer to be used with each of the render settings // AssignRenderer(RenderSettingID, Renderer*) can be used to access all settings virtual void AssignProductionRenderer(Renderer *rend)=0; virtual void AssignDraftRenderer(Renderer *rend)=0; // this function can be used instead of the two above. // RS_MEdit: Assign the renderer to the MEdit slot. Does not consider the lock. virtual void AssignRenderer(RenderSettingID renderSettingID, Renderer *rend)=0; // mjm - 05.26.00 // in order to support more than just two render settings, the following two functions should no // longer be used. instead, use ChangeRenderSetting() below. // SetUseDraftRenderer() sets the CurrentRenderSetting to 'production' // if parameter (b == 0) and sets it to 'draft' if (b != 0) virtual void SetUseDraftRenderer(BOOL b)=0; // GetUseDraftRenderer() returns TRUE if the CurrentRenderSetting is 'draft' // it returns TRUE if the CurrentRenderSetting is not 'draft' // there is no way with this function to determine if the CurrentRenderSetting is anything but 'draft' virtual BOOL GetUseDraftRenderer()=0; // these functions can be used instead of the two above. // RS_MEdit cannot be the current render setting. Calling ChangeRenderSetting(RS_MEdit) has no effect. virtual void ChangeRenderSetting(RenderSettingID renderSettingID)=0; // mjm - 05.26.00 virtual RenderSettingID GetCurrentRenderSetting()=0; // mjm - 05.26.00 // [dl | 15may2003] Gets/sets the renderer assigned to the MEdit slot. // NOTE: This ignores the state of the MEdit renderer lock, and will not necesarily // get/set the renderer that is actually used for MEdit. virtual Renderer* GetMEditRenderer() = 0; virtual void AssignMEditRenderer(Renderer* renderer) = 0; // [dl | 15may2003] This returns the renderer to be used for MEdit. // This TAKES THE LOCK INTO ACCOUNT: this will return the Current renderer if // the MEdit lock is ON. virtual Renderer* GetActualMEditRenderer() = 0; // [dl | 15may2003] Gets/sets the status of the MEdit renderer lock. // When ON, the Current renderer should be used to render in MEdit. virtual bool GetMEditRendererLocked() = 0; virtual void SetMEditRendererLocked(bool locked) = 0; virtual bool GetMEditRendererLocked_DefaultValue() = 0; virtual void SetMEditRendererLocked_DefaultValue(bool locked) = 0; // mjm - begin - 06.30.00 // gets the current (production vs. draft) render element manager virtual IRenderElementMgr *GetCurRenderElementMgr()=0; // gets production or draft render element manager -- passing in renderSettingID = RS_IReshade will return NULL virtual IRenderElementMgr *GetRenderElementMgr(RenderSettingID renderSettingID)=0; // mjm - end // Fills in a RendParams structure that can be passed to the // renderer with the user's current rendering settings. // A vpt pointer only needs to be passed in if the RendType // is RENDTYPE_REGION or RENDTYPE_BLOWUP. In these cases it will // set up the RendParams regxmin,regxmax,regymin,regymax from // values stored in the viewport. virtual void SetupRendParams(RendParams &rp, ViewExp *vpt, RendType t = RENDTYPE_NORMAL)=0; // fills in a ViewParams structure based on type of node passed (camera or light) // can be used when instantiating a renderer and calling Open(), Render(), and Close() // directly on it. virtual void GetViewParamsFromNode(INode* vnode, ViewParams& vp, TimeValue t)=0; // Call during render to check if user has cancelled render. // Returns TRUE iff user has cancelled. virtual BOOL CheckForRenderAbort()=0; // Call during render to abort the render virtual void AbortRender()=0; // These give access to individual user specified render parameters // These are either parameters that the user specifies in the // render dialog or the renderer page of the preferences dialog. virtual int GetRendTimeType()=0; virtual void SetRendTimeType(int type)=0; virtual TimeValue GetRendStart()=0; virtual void SetRendStart(TimeValue start)=0; virtual TimeValue GetRendEnd()=0; virtual void SetRendEnd(TimeValue end)=0; virtual int GetRendNThFrame()=0; virtual void SetRendNThFrame(int n)=0; #ifndef WEBVERSION //some properties are read-only method in Webversion, (have Get() but not Set()) virtual BOOL GetRendShowVFB()=0; virtual void SetRendShowVFB(BOOL onOff)=0; virtual BOOL GetRendSaveFile()=0; virtual void SetRendSaveFile(BOOL onOff)=0; virtual BOOL GetRendUseDevice()=0; virtual void SetRendUseDevice(BOOL onOff)=0; virtual BOOL GetRendUseNet()=0; virtual void SetRendUseNet(BOOL onOff)=0; virtual BitmapInfo& GetRendFileBI()=0; virtual BitmapInfo& GetRendDeviceBI()=0; virtual int GetRendWidth()=0; virtual void SetRendWidth(int w)=0; virtual int GetRendHeight()=0; virtual void SetRendHeight(int h)=0; virtual float GetRendApect()=0; virtual void SetRendAspect(float a)=0; virtual float GetRendImageAspect()=0; virtual float GetRendApertureWidth()=0; // get aperture width in mm. virtual void SetRendApertureWidth(float aw)=0; // set aperture width in mm. virtual BOOL GetRendFieldRender()=0; virtual void SetRendFieldRender(BOOL onOff)=0; virtual BOOL GetRendColorCheck()=0; virtual void SetRendColorCheck(BOOL onOff)=0; virtual BOOL GetRendSuperBlack()=0; virtual void SetRendSuperBlack(BOOL onOff)=0; virtual BOOL GetRendHidden()=0; virtual void SetRendHidden(BOOL onOff)=0; virtual BOOL GetRendForce2Side()=0; virtual void SetRendForce2Side(BOOL onOff)=0; virtual BOOL GetRendAtmosphere()=0; virtual void SetRendAtmosphere(BOOL onOff)=0; virtual BOOL GetRendEffects()=0; virtual void SetRendEffects(BOOL onOff)=0; virtual BOOL GetRendDisplacement()=0; virtual void SetRendDisplacement(BOOL onOff)=0; virtual TSTR& GetRendPickFramesString()=0; virtual BOOL GetRendDitherTrue()=0; virtual void SetRendDitherTrue(BOOL onOff)=0; virtual BOOL GetRendDither256()=0; virtual void SetRendDither256(BOOL onOff)=0; virtual BOOL GetRendMultiThread()=0; virtual void SetRendMultiThread(BOOL onOff)=0; virtual BOOL GetRendNThSerial()=0; virtual void SetRendNThSerial(BOOL onOff)=0; virtual int GetRendVidCorrectMethod()=0; // 0->FLAG, 1->SCALE_LUMA 2->SCALE_SAT virtual void SetRendVidCorrectMethod(int m)=0; virtual int GetRendFieldOrder()=0; // 0->even, 1-> odd virtual void SetRendFieldOrder(int fo)=0; virtual int GetRendNTSC_PAL()=0; // 0 ->NTSC, 1 ->PAL virtual void SetRendNTSC_PAL(int np)=0; virtual int GetRendSuperBlackThresh()=0; virtual void SetRendSuperBlackThresh(int sb)=0; // virtual float GetRendMaxPixelSize()=0; // virtual void SetRendMaxPixelSize(float s)=0; virtual int GetRendFileNumberBase()=0; virtual void SetRendFileNumberBase(int n)=0; virtual BOOL GetSkipRenderedFrames()=0; virtual void SetSkipRenderedFrames(BOOL onOff)=0; #else // WEBVERSION IS DEFINED virtual BOOL GetRendShowVFB()=0; virtual BOOL GetRendSaveFile()=0; virtual void SetRendSaveFile(BOOL onOff)=0; virtual BOOL GetRendUseDevice()=0; virtual BOOL GetRendUseNet()=0; virtual BitmapInfo& GetRendFileBI()=0; virtual BitmapInfo& GetRendDeviceBI()=0; virtual int GetRendWidth()=0; virtual void SetRendWidth(int w)=0; virtual int GetRendHeight()=0; virtual void SetRendHeight(int h)=0; virtual float GetRendApect()=0; virtual float GetRendImageAspect()=0; virtual float GetRendApertureWidth()=0; // get aperture width in mm. virtual BOOL GetRendFieldRender()=0; virtual BOOL GetRendColorCheck()=0; virtual BOOL GetRendSuperBlack()=0; virtual BOOL GetRendHidden()=0; virtual void SetRendHidden(BOOL onOff)=0; virtual BOOL GetRendForce2Side()=0; virtual void SetRendForce2Side(BOOL onOff)=0; virtual BOOL GetRendAtmosphere()=0; virtual BOOL GetRendEffects()=0; virtual BOOL GetRendDisplacement()=0; virtual TSTR& GetRendPickFramesString()=0; virtual BOOL GetRendDitherTrue()=0; virtual void SetRendDitherTrue(BOOL onOff)=0; virtual BOOL GetRendDither256()=0; virtual void SetRendDither256(BOOL onOff)=0; virtual BOOL GetRendMultiThread()=0; virtual void SetRendMultiThread(BOOL onOff)=0; virtual BOOL GetRendNThSerial()=0; virtual void SetRendNThSerial(BOOL onOff)=0; virtual int GetRendVidCorrectMethod()=0; // 0->FLAG, 1->SCALE_LUMA 2->SCALE_SAT virtual void SetRendVidCorrectMethod(int m)=0; virtual int GetRendFieldOrder()=0; // 0->even, 1-> odd virtual void SetRendFieldOrder(int fo)=0; virtual int GetRendNTSC_PAL()=0; // 0 ->NTSC, 1 ->PAL virtual void SetRendNTSC_PAL(int np)=0; virtual int GetRendSuperBlackThresh()=0; // virtual float GetRendMaxPixelSize()=0; // virtual void SetRendMaxPixelSize(float s)=0; virtual int GetRendFileNumberBase()=0; virtual void SetRendFileNumberBase(int n)=0; virtual BOOL GetSkipRenderedFrames()=0; #endif // WEBVERSION //Max 6.0 virtual BOOL GetRendSimplifyAreaLights() = 0; virtual void SetRendSimplifyAreaLights(BOOL onOff) = 0; virtual DWORD GetHideByCategoryFlags()=0; virtual void SetHideByCategoryFlags(DWORD f)=0; virtual int GetViewportLayout()=0; virtual void SetViewportLayout(int layout)=0; virtual BOOL IsViewportMaxed()=0; virtual void SetViewportMax(BOOL max)=0; // Zoom extents the active viewport, or all virtual void ViewportZoomExtents(BOOL doAll, BOOL skipPersp=FALSE)=0; //watje this zooms the active viewport or all to the specified bounding box which is in world space virtual void ZoomToBounds(BOOL doAll, Box3 box) =0; // Gets the world space bounding box of the selection. virtual void GetSelectionWorldBox(TimeValue t,Box3 &box)=0; // Find an INode with the given name virtual INode *GetINodeByName(const TCHAR *name)=0; // Find an INode with the given handle virtual INode *GetINodeByHandle(ULONG handle)=0; // For use with gbuffer BMM_CHAN_NODE_RENDER_ID channel during video post virtual INode *GetINodeFromRenderID(UWORD id)=0; // Executes a MAX command. See maxcom.h for available commands virtual void ExecuteMAXCommand(int id)=0; // Returns a class used for efficiently creating unique names virtual NameMaker* NewNameMaker(BOOL initFromScene = TRUE)=0; // Get set the viewport background color. virtual void SetViewportBGColor(const Point3 &color)=0; virtual Point3 GetViewportBGColor()=0; // Get/Set the environment texture map, ambient light and other effects virtual Texmap *GetEnvironmentMap()=0; virtual void SetEnvironmentMap(Texmap *map)=0; virtual BOOL GetUseEnvironmentMap()=0; virtual void SetUseEnvironmentMap(BOOL onOff)=0; virtual Point3 GetAmbient(TimeValue t,Interval &valid)=0; virtual void SetAmbient(TimeValue t, Point3 col)=0; virtual Control *GetAmbientController()=0; virtual void SetAmbientController(Control *c)=0; virtual Point3 GetLightTint(TimeValue t,Interval &valid)=0; virtual void SetLightTint(TimeValue t, Point3 col)=0; virtual Control *GetLightTintController()=0; virtual void SetLightTintController(Control *c)=0; virtual float GetLightLevel(TimeValue t,Interval &valid)=0; virtual void SetLightLevel(TimeValue t, float lev)=0; virtual Control *GetLightLevelController()=0; virtual void SetLightLevelController(Control *c)=0; virtual int NumAtmospheric()=0; virtual Atmospheric *GetAtmospheric(int i)=0; virtual void SetAtmospheric(int i,Atmospheric *a)=0; virtual void AddAtmosphere(Atmospheric *atmos)=0; virtual void DeleteAtmosphere(int i)=0; virtual void EditAtmosphere(Atmospheric *a, INode *gizmo=NULL)=0; virtual int NumEffects()=0; virtual Effect *GetEffect(int i)=0; virtual void SetEffect(int i,Effect *e)=0; virtual void AddEffect(Effect *eff)=0; virtual void DeleteEffect(int i)=0; virtual void EditEffect(Effect *e, INode *gizmo=NULL)=0; virtual Point3 GetBackGround(TimeValue t,Interval &valid)=0; virtual void SetBackGround(TimeValue t,Point3 col)=0; virtual Control *GetBackGroundController()=0; virtual void SetBackGroundController(Control *c)=0; // Get/Set the current sound object. virtual SoundObj *GetSoundObject()=0; virtual void SetSoundObject(SoundObj *snd)=0; #ifdef _OSNAP virtual IOsnapManager *GetOsnapManager()=0; virtual MouseManager *GetMouseManager()=0; virtual void InvalidateOsnapdraw()=0; #endif // Access the current mat lib loaded. virtual MtlBaseLib& GetMaterialLibrary()=0; virtual BOOL IsNetServer()=0; // returns 1 iff is network server //-- GUPSTART virtual void SetNetServer()=0; //-- GUPEND //-- Logging Facilities (Replaces the old NetLog() stuff) // // Check log.h for methods virtual LogSys *Log()=0; // get ref to the central DLL directory virtual DllDir& GetDllDir()=0; // Generic expansion function virtual INT_PTR_MSVC70 Execute(int cmd, ULONG_PTR arg1=0, ULONG_PTR arg2=0, ULONG_PTR arg3=0, ULONG_PTR arg4=0, ULONG_PTR arg5=0, ULONG_PTR arg6=0)=0; // WIN64 Cleanup: Martell and Shuler virtual void *GetInterface(DWORD id)=0; // Get pointer to the scene. virtual ReferenceTarget *GetScenePointer()=0; // Get a pointer to the Track View root node. virtual ITrackViewNode *GetTrackViewRootNode()=0; // Free all bitmaps used by the scene virtual void FreeSceneBitmaps()=0; // Access the DllDir virtual DllDir *GetDllDirectory()=0; // Enumerate Bitmap Files virtual void EnumAuxFiles(NameEnumCallback& nameEnum, DWORD flags)=0; // Render a 2D bitmap from a procedural texture virtual void RenderTexmap(Texmap *tex, Bitmap *bm, float scale3d=1.0f, BOOL filter=FALSE, BOOL display=FALSE, float z=0.0f)=0; // Activate and deactivate a texture map in the viewports. // mtl is the TOP LEVEL of the material containing the texture map. If it // is a Multi-material, then subNum specifies which sub branch of the // multi contains tx. CoreExport void DeActivateTexture(MtlBase *tx, Mtl *mtl, int subNum=-1); CoreExport void ActivateTexture(MtlBase *tx, Mtl *mtl, int subNum=-1); // Access to named selection sets at the object level virtual int GetNumNamedSelSets()=0; virtual TCHAR *GetNamedSelSetName(int setNum)=0; virtual int GetNamedSelSetItemCount(int setNum)=0; virtual INode *GetNamedSelSetItem(int setNum,int i)=0; virtual void AddNewNamedSelSet(INodeTab &nodes,TSTR &name)=0; virtual void RemoveNamedSelSet(TSTR &name)=0; virtual void ReplaceNamedSelSet(INodeTab &nodes,int setNum)=0; virtual void GetNamedSelSetList(INodeTab &nodes,int setNum)=0; // Get new material and map names to maintain name uniqueness virtual void AssignNewName(Mtl *m)=0; virtual void AssignNewName(Texmap *m)=0; // rescale world units of entire scene, or selection virtual void RescaleWorldUnits(float f, BOOL selected)=0; // Initialize snap info structure with current snap settings // (Returns zero if snap is OFF) virtual int InitSnapInfo(SnapInfo *info)=0; // Time configuration dialog key step options virtual BOOL GetKeyStepsSelOnly()=0; virtual void SetKeyStepsSelOnly(BOOL onOff)=0; virtual BOOL GetKeyStepsUseTrans()=0; virtual void SetKeyStepsUseTrans(BOOL onOff)=0; virtual BOOL GetKeyStepsPos()=0; virtual void SetKeyStepsPos(BOOL onOff)=0; virtual BOOL GetKeyStepsRot()=0; virtual void SetKeyStepsRot(BOOL onOff)=0; virtual BOOL GetKeyStepsScale()=0; virtual void SetKeyStepsScale(BOOL onOff)=0; virtual BOOL GetKeyStepsUseTrackBar()=0; virtual void SetKeyStepsUseTrackBar(BOOL onOff)=0; // Enables/disables the use of Transform Gizmos virtual BOOL GetUseTransformGizmo()=0; virtual void SetUseTransformGizmo(BOOL onOff)=0; // Get/Set if the TGiz restores the previous axis when released. virtual void SetTransformGizmoRestoreAxis(BOOL bOnOff)=0; virtual BOOL GetTransformGizmoRestoreAxis()=0; // Turn off axis follows transform mode AI. virtual BOOL GetConstantAxisRestriction()=0; virtual void SetConstantAxisRestriction(BOOL onOff)=0; // Used to hittest transform Gizmos for sub-objects virtual int HitTestTransformGizmo(IPoint2 *p, ViewExp *vpt, int axisFlags) = 0; // Used to deactiveate the Transform Gizmo when it is released. virtual void DeactivateTransformGizmo() = 0; // put up dialog to let user configure the bitmap loading paths. // returns 1: OK , 0: Cancel. virtual int ConfigureBitmapPaths()=0; // Puts up the space array dialog. If the callback is NULL it // just does the standard space array tool. // returns TRUE if the user OKs the dialog, FALSE otherwise. virtual BOOL DoSpaceArrayDialog(SpaceArrayCallback *sacb=NULL)=0; // dynamically add plugin-class. // returns -1 if superclass was unknown // returns 0 if class already exists // returns 1 if class added successfully virtual int AddClass(ClassDesc *cd)=0; // dynamically delete plugin-class. // returns -1 if superclass was unknown // returns 0 if class does not exist // returns 1 if class deleted successfully virtual int DeleteClass(ClassDesc *cd)=0; // Number of CommandModes in the command mode stack virtual int GetCommandStackSize()=0; // Get the CommandMode at this position in the command mode stack (0 = current) virtual CommandMode* GetCommandStackEntry(int entry)=0; // This method should be called in an light's BeginEditParams, after adding rollups // to the modify panel: it puts up a rollup containing a list of all Atmospherics // and Effects that use the current selected node as a "gizmo" virtual void AddSFXRollupPage(ULONG flags=0)=0; // flags are for future use // This is called in a light's EndEditParams when removing rollups virtual void DeleteSFXRollupPage()=0; // This is called by an Atmospheric or Effect when it adds or removes a "gizmo" reference. virtual void RefreshSFXRollupPage()=0; // PropertySet access // Legal values for "int PropertySet" are defined above: // PROPSET_SUMMARYINFO // PROPSET_DOCSUMMARYINFO // PROPSET_USERDEFINED virtual int GetNumProperties(int PropertySet)=0; virtual int FindProperty(int PropertySet, const PROPSPEC* propspec)=0; virtual const PROPVARIANT* GetPropertyVariant(int PropertySet, int idx)=0; virtual const PROPSPEC* GetPropertySpec(int PropertySet, int idx)=0; virtual void AddProperty(int PropertySet, const PROPSPEC* propspec, const PROPVARIANT* propvar)=0; virtual void DeleteProperty(int PropertySet, const PROPSPEC* propspec)=0; // register a window that can appear in a MAX viewport virtual BOOL RegisterViewWindow(ViewWindow *vw)=0; virtual BOOL UnRegisterViewWindow(ViewWindow *vw)=0; // Get and set the global shadow generator ( used by light.cpp) virtual ShadowType *GetGlobalShadowGenerator()=0; virtual void SetGlobalShadowGenerator(ShadowType *st)=0; // Get the Import zoom-extents flag virtual BOOL GetImportZoomExtents()=0; virtual void SetImportZoomExtents(BOOL onOff)=0; virtual unsigned int HardwareLockID()=0; virtual BOOL CheckForSave()=0; virtual ITrackBar* GetTrackBar()=0; // For scene XRefs. Most of the time the XRef trees (whose root node is a child of the // client scene's root node) are skipped when traversing the hierarchy. When this option // is turned on, all root nodes will include child XRef scene root nodes in any traversal // related functions such as NumberOfChildren() and GetChildNode(i). // // This option is turned on automatically before rendering and turned off after so that // scene XRefs appear in the production renderer. This option should not be left on if // it is turned on since it would cause scene XRef objects to be accessible to the user in the client scene. virtual void SetIncludeXRefsInHierarchy(BOOL onOff)=0; virtual BOOL GetIncludeXRefsInHierarchy()=0; // Use these two suspend automatic reloading of XRefs. virtual BOOL IsXRefAutoUpdateSuspended()=0; virtual void SetXRefAutoUpdateSuspended(BOOL onOff)=0; // get the macroRecorder interface pointer virtual MacroRecorder* GetMacroRecorder()=0; // DS 2/2/99: virtual void UpdateMtlEditorBrackets()=0; // PRS 2/4/99 virtual bool IsTrialLicense() = 0; virtual bool IsNetworkLicense() = 0; virtual bool IsEmergencyLicense() = 0; // CCJ - 2/12/99 virtual void SetMAXFileOpenDlg(MAXFileOpenDialog* dlg) = 0; virtual void SetMAXFileSaveDlg(MAXFileSaveDialog* dlg) = 0; virtual void RAMPlayer(HWND hWndParent, TCHAR* szChanA=NULL, TCHAR* szChanB=NULL) = 0; //KAE - 3/4/99 virtual void FlushUndoBuffer() = 0; // CCJ 3/16/99 virtual bool DeferredPluginLoadingEnabled() = 0; virtual void EnableDeferredPluginLoading(bool onOff) = 0; // RB: 3/30/99 virtual BOOL IsSceneXRefNode(INode *node)=0; // MEP 4/19/99 virtual bool CanImportFile(const TCHAR* filename)=0; virtual bool IsMaxFile(const TCHAR* filename)=0; virtual bool IsInternetCachedFile(const TCHAR* filename)=0; // MEP 6/21/99 virtual bool CanImportBitmap(const TCHAR* filename)=0; //JH 8/07/99: implementing scheme to capture subobject registration virtual bool CaptureSubObjectRegistration(bool OnOff, Class_ID cid)=0; // MEP 8/06/99: easy method to download a file from a URL // JH 5/4/99: adding argument to control dialog appearance #define DOWNLOADDLG_NOPLACE 1<<0 virtual bool DownloadUrl(HWND hwnd, const TCHAR* url, const TCHAR* filename, DWORD flags = 0)=0; // MEP 3/10/2000: if drag-and-dropped onto a node, you can retrieve the node with this virtual INode* GetImportCtxNode(void)=0; // child treeview creation - JBW 5.25.00 virtual ITreeView* CreateTreeViewChild(ReferenceTarget* root, HWND hParent, DWORD style=0, ULONG id=0, int open=OPENTV_SPECIAL)=0; // CCJ 6.7.00 - Create a viewport material from a renderer material virtual void ConvertMtl(TimeValue t, Material &gm, Mtl *mtl, BOOL doTex, int subNum, float vis, BOOL &needDecal, INode *node, BitArray *needTex, GraphicsWindow *gw)=0; // 000817 --prs. virtual int GetProductVersion()=0; virtual int GetLicenseBehavior()=0; // 000821 --prs. virtual bool IsFeatureLicensed(int subNum)=0; // 000824 --prs. virtual int GetLicenseDaysLeft()=0; // CCJ 8.23.00 - Clone a node hierarchy virtual bool CloneNodes(INodeTab& nodes, Point3& offset, bool expandHierarchies = true, CloneType cloneType = NODE_COPY, INodeTab* resultSource = NULL, INodeTab* resultTarget = NULL) = 0; // NS: 9/9/00 virtual void CollapseNode(INode *node, BOOL noWarning = FALSE)=0; virtual BOOL CollapseNodeTo(INode *node, int modIndex, BOOL noWarning = FALSE)=0; virtual BOOL ConvertNode(INode *node, Class_ID &cid)=0; // TB 5/22/03 virtual IRenderPresetsManager* GetRenderPresetsManager()=0; // LAM - 6/24/03 //-- Default Action Facilities // Check DefaultActions.h for methods virtual DefaultActionSys *DefaultActions()=0; // Sets internal flag, returns old value. // Set to TRUE to indicate that no dialogs should be displayed to user. virtual BOOL SetQuietMode(BOOL onOff)=0; // The return value from this method should be called before displaying any dialogs. // Returns internal flag set by SetQuietMode. If checkNetSlave == TRUE, returns internal // flag OR-ed with whether max is running in network rendering server mode. virtual BOOL GetQuietMode(BOOL checkNetSlave = TRUE)=0; }; // class Interface #ifdef DESIGN_VER class IAggregation; class VizInterface : public Interface { public: virtual IAggregation& GetAggregationMgr()= 0; }; class IObjParam: public VizInterface{}; #else class IObjParam: public Interface{}; #endif // DESIGN_VER class IObjCreate: public IObjParam{}; // Forward declarations class MAXScriptPrefs; class IMenu; class IMenuItem; class FrameRendParams; class DefaultLight; class ITabPage; //----------------------------------------------------------------------------- /// - This class extends Max's previous version of core interface (class Interface) /// - "7" is the major version number of Max that exposes this interface. /// - Call GetCOREInterface7 to acquire a pointer to this interface. //----------------------------------------------------------------------------- class Interface7 : public IObjCreate { public: /// --- Object Selection ------------------------------------------------ /// /// Retrieves the currently selected nodes into the supplied parameter. /// It clears the node tab supplied as parameter before using it. virtual void GetSelNodeTab(INodeTab& selectedNodes) const = 0; /// --- Transform Modes and Reference Coordinate System ----------------- /// /// Pivot modes the system can be in enum PivotMode { /// Transforms will affect the objects' world transform kPIV_NONE = PIV_NONE, /// Transforms will affect only the pivot point of objects kPIV_PIVOT_ONLY = PIV_PIVOT_ONLY, /// Transforms will affect only the objects and not their pivot points kPIV_OBJECT_ONLY = PIV_OBJECT_ONLY, /// Rotation and Scale will be applied to the hierarchy by rotating or /// scaling the position of the pivot point without rotating or scaling /// the pivot point itself. kPIV_HIERARCHY_ONLY = PIV_HIERARCHY_ONLY }; /// Returns the current pivot mode the system is in. virtual PivotMode GetPivotMode() const = 0; /// Set the pivot mode of the system virtual void SetPivotMode(PivotMode pivMode) = 0; /// Returns true if the transforms applied to a node will affect its children, /// otherwise returns false virtual bool GetAffectChildren() const = 0; /// Sets whether the transforms applied to a node will affect its children. /// If bAffectChildren is true, the children of a node will be transformed when /// their parent node is transformed. Otherwise, they won't be transformed. virtual void SetAffectChildren(bool bAffectChildren) = 0; /// Given a reference coordinate system id, returns the name of it virtual void GetCurRefCoordSysName(TSTR& name) const = 0; /// Allows for setting the specified node's axis, as the current reference /// coordiante system virtual void AddRefCoordNode(INode *node) = 0; virtual INode* GetRefCoordNode() = 0; /// --- Rendering ------------------------------------------------------- /// /// Only relevant for network rendering. It is possible to set a job flag /// indicates that max should attempt to continue to render even when an /// "error" has been detected. This method allows plug-ins to determine /// whether this flag has been set. virtual bool ShouldContinueRenderOnError() const = 0; virtual void SetupFrameRendParams( FrameRendParams &frp, RendParams &rp, ViewExp *vx, RECT *r) = 0; virtual void SetupFrameRendParams_MXS( FrameRendParams &frp, RendParams &rp, ViewExp *vx, RECT *r, bool useSelBox) = 0; virtual int InitDefaultLights( DefaultLight *dl, int maxn, BOOL applyGlobalLevel = FALSE, ViewExp *vx = NULL, BOOL forRenderer = FALSE) = 0; /// Methods used to sync use with Material Editor sample rendering virtual void IncrRenderActive() = 0; virtual void DecrRenderActive() = 0; virtual BOOL IsRenderActive() = 0; virtual BOOL XRefRenderBegin() = 0; virtual void XRefRenderEnd() = 0; virtual void OpenRenderDialog() = 0; virtual void CancelRenderDialog() = 0; virtual void CloseRenderDialog() = 0; virtual void CommitRenderDialogParameters() = 0; virtual void UpdateRenderDialogParameters() = 0; virtual BOOL RenderDialogOpen() = 0; virtual Bitmap* GetLastRenderedImage() = 0; /// --- General UI ------------------------------------------------------ /// /// Returns the window handle of the status panel window /// (this holds the MAXScript mini-listener) virtual HWND GetStatusPanelHWnd() = 0; /// --- Maxscript ------------------------------------------------------- /// virtual void SetListenerMiniHWnd(HWND wnd) = 0; virtual HWND GetListenerMiniHWnd() = 0; /// Starts the MAXScript help virtual int MAXScriptHelp(TCHAR* keyword = NULL) = 0; /// Retrieves maxscript preferences virtual MAXScriptPrefs& GetMAXScriptPrefs() = 0; /// --- Trackview ------------------------------------------------------- /// virtual BOOL OpenTrackViewWindow( TCHAR* tv_name, TCHAR* layoutName = NULL, Point2 pos = Point2(-1.0f,-1.0f), int width = -1, int height = -1, int dock = TV_FLOAT) = 0; /// Sets the fous to the specified track view window virtual BOOL BringTrackViewWindowToTop(TCHAR* tv_name) = 0; virtual BOOL TrackViewZoomSelected(TCHAR* tv_name) = 0; virtual BOOL TrackViewZoomOn(TCHAR* tv_name, Animatable* parent, int subNum) = 0; virtual BOOL CloseTrackView(TCHAR* tv_name) = 0; virtual int NumTrackViews() = 0; virtual TCHAR* GetTrackViewName(int i) = 0; /// The mask bits are defined in MAXSDK\INCLUDE\ITREEVW.H. Internally, the mask /// bits are stored in two DWORDs The 'which' param tells which to work with - /// valid values are 0 and 1. virtual BOOL SetTrackViewFilter( TCHAR* tv_name, DWORD mask, int which, BOOL redraw = TRUE) = 0; virtual BOOL ClearTrackViewFilter( TCHAR* tv_name, DWORD mask, int which, BOOL redraw = TRUE) = 0; virtual DWORD TestTrackViewFilter(TCHAR* tv_name, DWORD mask, int which) = 0; virtual void FlushAllTrackViewWindows() = 0; virtual void UnFlushAllTrackViewWindows() = 0; virtual void CloseAllTrackViewWindows() = 0; /// --- Command Panel Control ------------------------------------------- /// virtual void SetCurEditObject(BaseObject *obj, BaseNode *hintNode = NULL) = 0; /// Get the object or modifier that is currently being edited in the modifier panel virtual BaseObject* GetCurEditObject() = 0; virtual void AddModToSelection(Modifier* mod) = 0; virtual void InvalidateObCache(INode* node) = 0; virtual INode* FindNodeFromBaseObject(ReferenceTarget* obj) = 0; virtual void SelectedHistoryChanged() = 0; virtual BOOL CmdPanelOpen() = 0; virtual void CmdPanelOpen(BOOL openClose) = 0; /// Suspends\Resumes command pannels specified via bits set in whichPanels param virtual void SuspendEditing( DWORD whichPanels = (1< Blend, otherwise Stipple /// 2 - if hardware rendring -> Sorted Blend, otherwise Blend virtual void SetActiveViewportTransparencyLevel(int level) = 0; virtual int GetActiveViewportTransparencyLevel() = 0; /// Access dual plane settings virtual BOOL GetDualPlanes() = 0; virtual void SetDualPlanes(BOOL b) = 0; /// --- Hit Testing ----------------------------------------------------- /// /// When the flag is On, only frozen objects are hit tested during a pick virtual void SetTestOnlyFrozen(int onOff) = 0; /// --- Tool and Command Modes ------------------------------------------ /// /// Scale modes: CID_OBJSCALE, CID_OBJUSCALE, CID_OBJSQUASH (see cmdmode.h) virtual void SetScaleMode(int mode) = 0; /// Center modes - see 'Origin modes' in maxapi.h virtual void SetCenterMode(int mode) = 0; /// Manipulator related virtual BOOL InManipMode() = 0; virtual void StartManipulateMode() = 0; virtual void EndManipulateMode() = 0; virtual BOOL IsViewportCommandMode(CommandMode *m) = 0; /// --- XRefs ----------------------------------------------------------- /// /// See the 'ConvertFlagedNodesToXRefs() xflags bits' in maxapi.h for the // possible values the 'xflag' parameter can take virtual void ConvertFlagedNodesToXRefs( TSTR &fname, INode *rootNode, Tab &nodes, int xFlags) = 0; /// 'f' parameter can take values defined as 'Xref flag bits' in inode.h virtual void XRefSceneSetIgnoreFlag(int index, DWORD f, BOOL onOff) = 0; virtual void UpdateSceneXRefState() = 0; /// --- Object Snaps ---------------------------------------------------- /// virtual BOOL GetSnapActive() = 0; virtual void SetSnapActive(BOOL onOff) = 0; virtual int GetSnapType() = 0; /// See 'Snap types' in snap.h for possible values of 'type' virtual void SetSnapType(int type) = 0; virtual void ToggleASnap() = 0; virtual int ASnapStatus() = 0; virtual void TogglePSnap() = 0; virtual int PSnapStatus() = 0; virtual float GetGridSpacing() = 0; virtual void SetGridSpacing(float newVal) = 0; virtual int GetGridMajorLines() = 0; virtual void SetGridMajorLines(float newVal) = 0; virtual float GetSnapAngle() = 0; virtual void SetSnapAngle(float newVal) = 0; virtual float GetSnapPercent() = 0; virtual void SetSnapPercent(float newVal) = 0; /// --- Node Properties ------------------------------------------------- /// virtual BOOL GetPrimaryVisibility(INode* node) = 0; virtual void SetPrimaryVisibility(INode* node, BOOL onOff) = 0; virtual BOOL GetSecondaryVisibility(INode* node) = 0; virtual void SetSecondaryVisibility(INode* node, BOOL onOff) = 0; /// 'whatAttrib' can take the valid values of the "Node attribute flags" /// defined in maxapi.h virtual void SetNodeAttribute(INodeTab &nodes, int whatAttrib, int onOff) = 0; virtual void SetNodeAttribute(INode *node, int whatAttrib, int onOff) = 0; virtual void InvalidateNodeRect(INode* node, TimeValue t, BOOL oldPos=FALSE) = 0; /// --- Custom and General UI ------------------------------------------- /// virtual void SetExpertMode(int onOff) = 0; virtual int GetExpertMode() = 0; virtual void LoadCUIConfig(TCHAR* fileName) = 0; virtual void WriteCUIConfig() = 0; virtual void SaveCUIAs() = 0; virtual void LoadCUI() = 0; virtual void RevertToBackupCUI() = 0; virtual void ResetToFactoryDefaultCUI() = 0; virtual void DoUICustomization(int startPage) = 0; virtual int GetDefaultImageListBaseIndex(SClass_ID sid, Class_ID cid) = 0; virtual TSTR* GetDefaultImageListFilePrefix(SClass_ID sid, Class_ID cid) = 0; virtual float GetGridIntens() = 0; virtual void SetGridIntens(float f) = 0; virtual BOOL GetWhiteOrigin() = 0; virtual void SetWhiteOrigin(BOOL b) = 0; virtual BOOL GetUseGridColor() = 0; virtual void SetUseGridColor(BOOL b) = 0; virtual void UpdateColors( BOOL useGridColor, int gridIntensity, BOOL whiteOrigin) = 0; virtual IMenu* GetIMenu() = 0; virtual IMenuItem* GetIMenuItem() = 0; virtual void RepaintTimeSlider() = 0; virtual TSTR GetTabPageTitle(ITabPage *page) = 0; /// --- File Open/Save Dialogs ------------------------------------------ /// virtual BOOL DoMaxFileSaveAsDlg(TSTR &fileName, BOOL setAsCurrent=TRUE) = 0; virtual BOOL DoMaxFileOpenDlg(TSTR &fileName, TSTR *defDir, TSTR *defFile) = 0; virtual BOOL DoMaxFileMergeDlg(TSTR &fileName, TSTR *defDir, TSTR *defFile) = 0; virtual BOOL DoMaxFileXRefDlg(TSTR &fileName, TSTR *defDir, TSTR *defFile) = 0; /// --- Animation ------------------------------------------------------- /// /// Old style playback with no immediate return virtual void StartAnimPlayback2(int selOnly) = 0; /// --- Modifiers ------------------------------------------------------- /// enum ResCode { kRES_INTERNAL_ERROR = -3, kRES_MOD_NOT_FOUND = -2, kRES_MOD_NOT_APPLICABLE = -1, kRES_SUCCESS = 0, }; /// Tests of modifier applicability virtual BOOL IsValidModForSelection(ClassEntry* ce) = 0; /// Returns FALSE if the specied modifier cannot be applied to the object virtual BOOL IsValidModifier(INode& node, Modifier& mod) = 0; /// Adds the specified modifier to a node. /// INode& node - the node the modifier will be added to /// Modifier& mod - the modifier instance that will be applied to node /// int beforeIdx - the index in the modstack where the modifier should /// be inserted. 0 means at the top of the modstack /// (just below the node) /// If the object's stack doesn't have beforeIdx number of modifiers in it, /// the modifier is added at the lowest possible index (just on top of the /// base object) /// Returns one of these error codes: /// kRES_INTERNAL_ERROR - if an error such as invalid pointer is encountered /// kRES_MOD_NOT_APPLICABLE - if the modifier is not applicable /// kRES_SUCCESS - on success virtual ResCode AddModifier(INode& node, Modifier& mod, int beforeIdx = 0) = 0; /// Deletes the first occurance of the specified modifier from the node's /// modifier stack. Returns one of the following values: kRES_INTERNAL_ERROR, /// kRES_MOD_NOT_FOUND or kRES_SUCCESS virtual ResCode DeleteModifier(INode& node, Modifier& mod) = 0; /// Deletes the modifier at the specified index from the node's modifier stack /// Returns one of the following values: kRES_INTERNAL_ERROR, /// kRES_MOD_NOT_FOUND or kRES_SUCCESS virtual ResCode DeleteModifier(INode& node, int modIdx) = 0; /// Finds the first occurance of the specified modifier on a node. /// It returns a pointer to the derived object to which this modifier belongs, /// the index of the modifier within this derived object and the index within /// the modifier stack. If the modifier is not found, returns NULL. /// It searches the WS, then the OS part of the geom pipeline of the node. virtual IDerivedObject* FindModifier( INode& node, Modifier& mod, int& modStackIdx, int& derivedObjIdx) = 0; /// Finds the modifier at the specified modstack index on a node. /// It returns a pointer to the derived object to which this modifier belongs, /// the index of the modifier within this derived object, and a pointer to the /// modifier itself. If the modifier is not found, returns NULL. /// It searches both WS and OS part of the geom pipeline of the object virtual IDerivedObject* FindModifier( INode& node, int modIdx, int& idx, Modifier*& mod) = 0; /// Finds the index of a modifier instance in a modstack of a node, when /// the node, the modifier it's corresponding cod context are given. /// It returns a pointer to the derived object to which this modifier belongs, /// the index of the modifier within this derived object, and a pointer to the /// modifier itself. If the modifier is not found, returns NULL. It searches /// both WS and OS part of the geom pipeline of the object node, mod and mc /// are input parameters, while modStackIdx and dobjidx are output params virtual IDerivedObject* FindModifier( INode& node, Modifier& mod, ModContext& mc, int& modStackIdx, int& dobjidx) = 0; virtual ResCode DoDeleteModifier(INode& node, IDerivedObject& dobj, int idx) = 0; /// A node's reference to its object should be replaced using this method. /// Returns NULL when the operation cannot be completed, such as for Actively /// (File) Linked objects or their user created clone-instances\references. virtual Object* GetReplaceableObjRef(INode& node) = 0; /// --- Render Effects -------------------------------------------------- /// #ifndef NO_RENDEREFFECTS virtual void OpenEnvEffectsDialog() = 0; virtual void CloseEnvEffectsDialog() = 0; virtual BOOL EnvEffectsDialogOpen() = 0; #endif // NO_RENDEREFFECTS }; // class Interface7 /// Methods that control an internal optimization related to reference message /// propagation. The optimization consists of preventing the same ref message /// from being sent repeatedly to the same refmaker. This optimization improves /// the performance of interactive manipulation of complex IK rigs, but it is /// not completely reliable in the presence of some objects such as VIZWalls. /// /// Call this method to turn the optimization On (value = true) or Off /// (value = false) at runtime. When 'commitToInit' is true, 'value' is saved /// to the current market default file as 'DontRepeatRefMsg=' CoreExport void SetDontRepeatRefMsg(bool value, bool commitToInit); /// Call this method to find out if the optimization is active or not CoreExport bool DontRepeatRefMsg(); /// In order to apply the optimization to a notification session, the /// Pre\PostRefNotifyDependents methods have to bracket it. /// IMPORTANT: The notification session should not contain GetValue calls. CoreExport void PreRefNotifyDependents(); CoreExport void PostRefNotifyDependents(); /// Methods that control optimization for evaluating the transforms of complex rigs, /// especially of those with the expose transform helper. Note that this optimization /// may not work completely reliable with all objects\controllers CoreExport void SetInvalidateTMOpt(bool value, bool commitToInit); CoreExport bool GetInvalidateTMOpt(); #endif // __MAXAPI__