3ds Max C++ API Reference
Loading...
Searching...
No Matches
ClassDesc Class Referenceabstract

Class descriptors provide the system with information about the plug-in classes in the DLL. More...

#include <plugapi.h>

+ Inheritance diagram for ClassDesc:

Public Member Functions

virtual ~ClassDesc ()
 
virtual int IsPublic ()=0
 Controls if the plug-in shows up in lists from the user to choose from.
 
virtual const MCHARClassName ()=0
 This method returns the name of the class.
 
virtual const MCHARNonLocalizedClassName ()=0
 This method returns the non-localized name of the class.
 
virtual const MCHARInternalName ()
 Returns a string which provides a fixed, machine parsable internal name for the plug-in.
 
virtual SClass_ID SuperClassID ()=0
 This method returns a system defined constant describing the class this plug-in class was derived from.
 
virtual Class_ID ClassID ()=0
 This method must return the unique ID for the object.
 
virtual const MCHARCategory ()=0
 This methods returns a string describing the category a plug-in fits into.
 
virtual DWORD InitialRollupPageState ()
 This method returns a DWORD which is used to initialize the rollup state in both the create branch and the modify branch.
 
virtual bool UseOnlyInternalNameForMAXScriptExposure ()
 Returns true if only the InternalName is to be used for MAXScript exposure.
 
virtual HINSTANCE HInstance ()
 Returns the DLL instance handle of the plug-in.
 
virtual CoreExport const MCHARGetRsrcString (INT_PTR id)
 Returns a pointer to the string from the resource string table.
 
virtual void MakeAutoParamBlocks (ReferenceMaker *owner)
 This method creates the automatic parameter blocks for the specified plug-in.
 
virtual Class_ID SubClassID ()
 This method can be used for further categorizing plugins.
 
Creation Related Methods
virtual voidCreate (BOOL loading=FALSE)=0
 3ds Max calls this method when it needs a pointer to a new instance of the plug-in class.
 
virtual int BeginCreate (Interface *i)
 The custom creation process of the plug-in object is handled by this method.
 
virtual int EndCreate (Interface *i)
 The termination of the custom creation process is managed by the implementation of this method.
 
virtual BOOL OkToCreate (Interface *i)
 This method is used to enable or disable the button that allows the plug-ins class to be created.
 
Class Parameter Related Methods

The following three methods deal with default settings for plug-in classes.

Most plug-ins do not need to be concerned with these methods. In the 3ds Max user interface, there are options for Controller Defaults in the Animation tab of the Preference Settings dialog. There are buttons for 'Set Defaults' and 'Restore to Factory Settings'. When the user presses the 'Set Defaults' button the user is presented with a list of plug-ins that have responded TRUE to the HasClassParams() method. These plug-ins have default parameters that the user can edit. These are the defaults used when a new instance of the plug-in class is created. When the user picks an item from the list, its EditClassParams() method is called to allow the plug-in to put up a modal dialog to let the user edit the default parameters. If the user presses the 'Reset to Factory Settings' button, the ResetClassParams() method is called. The plug-in can then be reset to use any default settings that it has.

virtual BOOL HasClassParams ()
 If a plug-in class has default parameters that it needs to allow the user to edit, TRUE should be returned and EditClassParams() and ResetClassParams() should be implemented.
 
virtual void EditClassParams (HWND hParent)
 If the user picks the class from the list this method is called.
 
virtual void ResetClassParams (BOOL fileReset=FALSE)
 When the user executes File / Reset or presses the 'Reset to Factory Settings...' button in the File / Preferences... / Animation tab / Controller Defaults section this method is called.
 
ActionTable Methods

Plug-ins do not need to register their action tables from within these methods; they are registered automatically by 3ds Max on behalf of the plug-in.

Therefore plug-ins are encouraged to report the correct number of action tables via these methods, as opposed to reporting 0 but registering the action tables themselves in the implementation of these methods.

virtual int NumActionTables ()
 3ds Max calls this to get the number of action tables a plug-in has.
 
virtual ActionTableGetActionTable (int i)
 Returns a pointer to the specified action table.
 
Manipulator Related Methods
virtual BOOL IsManipulator ()
 Returns TRUE if the class implements a manipulator object; otherwise FALSE.
 
virtual BOOL CanManipulate (ReferenceTarget *hTarget)
 The method returns true if the class is a manipulator and it manipulates the given base object, modifier or controller.
 
virtual BOOL CanManipulateNode (INode *pNode)
 Returns TRUE if the manipulator applies to the given node; otherwise FALSE.
 
virtual ManipulatorCreateManipulator (ReferenceTarget *hTarget, INode *pNode)
 Creates a manipulator object When a manipulator returns TRUE to CanManipulate(ReferenceTarget* hTarget), the system calls this version of CreateManipulator() to create an instance of the manipulator.
 
virtual ManipulatorCreateManipulator (INode *pNode)
 Creates a manipulator object.
 
IO Methods
virtual BOOL NeedsToSave ()
 Returns TRUE if there is data associated with the class that needs to be saved in the 3ds Max file.
 
virtual IOResult Save (ISave *isave)
 If NeedsToSave() returns TRUE then this method should be implemented to save the data associated with the class.
 
virtual IOResult Load (ILoad *iload)
 If NeedsToSave() returns TRUE then this method should be implemented to load the data associated with the class.
 
Parameter Block Descriptor Functions
virtual int NumParamBlockDescs ()
 Returns the number or ParamBlockDesc2s used by the plug-in.
 
virtual ParamBlockDesc2GetParamBlockDesc (int i)
 Returns a pointer to the 'i-th' parameter block 2 descriptor.
 
virtual ParamBlockDesc2GetParamBlockDescByID (BlockID id)
 
virtual void AddParamBlockDesc (ParamBlockDesc2 *pbd)
 
Automatic UI Management
virtual void BeginEditParams (IObjParam *ip, ReferenceMaker *obj, ULONG flags, Animatable *prev)
 Implemented by the System.
 
virtual void EndEditParams (IObjParam *ip, ReferenceMaker *obj, ULONG flags, Animatable *prev)
 This method is called to handle the ending of the automatic command panel user interface management provided by the param map 2 system.
 
virtual void InvalidateUI (ParamBlockDesc2 *pbd)
 Invalidates the user interface for the rollup or dialog managed by the specified descriptor.
 
Parameter Map Functions
virtual int NumParamMaps ()
 Returns the number of parameter map2s used by the plug-in.
 
virtual IParamMap2GetParamMap (int i)
 Returns a pointer to the nth parameter map2.
 
virtual IParamMap2GetParamMap (ParamBlockDesc2 *pbd)
 Returns a pointer to the parameter map2 whose descriptor is passed.
 
virtual bool SetUserDlgProc (ParamBlockDesc2 *pbd, ParamMap2UserDlgProc *proc=NULL)
 Sets the parameter map 2 user dialog proc for the specified descriptor.
 
virtual ParamMap2UserDlgProcGetUserDlgProc (ParamBlockDesc2 *pbd)
 Returns a pointer to the parameter map 2 user dialog proc (if any) for the specified descriptor.
 
Schematic View Related Method
virtual bool DrawRepresentation (COLORREF bkColor, HDC hDC, Rect &rect)
 Allows a plug-in to provide a custom image for display in Schematic View.
 
Function publishing methods
virtual int NumInterfaces ()
 Returns the number of function publishing interfaces maintained by the class descriptor.
 
virtual FPInterfaceGetInterfaceAt (int i)
 Returns the nth function publishing interface.
 
virtual CoreExport FPInterfaceGetInterface (Interface_ID id)
 Returns a pointer to the function publishing interface whose ID is specified.
 
virtual CoreExport FPInterfaceGetInterface (const MCHAR *name)
 Returns a pointer to the function publishing interface whose name is specified.
 
virtual CoreExport void AddInterface (FPInterface *fpi)
 Adds the specified interface to the list maintained by this class descriptor.
 
virtual void ClearInterfaces ()
 Deletes all the interfaces maintained by the class descriptor.
 
Generic Expansion Function
virtual INT_PTR Execute (int cmd, ULONG_PTR arg1=0, ULONG_PTR arg2=0, ULONG_PTR arg3=0)
 This function is maintained so the 3ds Max SDK can be extended without breaking backwards compatibility.
 

Additional Inherited Members

- Static Public Member Functions inherited from MaxHeapOperators
static UtilExport voidoperator new (size_t size)
 Standard new operator used to allocate objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e)
 Standard new operator used to allocate objects if there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new (size_t size, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate objects that takes the type of memory, filename and line number where the new was called If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new (size_t size, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate arrays of objects.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport void operator delete (void *ptr)
 Standard delete operator used to deallocate an object If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an object If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an object that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete (void *ptr, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, void *placement_ptr)
 Placement new operator.
 
static UtilExport void operator delete (void *ptr, void *placement_ptr)
 Placement delete operator.
 
static UtilExport voidaligned_malloc (size_t size, size_t alignment)
 Allocates memory on a specified alignment boundary.
 
static UtilExport voidaligned_realloc (void *ptr, size_t size, size_t alignment)
 Reallocates memory on a specified alignment boundary.
 
static UtilExport void aligned_free (void *ptr)
 Frees a block of memory that was allocated with aligned_malloc/aligned_realloc.
 

Detailed Description

Class descriptors provide the system with information about the plug-in classes in the DLL.

The developer creates a class descriptor by deriving a class from ClassDesc2 (which derives from ClassDesc) and implementing several of its methods.

Constructor & Destructor Documentation

◆ ~ClassDesc()

virtual ~ClassDesc ( )
inlinevirtual
1034{}

Member Function Documentation

◆ IsPublic()

virtual int IsPublic ( )
pure virtual

Controls if the plug-in shows up in lists from the user to choose from.

Returns
If the plug-in can be picked and assigned by the user, as is usually the case, return TRUE. Certain plug-ins may be used privately by other plug-ins implemented in the same DLL and should not appear in lists for user to choose from. These plug-ins would return FALSE.

Implemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

◆ Create()

virtual void * Create ( BOOL  loading = FALSE)
pure virtual

3ds Max calls this method when it needs a pointer to a new instance of the plug-in class.

For example, if 3ds Max is loading a file from disk containing a previously used plug-in (procedural object, modifier, controller, etc...), it will call the plug-in's Animatable::Create() method. The plug-in responds by allocating a new instance of its plug-in class. See the Advanced Topic section on Memory Management for more details.

Parameters
loadingThis parameter is a flag indicating if the class being created is going to be loaded from a disk file. If the flag is TRUE, the plug-in may not have to perform any initialization of the object because the loading process will take care of it. See the Advanced Topics section on Loading and Saving Plug-in Data for more information.

Note: If this parameter is TRUE, developers must initialize their references to NULL. Otherwise 3ds Max may crash.

3ds Max provides a default plug-in object creation process. Many plug-ins fit this form. When the system is about to create an instance of the plug-in object it calls a method BaseObject::GetCreateMouseCallBack().This method returns a callback object whose proc() method handles the mouse input during its creation phase. Most of the work is then handled by the system. The procedural sphere is an example of this type of plug-in. Certain plug-ins may have special creation needs however. The target camera is an example of such a plug-in. Because it needs to create two nodes in the scene (the camera and the target) it requires a custom creation process. To support these plug-ins the following two methods are provided. They allow the plug-in to manage the creation process themselves. See Object Creation Methods for more details.

Implemented in DataClassDesc, MSPluginDesc, and PFActionStateDesc.

◆ BeginCreate()

virtual int BeginCreate ( Interface i)
inlinevirtual

The custom creation process of the plug-in object is handled by this method.

For example, a plug-in can create a custom command mode and push it on the command stack to handle the creation process.

Important Note: A plug-in that doesn't want to participate in the standard object creation mechanism using CreateMouseCallBack must push a CommandMode on the stack in this method and remove it in EndCreate(). This is true even if the plug-in doesn't do anything inside the mode. A mode has to be pushed on the stack and then later popped off otherwise a crash will occur (if the default implementation of this method is not used). For more details on object creation see the Advanced Topics section Object Creation Methods.

Parameters
iAn interface pointer the plug-in may use to call functions in 3ds Max.
Returns
To use the default creation process (the system implementation for this method) return 0; Return nonzero if the plug-in implements this method.

Reimplemented in DataClassDesc, and MSPluginDesc.

1091{return 0;}

◆ EndCreate()

virtual int EndCreate ( Interface i)
inlinevirtual

The termination of the custom creation process is managed by the implementation of this method.

For example, the plug-in could remove a custom command mode from the command stack. See the Advanced Topics section on Object Creation Methods for more details.

Parameters
iAn interface pointer the plug-in may use to call functions in 3ds Max.
Returns
To use the system implementation for this method return 0; Return nonzero if the plug-in implements this method.

Reimplemented in DataClassDesc, and MSPluginDesc.

1101{return 0;};

◆ OkToCreate()

virtual BOOL OkToCreate ( Interface i)
inlinevirtual

This method is used to enable or disable the button that allows the plug-ins class to be created.

For example, at certain times it is not appropriate to for the Boolean object to be created. When there is not an object of the appropriate type selected the Boolean object cannot be created. At these times the button should be disabled (the button will appear as grayed out in the Create branch of the command panel). The button should be enabled if there is an object of the appropriate type selected. This method allows a plug-in to control the state of the button.

Parameters
iAn interface pointer the plug-in may use to call functions in 3ds Max.
Returns
TRUE to enable the class creation button; FALSE to disable it.
Sample Code:
The following code from /MAXSDK/SAMPLES/OBJECTS/BOOLOBJ.CPP demonstrates an implementation of this method. If there is not a node selected, it is not OK to use the command so the button should appear disabled. To disable the button OkToCreate() returns FALSE. If the object that is selected is not of the appropriate type it the button is disabled as well
BOOL BoolObjClassDesc::OkToCreate(Interface *i)
{
if (i->GetSelNodeCount()!=1) return FALSE;
return FALSE;
}
return TRUE;
}
virtual Object * GetObjectRef()=0
Definition: maxapi.h:3068
virtual int GetSelNodeCount()=0
virtual INode * GetSelNode(int i)=0
virtual TimeValue GetTime()=0
virtual ObjectState Eval(TimeValue t)=0
This method is called to evaluate the object and return the result as an ObjectState.
The ObjectState is the structure that flows up the geometry pipeline.
Definition: object.h:287
Object * obj
Pointer to the object in the pipeline.
Definition: object.h:298
CoreExport SClass_ID SuperClassID() override
Retrieves a constant representing the type of the plugin.
#define GEOMOBJECT_CLASS_ID
Geometric object super-class ID.
Definition: plugapi.h:442

Reimplemented in DataClassDesc, and MSPluginDesc.

1134{ return TRUE; } // return FALSE to disable create button

◆ ClassName()

virtual const MCHAR * ClassName ( )
pure virtual

This method returns the name of the class.

This name appears in the button for the plug-in in the 3ds Max user interface.

Returns
The name of the class.

Implemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

◆ NonLocalizedClassName()

virtual const MCHAR * NonLocalizedClassName ( )
pure virtual

This method returns the non-localized name of the class.

This method was added in 3ds Max 2022 to provide more consistent scripting behavior in localized versions of 3ds Max. In versions of 3ds Max prior to 2022, MAXScript used the name returned from ClassName() (unless UseOnlyInternalNameForMAXScriptExposure() returns true) as (one of) the global variable name(s) holding the MAXClass value which exposes this class. In 3ds Max 2022 and later, MAXScript uses the name returned from NonLocalizedClassName() (unless UseOnlyInternalNameForMAXScriptExposure() returns true) as (one of) the global variable name(s) holding the MAXClass value which exposes this class. To maintain scripting compatibility with older versions of 3ds Max, the name returned should be the ClassName returned for locale en-US in versions of 3ds Max prior to 2022.

Returns
The non-localized name of the class.

Implemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

◆ InternalName()

virtual const MCHAR * InternalName ( )
inlinevirtual

Returns a string which provides a fixed, machine parsable internal name for the plug-in.

This name is used by Scripting Engines. MAXScript uses this name (if not null) as (one of) the global variable name(s) holding the MAXClass value which exposes this class.

Reimplemented in DataClassDesc, MSPluginDesc, and PFActionStateDesc.

1158{ return NULL; }
#define NULL
Definition: autoptr.h:18

◆ SuperClassID()

virtual SClass_ID SuperClassID ( )
pure virtual

This method returns a system defined constant describing the class this plug-in class was derived from.

For example, the Bend modifier returns OSM_CLASS_ID. This super class ID is used by all object space modifiers. See Super Class IDs.

Returns
The SuperClassID of the plug-in.

Implemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

◆ ClassID()

virtual Class_ID ClassID ( )
pure virtual

This method must return the unique ID for the object.

If two ClassIDs conflict, the system will only load the first one it finds. The ClassID consists of two unsigned 32-bit quantities. The constructor assigns a value to each of these, for example Class_ID(0xA1C8E1D1, 0xE7AA2BE5). A developer should use the random Class_ID generator to avoid conflicts (Generate a random Class_ID). See Class Class_ID for more information.

Returns
The unique ClassID of the plug-in.

Implemented in DataClassDesc, MSPluginDesc, and PFActionStateDesc.

◆ Category()

virtual const MCHAR * Category ( )
pure virtual

This methods returns a string describing the category a plug-in fits into.

The category is usually selected in the drop down list in the create, or utility branch of the command panel. In the create branch, if this is set to be an existing category (i.e. "Standard Primitives", "Splines", ...) then the plug-in will appear in that category. If the category doesn't yet exists then it is created. If the plug-in does not need to appear in the list, it may simply return a null string as in _M(""). In the modify branch, the category determines which group it appears in the Configure Button Sets / Modifiers list. These are the categories such as "MAX STANDARD", "MAX EDIT", and "MAX SURFACE".

This method is also used to distinguish between the various types of texture maps so they can be separated in the Material/Map Browser. The appropriate string should be returned by this method of the Texmap. For example:

const MCHAR* Category() {
return TEXMAP_CAT_3D;
}
virtual const MCHAR * Category()=0
This methods returns a string describing the category a plug-in fits into.
CoreExport MCHAR TEXMAP_CAT_3D[]
#define MCHAR
MBCS/Unicode helper defines std::wofstream doesn't mix well with Unicode.
Definition: strbasic.h:42

The options for texture maps are:

  • MCHAR TEXMAP_CAT_2D[]; -> 2D maps.
  • MCHAR TEXMAP_CAT_3D[]; - 3D maps.
  • MCHAR TEXMAP_CAT_COMP[]; - Composite.
  • MCHAR TEXMAP_CAT_COLMOD[]; - Color modifier.
  • MCHAR TEXMAP_CAT_ENV[]; - Environment.

Implemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

◆ HasClassParams()

virtual BOOL HasClassParams ( )
inlinevirtual

If a plug-in class has default parameters that it needs to allow the user to edit, TRUE should be returned and EditClassParams() and ResetClassParams() should be implemented.

Otherwise return FALSE (the default).

Reimplemented in DataClassDesc.

1228{return FALSE;}

◆ EditClassParams()

virtual void EditClassParams ( HWND  hParent)
inlinevirtual

If the user picks the class from the list this method is called.

The plug-in should put up a modal dialog that allows the user to edit the plug-ins default parameters. The plug-in should not return until the user has finished editing the parameters.

Parameters
hParentThe parent window handle.

Reimplemented in DataClassDesc.

1235{}

◆ ResetClassParams()

virtual void ResetClassParams ( BOOL  fileReset = FALSE)
inlinevirtual

When the user executes File / Reset or presses the 'Reset to Factory Settings...' button in the File / Preferences... / Animation tab / Controller Defaults section this method is called.

The plug-in can respond by resetting itself to use its default values.

Parameters
fileResetWhen TRUE, the user has performed a File / Reset operation. When FALSE, the user is in the Preferences... dialog doing a reset controller defaults operation.

Reimplemented in ClassDesc2, MSPluginDesc, and DataClassDesc.

1245{}

◆ NumActionTables()

virtual int NumActionTables ( )
inlinevirtual

3ds Max calls this to get the number of action tables a plug-in has.

If more than one class uses the table only one of the classes should export the table, but they can all use them.

See also
ActionTable

Reimplemented in DataClassDesc.

1260{ return 0; }

◆ GetActionTable()

virtual ActionTable * GetActionTable ( int  i)
inlinevirtual

Returns a pointer to the specified action table.

Note
Ownership of the ActionTable is transferred to 3ds Max when this function is called, and it should not be deleted by the plug-in.
Parameters
iThe zero based index of the table to return.
See also
ActionTable

Reimplemented in DataClassDesc.

1267{ return NULL; }

◆ IsManipulator()

virtual BOOL IsManipulator ( )
inlinevirtual

Returns TRUE if the class implements a manipulator object; otherwise FALSE.

Reimplemented in DataClassDesc, and MSPluginDesc.

1274{ return FALSE; }

◆ CanManipulate()

virtual BOOL CanManipulate ( ReferenceTarget hTarget)
inlinevirtual

The method returns true if the class is a manipulator and it manipulates the given base object, modifier or controller.

When starting "Manipulate" mode, this is called on selected nodes for the base object, all modifiers, the TM controller and the position, rotation and scale controllers, if the TM controller is a PRSController.

Parameters
hTargetA pointer to a reference target.

Reimplemented in DataClassDesc, and MSPluginDesc.

1283{ return FALSE; }

◆ CanManipulateNode()

virtual BOOL CanManipulateNode ( INode pNode)
inlinevirtual

Returns TRUE if the manipulator applies to the given node; otherwise FALSE.

This method can be used to indicate that the manipulator works on a part of an object that is not covered by BOOL CanManipulate(ReferenceTarget* hTarget) such as the visibility controller of a node.

Parameters
pNodeThe INode to check.

Reimplemented in DataClassDesc, and MSPluginDesc.

1290{ return FALSE; }

◆ CreateManipulator() [1/2]

virtual Manipulator * CreateManipulator ( ReferenceTarget hTarget,
INode pNode 
)
inlinevirtual

Creates a manipulator object When a manipulator returns TRUE to CanManipulate(ReferenceTarget* hTarget), the system calls this version of CreateManipulator() to create an instance of the manipulator.

Parameters
hTarget- The ReferenceTarget for which a manipulator is requested
pNode- The node that the manipulator needs to manipulate (know about)
Returns
- Pointer to the newly created manipulator, or NULL if the creation failed.
Manipulator* BendManipClassDesc::CreateManipulator(ReferenceTarget* hTarget, INode* node) {
if (hTarget->ClassID() != Class_ID(BENDOSM_CLASS_ID, 0))
return NULL;
return (new BendManip((SimpleMod2*)hTarget, node));
}
virtual CoreExport Class_ID ClassID()
Retrieves a constant that uniquely identifies the plugin class.
Definition: maxtypes.h:67
Definition: inode.h:55
Definition: manipulator.h:356
A scene entity that is being owned and listened to by other scene entities.
Definition: ref.h:1849
Base class for parameter block 2 (PB2) based object space modifiers.
Definition: simpmod.h:324
#define BENDOSM_CLASS_ID
Definition: plugapi.h:874

Reimplemented in DataClassDesc, and MSPluginDesc.

1308 { return NULL; }

◆ CreateManipulator() [2/2]

virtual Manipulator * CreateManipulator ( INode pNode)
inlinevirtual

Creates a manipulator object.

When a manipulator returns TRUE to CanManipulateNode(INode* pNode), the system calls this version of CreateManipulator() to create an instance of the manipulator.

Parameters
pNode- The node that the manipulator needs to manipulate (know about)
Returns
- Pointer to the newly created manipulator, or NULL if the creation failed.

Reimplemented in DataClassDesc, and MSPluginDesc.

1316{return NULL;}

◆ NeedsToSave()

virtual BOOL NeedsToSave ( )
inlinevirtual

Returns TRUE if there is data associated with the class that needs to be saved in the 3ds Max file.

If this is so, implement the Save() and Load() methods below. If there is no class data to save return FALSE.

Reimplemented in DataClassDesc.

1325{ return FALSE; }

◆ Save()

virtual IOResult Save ( ISave isave)
inlinevirtual

If NeedsToSave() returns TRUE then this method should be implemented to save the data associated with the class.

Parameters
isaveA pointer that may be used to call methods to save data to disk.
Returns
IO_OK if the save was successful; otherwise IO_ERROR.

Reimplemented in DataClassDesc.

1331{ return IO_OK; }
@ IO_OK
The result was acceptable - no errors.
Definition: maxtypes.h:195

◆ Load()

virtual IOResult Load ( ILoad iload)
inlinevirtual

If NeedsToSave() returns TRUE then this method should be implemented to load the data associated with the class.

Parameters
iloadA pointer that may be used to load data from a file.
Returns
IO_OK if the load was successful; otherwise IO_ERROR.

Reimplemented in DataClassDesc.

1338{ return IO_OK; }

◆ InitialRollupPageState()

virtual DWORD InitialRollupPageState ( )
inlinevirtual

This method returns a DWORD which is used to initialize the rollup state in both the create branch and the modify branch.

The semantics are different, however for these two cases. Whenever the rollups are created in the create branch, their state will be that specified by this method. In the modify branch, the first time an object of this type is modified the state will be that of this method, but after that it will remain what it was last set to.

Returns
The bits of this DWORD set indicate the corrresponding rollup page is closed. The zero bit corresponds to the plug-ins first rollup, the first bit is the second rollup, etc. The value 0x7fffffff is returned by the default implementation so the command panel can detect this method is not being overridden, and just leave the rollups as is.

Reimplemented in DataClassDesc, and MSPluginDesc.

1353{ return 0x7fffffff; }

◆ UseOnlyInternalNameForMAXScriptExposure()

virtual bool UseOnlyInternalNameForMAXScriptExposure ( )
inlinevirtual

Returns true if only the InternalName is to be used for MAXScript exposure.

For older plugins that did not previously implement InternalName but now do, MAXScript still needs to expose the plugin using the ClassName. But new plugins can be exposed using only the InternalName.

Reimplemented in DataClassDesc.

1360{ return false; }

◆ HInstance()

virtual HINSTANCE HInstance ( )
inlinevirtual

Returns the DLL instance handle of the plug-in.

This is used so that string resources can be loaded by the ParamBlock2 system.

Reimplemented in DataClassDesc, and MSPluginDesc.

1364{ return NULL; }

◆ NumParamBlockDescs()

virtual int NumParamBlockDescs ( )
inlinevirtual

Returns the number or ParamBlockDesc2s used by the plug-in.

Reimplemented in DataClassDesc, and ClassDesc2.

1369{ return 0; }

◆ GetParamBlockDesc()

virtual ParamBlockDesc2 * GetParamBlockDesc ( int  i)
inlinevirtual

Returns a pointer to the 'i-th' parameter block 2 descriptor.

Parameters
iThe zero based index of the descriptor to return.

Reimplemented in DataClassDesc, and ClassDesc2.

1373{ return NULL; }

◆ GetParamBlockDescByID()

virtual ParamBlockDesc2 * GetParamBlockDescByID ( BlockID  id)
inlinevirtual
Remarks
Implemented by the System.

Returns a pointer to the specified parameter block 2 descriptor.
Parameters
idThe ID of the parameter block.

Reimplemented in DataClassDesc, and ClassDesc2.

1378{ return NULL; }

◆ AddParamBlockDesc()

virtual void AddParamBlockDesc ( ParamBlockDesc2 pbd)
inlinevirtual
Remarks
Implemented by the System.

Adds the specified parameter block 2 descriptor to the list of those maintained by the class.
Parameters
pbdPoints to the parameter block 2 descriptor to add.

Reimplemented in DataClassDesc, and ClassDesc2.

1384{ }

◆ BeginEditParams()

virtual void BeginEditParams ( IObjParam ip,
ReferenceMaker obj,
ULONG  flags,
Animatable prev 
)
inlinevirtual

Implemented by the System.



This method is called to handle the beginning of the automatic command panel user interface management provided by the param map 2 system. This method is called by the plug-in from its Animatable::BeginEditParams() method. The parameters passed to that method are simply passed along to this method.

Parameters
ipThe interface pointer passed to the plug-in.
objPoints to the plug-in class calling this method.
flagsThe flags passed along to the plug-in in Animatable::BeginEditParams().
prevThe pointer passed to the plug-in in Animatable::BeginEditParams().

Reimplemented in DataClassDesc, and ClassDesc2.

1399{ }

◆ EndEditParams()

virtual void EndEditParams ( IObjParam ip,
ReferenceMaker obj,
ULONG  flags,
Animatable prev 
)
inlinevirtual

This method is called to handle the ending of the automatic command panel user interface management provided by the param map 2 system.

This method is called by the plug-in from its Animatable::EndEditParams() method. The parameters passed to that method are simply passed along to this method.

Parameters
ipThe interface pointer passed to the plug-in.
objPoints to the plug-in class calling this method.
flagsThe flags passed along to the plug-in in Animatable::EndEditParams().
prevThe pointer passed to the plug-in in Animatable::EndEditParams().

Reimplemented in DataClassDesc, and ClassDesc2.

1410{ }

◆ InvalidateUI()

virtual void InvalidateUI ( ParamBlockDesc2 pbd)
inlinevirtual

Invalidates the user interface for the rollup or dialog managed by the specified descriptor.

This will cause the controls in that rollup to be redrawn.

Parameters
pbdPoints to the parameter block 2 descriptor whose corresponding UI is invalidated.

Reimplemented in DataClassDesc, and ClassDesc2.

1416{ }

◆ GetRsrcString()

virtual CoreExport const MCHAR * GetRsrcString ( INT_PTR  id)
virtual

Returns a pointer to the string from the resource string table.

Parameters
idThe resource ID.
Note
if the resource ID value is 0, a blank string is returned. If the resource ID value cannot be found, the string ">>> @!&*# <<<" is returned.

Reimplemented in DataClassDesc, and MSPluginDesc.

◆ MakeAutoParamBlocks()

virtual void MakeAutoParamBlocks ( ReferenceMaker owner)
inlinevirtual

This method creates the automatic parameter blocks for the specified plug-in.

These are the ones with the P_AUTO_CONSTRUCT bit set on the ParamBlockDesc2::flags value.

Parameters
ownerPoints to the owner of the parameter block.

Reimplemented in DataClassDesc, and ClassDesc2.

1429{ }

◆ NumParamMaps()

virtual int NumParamMaps ( )
inlinevirtual

Returns the number of parameter map2s used by the plug-in.

Reimplemented in DataClassDesc, and ClassDesc2.

1434{ return 0; }

◆ GetParamMap() [1/2]

virtual IParamMap2 * GetParamMap ( int  i)
inlinevirtual

Returns a pointer to the nth parameter map2.

Parameters
iThe zero based index of the parameter map2 to return.

Reimplemented in DataClassDesc, and ClassDesc2.

1438{ return NULL; }

◆ GetParamMap() [2/2]

virtual IParamMap2 * GetParamMap ( ParamBlockDesc2 pbd)
inlinevirtual

Returns a pointer to the parameter map2 whose descriptor is passed.

Parameters
pbdPoints to the parameter block2 descriptor.

Reimplemented in DataClassDesc.

1442{ return NULL; }

◆ SetUserDlgProc()

virtual bool SetUserDlgProc ( ParamBlockDesc2 pbd,
ParamMap2UserDlgProc proc = NULL 
)
inlinevirtual

Sets the parameter map 2 user dialog proc for the specified descriptor.

Returns true if the proc was registered with a parameter map. If the proc was not registered with the parameter map, DeleteThis() will not be called on proc when the user dialog procs are cleared, potentially resulting in leakage of the proc.

Parameters
pbdPoints to the parameter block 2 descriptor.
procThis object manages user interface control that require special processing.
See also
ParamMap2UserDlgProc.

Reimplemented in DataClassDesc, and ClassDesc2.

1453{ return false; }

◆ GetUserDlgProc()

virtual ParamMap2UserDlgProc * GetUserDlgProc ( ParamBlockDesc2 pbd)
inlinevirtual

Returns a pointer to the parameter map 2 user dialog proc (if any) for the specified descriptor.

Parameters
pbdPoints to the parameter block 2 descriptor.
Returns
See Class ParamMap2UserDlgProc.

Reimplemented in DataClassDesc.

1459{ return NULL; }

◆ DrawRepresentation()

virtual bool DrawRepresentation ( COLORREF  bkColor,
HDC  hDC,
Rect rect 
)
inlinevirtual

Allows a plug-in to provide a custom image for display in Schematic View.

Parameters
bkColorThe background color. See COLORREF-DWORD format.
hDCThe handle for the device context.
rectThe rectangle to draw in.
Returns
TRUE if this class can draw an image to represent itself graphically; otherwise FALSE.

Reimplemented in DataClassDesc.

1471{ return FALSE; }

◆ NumInterfaces()

virtual int NumInterfaces ( )
inlinevirtual

Returns the number of function publishing interfaces maintained by the class descriptor.

Reimplemented in DataClassDesc.

1477{ return interfaces.Count(); }
int Count() const
Retrieves the number of items in the Tab.
Definition: tab.h:219

◆ GetInterfaceAt()

virtual FPInterface * GetInterfaceAt ( int  i)
inlinevirtual

Returns the nth function publishing interface.

Reimplemented in DataClassDesc.

1480{ return interfaces[i]; }

◆ GetInterface() [1/2]

virtual CoreExport FPInterface * GetInterface ( Interface_ID  id)
virtual

Returns a pointer to the function publishing interface whose ID is specified.

Parameters
idThe inteface ID.

Reimplemented in DataClassDesc.

◆ GetInterface() [2/2]

virtual CoreExport FPInterface * GetInterface ( const MCHAR name)
virtual

Returns a pointer to the function publishing interface whose name is specified.

Parameters
nameThe name of the interface.

Reimplemented in DataClassDesc.

◆ AddInterface()

virtual CoreExport void AddInterface ( FPInterface fpi)
virtual

Adds the specified interface to the list maintained by this class descriptor.

Parameters
fpiPoints to the interface to add.

Reimplemented in DataClassDesc.

◆ ClearInterfaces()

virtual void ClearInterfaces ( )
inlinevirtual

Deletes all the interfaces maintained by the class descriptor.

Reimplemented in DataClassDesc.

1497{ interfaces.ZeroCount(); }
void ZeroCount()
Resets the number of used items to zero.
Definition: tab.h:242

◆ SubClassID()

virtual Class_ID SubClassID ( )
inlinevirtual

This method can be used for further categorizing plugins.

If a plugin has sub-plugins (like light > shadows, particles > operators), this method can be used to differentiate them. sub-plugins can be derived from ReferenceTarget but return a particular class ID published by the parent plugins SDK headers. Then parent plugin can get a list of all reference targets whose SubClassID matches the published SubClassID.

Reimplemented in DataClassDesc, PFActionStateDesc, and MSPluginDesc.

1506{ return Class_ID(); }

◆ Execute()

virtual INT_PTR Execute ( int  cmd,
ULONG_PTR  arg1 = 0,
ULONG_PTR  arg2 = 0,
ULONG_PTR  arg3 = 0 
)
inlinevirtual

This function is maintained so the 3ds Max SDK can be extended without breaking backwards compatibility.

The behavior of this function depends on the cmd parameter:

  • I_EXEC_CTRL_BYPASS_TREE_VIEW - Returning 1 will hide a controller in track view.
  • I_EXEC_GET_SOA_STATE - The arg1 parameter is expected to be a bool*. The bool gets set to true or false depending whether sub-obj anim is or not enabled for that object type. Returns TRUE if the arg1 is set successfully, otherwise FALSE.
  • I_EXEC_EVAL_SOA_TIME - The arg1 parameter is expected to be a TimeValue* The TimeValue gets set appropriately, depending on whether sub-obj animation is allowed of not for that object type. Returns TRUE if the arg1 is set successfully, otherwise FALSE.

Reimplemented in DataClassDesc.

1520{ return 0; }