3ds Max C++ API Reference
MaxSDK Namespace Reference

Namespaces

 AssetManagement
 
 ChannelData
 These are classes and enums to support the Data Channel Modifier.
 
 CUI
 
 CustomFileStreamAPI
 This API is used to support OLE structured storage streams containing user specified string data in 3ds Max scene files or other OLE Structured Storage based files.
 
 DebuggingTools
 
 GeomBind
 These classes let you define skin weighting using a voxel or height map based algorithm.
 
 Graphics
 
 NotificationAPI
 
 NotificationAPIUtils
 This namespace exposes 4 private internal calls to the 3dsmax application.
 
 OSL
 
 ParticleFlow
 
 PerformanceTools
 
 PointCloud
 
 Populate
 
 RenderingAPI
 
 SkinEngine
 
 ThreadingDebuggingTools
 The functions in this namespace are provided to assist in debugging operations performed on a worker thread.
 
 TranslationSupport
 MAXScript scripts are typically written in English, but when MAXScript accesses names from TrackView nodes only localized names are available.
 
 Util
 

Classes

struct  AutoPtrRef
 Helper class used to implement destructive copy semantics and allow for AutoPtrs to be used as return values. More...
 
class  SinglePointerDestructor
 DestructorPolicy template for pointer to single object types. More...
 
class  AutoPtr
 Automatic memory-ownership pointer supporting "resource acquisition is initialization. More...
 
class  ArrayPointerDestructor
 DestructorPolicy template for pointer to array types. More...
 
class  ArrayAutoPtr
 Standard implementation of a AutoPtr for pointer to array types. More...
 
class  DeleteThisDestructor
 DestructorPolicy template for types requiring destruction through DeleteThis. More...
 
class  DeleteThisAutoPtr
 Partial template specialization of AutoPtr for types requiring destruction through a DeleteThis method. More...
 
class  Array
 A generic array container, with proper support for non-POD types. More...
 
class  IPhysicalSunSky
 Access to functionality and properties of the Physical Sun & Sky environment map. More...
 
class  ISunPositioner
 Access to functionality and properties of the Sun Positioner object. More...
 
class  IHelpSystem
 This interface provides access to the 3ds Max Help system. More...
 
class  HoldBegin
 
class  IMaterialBrowserEntryInstanceCallback
 The IMaterialBrowserEntryInstanceCallback allows you to register a callback that gets executed when a user creates a material or texture from the material browser in the Schematic or Compact Material Editor. More...
 
class  ISceneScriptSecurityManager
 Interface class for the Scene Script Security Manager. More...
 
class  PluginPackageComponent
 A plugin package may contain various 3ds Max components, including native C++ plug-ins, managed assemblies, maxscripts, macroscripts, various resources such as icons, etc. More...
 
class  PluginPackageInfo
 A plugin package may contain various pieces of information including name, package description, company email, and so on. More...
 
class  PluginPackageManager
 The PluginPackageManager is a service implemented by 3ds Max. More...
 
class  EdgeDescr
 
class  PointToPointPath
 
class  QMaxColorSwatch
 Simple UI component to display and modify a color-value. More...
 
class  QmaxDockingWinHost
 This class acts as docking host for native win32 ui controls. More...
 
class  QmaxDockingWinHostDelegate
 
class  QmaxProxyDockingWinHostDelegate
 
class  QmaxDockWidget
 
class  QmaxFloatSlider
 Qt Max slider for float values. More...
 
class  QmaxMainWindow
 This class is used by 3ds Max for its docking UI and should be used as replacement for the standard QMainWindow. More...
 
class  QmaxMultiSpinner
 
class  QmaxPoint2Spinner
 
class  QmaxPoint3Spinner
 
class  QmaxPoint4Spinner
 
class  QmaxMatrix3Spinner
 
class  QMaxParamBlockWidget
 Base class for QWidgets which are to be controlled by a parameter block/map. More...
 
class  QmaxRollup
 3ds Max Qt Rollup class. More...
 
class  QmaxSpinBoxPrivate
 
class  QmaxDoubleSpinBox
 3ds Max's version of a Qt QDoubleSpinBox. More...
 
class  QmaxWorldSpinBox
 A special QmaxDoubleSpinBox that displays its value using the current display units like cm or inches. More...
 
class  QmaxLightingSpinBox
 A special QmaxDoubleSpinBox that displays its value using the current lighting units. More...
 
class  QmaxSpinBox
 3ds Max's version of a Qt QSpinBox. More...
 
class  QmaxToolBar
 This class is used by 3ds Max for the docking toolbars and should be used as replacement for the standard QToolBar. More...
 
class  QmaxToolClips
 The QmaxToolClips class provides a collection of tool clip related methods. More...
 
class  QmaxTranslationLoader
 
class  QMaxWinHost
 Simple widget that can host a native win32 window. More...
 
class  IActiveShadeFragmentManager
 The IActiveShadeFragmentManager class is used to control the active shade fragment (in-viewport) active shade. More...
 
class  IActiveShadeFragmentManager2
 The IActiveShadeFragmentManager2 class is used to control the ActiveShade fragment (in-viewport ActiveShade) and extends IActiveShadeFragmentManager. More...
 
class  INoSignalCheckProgress
 An alternative progress reporting interface to class RendProgressCallback, which does not process the window message queue. More...
 
class  IHairModifier
 Provides access to hair strand definitions for a modifier that generates hair. More...
 
class  IPhysicalCamera
 Access to the properties of the Physical Camera object. More...
 
class  IPhysicalCameraToneOperator
 Access to the properties of the Physical Camera Exposure Control. More...
 
class  IPhysicalCamera_BitmapApertureSampler
 Utility class that provides efficient sampling for a bitmap aperture on the physical camera. More...
 
class  SingleWeakRefMaker
 Utility base class for a ReferenceMaker with a single target that does not share ownership of it's ReferenceTarget. More...
 
class  TypedSingleWeakRefMaker
 
class  TexmapThreadSafe
 TexmapThreadSafe interface has been deprecated. More...
 
class  BufferProxy
 
class  VariableGuard
 Resets a variable when the object goes out of scope. More...
 
class  VertexNormal
 The class used to compute vertex normals considering smoothing. More...
 
class  WindowsMessageFilter
 Runs a message loop without blocking, allowing only acceptable Windows messages through to their destination UI controls. More...
 

Functions

HINSTANCE GetHInstance ()
 Get the calling module's HINSTANCE. More...
 
MSTR GetResourceStringAsMSTR (UINT resourceId)
 Extract a resource from the calling module's string table. More...
 
bool GetResourceStringAsMSTR (UINT resourceId, MSTR &resourceString)
 Extract a resource from the calling module's string table. More...
 
UtilExport MSTR GetResourceStringAsMSTR (HINSTANCE hinstance, UINT resourceId)
 Extract a resource from a module's string table. More...
 
UtilExport bool GetResourceStringAsMSTR (HINSTANCE hinstance, UINT resourceId, MSTR &resourceString)
 Extract a resource from a module's string table. More...
 
CoreExport QIcon LoadMaxMultiResIcon (const QString &iconName)
 Loads a set of Images into a multi-resolution QIcon. More...
 
CoreExport HICON CreateHICONFromMaxMultiResIcon (const MSTR &iconName, int width, int height, bool enabled=true, bool on=false)
 Create an HICON from a MaxMultiResIcon. More...
 
HICON CreateHICONFromMaxMultiResIcon (const MSTR &iconName, int size, bool enabled=true, bool on=false)
 
CoreExport HIMAGELIST CreateHIMAGELISTFromMaxMultiResIcon (const MSTR &imageIconName, int size, int count, bool alpha=true, bool enabled=true, bool on=false)
 Create an HIMAGELIST from a MaxMultiResIcon. More...
 
UtilExport int QmaxMessageBox (QWidget *parent, const QString &text, const QString &caption, unsigned int type, unsigned int exType=0, DWORD *exRet=nullptr)
 Provides an extended message box functionality. This is used to support message dialogs with a 'Hold', a 'Help' button and/or a 'Do not show this message again' check box. More...
 
 Q_DECLARE_METATYPE (AColor)
 
 Q_DECLARE_METATYPE (Point2)
 
 Q_DECLARE_METATYPE (Point3)
 
 Q_DECLARE_METATYPE (Point4)
 
 Q_DECLARE_METATYPE (Matrix3)
 
QString QStringFromID (int resourceID)
 
IPhysicalCamera_BitmapApertureSampler::RGBValue operator* (const float a, const IPhysicalCamera_BitmapApertureSampler::RGBValue &b)
 
IPhysicalCamera_BitmapApertureSampler::RGBValue operator* (const IPhysicalCamera_BitmapApertureSampler::RGBValue &a, const float b)
 
IPhysicalCamera_BitmapApertureSampler::RGBValue operator* (const IPhysicalCamera_BitmapApertureSampler::RGBValue &a, const IPhysicalCamera_BitmapApertureSampler::RGBValue &b)
 
IPhysicalCamera_BitmapApertureSampler::RGBValue operator+ (const IPhysicalCamera_BitmapApertureSampler::RGBValue &a, const IPhysicalCamera_BitmapApertureSampler::RGBValue &b)
 
IPhysicalCamera_BitmapApertureSampler::RGBValue operator- (const IPhysicalCamera_BitmapApertureSampler::RGBValue &a, const IPhysicalCamera_BitmapApertureSampler::RGBValue &b)
 
void SortPolygonDiagonals (int dnum, int *diag)
 Puts diagonals in increase-by-last-index, decrease-by-first order. More...
 
void BestConvexDiagonals (const BufferProxy< const int > &faceVertexIndices, const BufferProxy< const Point3 > &meshVertices, int *diag)
 Uses a triangulation scheme optimized for convex polygons to find a set of diagonals for this sequence of vertices, creating a triangulation for the polygon they form. More...
 
void BestConvexDiagonals (const BufferProxy< const int > &faceVertexIndices, const BufferProxy< const DPoint3 > &meshVertices, int *diag)
 Uses a triangulation scheme optimized for convex polygons to find a set of diagonals for this sequence of vertices, creating a triangulation for the polygon they form. More...
 
void FindDiagonals (const BufferProxy< const int > &faceVertexIndices, const BufferProxy< const Point3 > &meshVertices, int *diag)
 This method finds diagonals for this sequence of vertices, creating a triangulation for the polygon they form. More...
 
void FindDiagonals (const BufferProxy< const int > &faceVertexIndices, const BufferProxy< const DPoint3 > &meshVertices, int *diag)
 This method finds diagonals for this sequence of vertices, creating a triangulation for the polygon they form. More...
 
void GetTriangles (int deg, int *diag, Tab< int > &tri)
 This method fills in the table with the full triangulation for the face, based on the internal diagonal list. More...
 
void GetTriangles (int deg, const int *diag, Tab< int > &tri)
 This method fills in the table with the full triangulation for the face, based on the internal diagonal list. More...
 
void GetTriangles (int deg, int *diag, int *out_tri)
 This method fills in the buffer with the full triangulation for the face, based on the internal diagonal list. More...
 
void GetTriangles (uint64_t deg, uint64_t *diag, uint64_t *out_tri)
 
void GetTriangles (int deg, const int *diag, int *out_tri)
 This method fills in the buffer with the full triangulation for the face, based on the internal diagonal list. More...
 
void GetTriangles (uint64_t deg, const uint64_t *diag, uint64_t *out_tri)
 
UtilExport float GetUIScaleFactor (int monitorID=-1)
 Returns the UI scaling factor relative to a default of 96 DPI. More...
 
UtilExport float GetUIUserScaleFactor ()
 Get the additional user UI scaling factor. More...
 
int UIScaled (int value, int monitorID=-1)
 Returns the given value multiplied with the UI scaling factor. More...
 
float UIScaled (float value, int monitorID=-1)
 Returns the given value multiplied with the UI scaling factor. More...
 
int UIUnScaled (int value, int monitorID=-1)
 Returns the given value divided with the UI scaling factor. More...
 
float UIUnScaled (float value, int monitorID=-1)
 Returns the given value divided with the UI scaling factor. More...
 
void ScaleRect (RECT &rect, int monitorID=-1)
 Scaling of a rectangle values based on UIScaleFactor. More...
 
void UnscaleRect (RECT &rect, int monitorID=-1)
 Unscaling of a rectangle values based on UIScaleFactor. More...
 
UtilExport HBITMAP GetUIScaledBitmap (HBITMAP bitmap, int monitorID=-1)
 Returns a scaled copy of the bitmap if the UI scaling factor is not 1.0. More...
 
UtilExport HRESULT AnnotateControlName (HWND hWnd, const MSTR &name)
 Annotates the control with Microsoft Active Accessibility name property. More...
 
UtilExport HRESULT RemoveAnnotatedNameFromControl (HWND hWnd)
 Removes the Microsoft Active Accessibility name from the control. More...
 
CoreExport void ScaleFileOpenSaveDialogToolbar (HWND hDlg)
 Scales the toolbar size and icons in standard file open/save dialogs. More...
 
CoreExport INT_PTR WINAPI MinimalMaxFileOpenHookProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 A minimal LPOFNHOOKPROC for scaling the toolbar size and icons in standard file open/save dialogs. More...
 
UtilExport int MaxMessageBox (HWND parent, LPCMSTR text, LPCMSTR caption, unsigned int type, unsigned int exType=0, DWORD *exRet=nullptr)
 Provides an extended message box functionality. This is used to support message dialogs with a 'Hold', a 'Help' button and/or a 'Do not show this message again' check box. More...
 
CoreExport bool SearchComboBox (HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
 Multiple character search for ComboBoxes. More...
 
CoreExport bool SearchListBox (HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
 Multiple character search for ListBoxes. More...
 
CoreExport int GetDefaultToolTipMaxWidth ()
 

Function Documentation

◆ GetHInstance()

HINSTANCE MaxSDK::GetHInstance ( )
inline

Get the calling module's HINSTANCE.

Returns
Handle pointing to the start of the calling module.
29 {
30  return reinterpret_cast<HINSTANCE>(&__ImageBase);
31 }
EXTERN_C IMAGE_DOS_HEADER __ImageBase
Definition: dllutilities.h:16

◆ GetResourceStringAsMSTR() [1/4]

MSTR MaxSDK::GetResourceStringAsMSTR ( UINT  resourceId)
inline

Extract a resource from the calling module's string table.

GetResourceStringAsMSTR is essentially a thread-safe wrapper around the Win32 API's LoadString, but it saves client code from the bother of dealing with its HINSTANCE, of maintaining a buffer, and reduces duplicated code.

Parameters
resourceIdIdentifier for the desired string resource within the calling module's string table.
Returns
An MSTR containing the resource string, empty if the requested resource is not found.
47 {
48  return MaxSDK::GetResourceStringAsMSTR(GetHInstance(), resourceId);
49 }
HINSTANCE GetHInstance()
Get the calling module's HINSTANCE.
Definition: dllutilities.h:28
MSTR GetResourceStringAsMSTR(UINT resourceId)
Extract a resource from the calling module's string table.
Definition: dllutilities.h:46

◆ GetResourceStringAsMSTR() [2/4]

bool MaxSDK::GetResourceStringAsMSTR ( UINT  resourceId,
MSTR resourceString 
)
inline

Extract a resource from the calling module's string table.

GetResourceStringAsMSTR is essentially a thread-safe wrapper around the Win32 API's LoadString, but it saves client code from the bother of dealing with its HINSTANCE, of maintaining a buffer, and reduces duplicated code.

Parameters
resourceIdIdentifier for the desired string resource within the calling module's string table.
resourceStringUpdated to contain the resource string if the requested resource is not found.
Returns
true if the requested resource is found, false if not
64 {
65  return MaxSDK::GetResourceStringAsMSTR(GetHInstance(), resourceId, resourceString);
66 
67 }

◆ GetResourceStringAsMSTR() [3/4]

UtilExport MSTR MaxSDK::GetResourceStringAsMSTR ( HINSTANCE  hinstance,
UINT  resourceId 
)

Extract a resource from a module's string table.

GetResourceString is essentially a thread-safe wrapper around the Win32 API's LoadString, but it saves client code from the bother of maintaining a buffer and reduces duplicated code. Optimally, GetResourceString should be called through the single-parameter version from dllutilities.h.

Parameters
hinstanceHandle to the module whose string table will be queried for the resource.
resourceIdIdentifier for the desired string resource within the calling module's string table.
Returns
An MSTR containing the resource string, empty if the requested resource is not found.

◆ GetResourceStringAsMSTR() [4/4]

UtilExport bool MaxSDK::GetResourceStringAsMSTR ( HINSTANCE  hinstance,
UINT  resourceId,
MSTR resourceString 
)

Extract a resource from a module's string table.

GetResourceString is essentially a thread-safe wrapper around the Win32 API's LoadString, but it saves client code from the bother of maintaining a buffer and reduces duplicated code. Optimally, GetResourceString should be called through the single-parameter version from dllutilities.h.

Parameters
hinstanceHandle to the module whose string table will be queried for the resource.
resourceIdIdentifier for the desired string resource within the calling module's string table.
resourceStringUpdated to contain the resource string if the requested resource is not found.
Returns
true if the requested resource is found, false if not

◆ LoadMaxMultiResIcon()

CoreExport QIcon MaxSDK::LoadMaxMultiResIcon ( const QString &  iconName)

Loads a set of Images into a multi-resolution QIcon.

This function looks into the UI_ln folder of the 3dsmax installation (or the internal Qt resource system) to find a set of matching image files to mark for usage. The actual images get loaded on demand.

The naming of those files has to match one of the following schemes:

[:/]Folder/BaseName[_on|_off][_size].ext
[:/]Folder/BaseName[_on|_off][_(width)x(height)].ext
controller mat max min numsubs x z controller keys x z controller keys x
Definition: generics.inl:212

So for example:

iconName files on disk QIcon entry size QIcon state
Undo Undo_16.png 16 x 16px Off
Undo Undo_off_24.png 24 x 24px Off
Undo Undo_on_32.png 32 x 32px On
Undo Undo_on_100.png 100 x 100px On
Undo Undo_16x32.png 16 x 32px Off
Undo Undo_on_16x32.png 16 x 32px On

In that case a single call on LoadMaxMultiResIcon( "Undo" ) would produce an QIcon containing all the different sizes and states.

iconName files on disk QIcon entry size QIcon state
Redo.png Redo.png based on file[^1] Off
Redo.png Redo_on.png based on file[^1] On

[^1]: This forces the QIcon to load the image file to determine its actual size.

iconName files on disk QIcon entry size QIcon state
Fancy.jpg Fancy_300x100.jpg 300 x 100px Off
Fancy.jpg Fancy_150x50.jpg 150 x 50px Off

The iconName may also contain folders or sub-folders, so these fileNames are fine, too (slashes or backslashes can be used):

"SME/Editor.png" "SME/Nodes/Collapse.png" "SME\\Nodes\\RemoveItem.png"

Based on the current 3dsmax theme (Dark/Light) the icons are retrieved from different locations on the file-system, so depending on the setting "SME/Editor.png" may get:

UI_ln/Icons/Dark/SME/Editor*.png UI_ln/Icons/Light/SME/Editor*.png

If the iconName starts with ":/", it points to a Qt Resource like ":/Icons/Undo", the theming is not automatically applied, so the caller is responsible to actually provide the correct resource-bundle. Nevertheless the QIcons internal pixmap cache will be wiped on a theme change, so the next paint call on the QIcon will reload the acquired version.

If a size of an image inside an QIcon is not available but requested for painting, Qt will downscale the next bigger version automatically - but will never scale images up.

Parameters
[in]iconNameThe name of the icon to load. The path, basename and the extension of the file is used to find matching icons. The Extension may be omitted and .png is assumed to be the default extension.
Returns
A QIcon that contains all the images that matches the given iconName. Might be an empty QIcon if no match could be found.
See also
QIcon class in the Qt documentation, Qt Resource System

◆ CreateHICONFromMaxMultiResIcon() [1/2]

CoreExport HICON MaxSDK::CreateHICONFromMaxMultiResIcon ( const MSTR iconName,
int  width,
int  height,
bool  enabled = true,
bool  on = false 
)

Create an HICON from a MaxMultiResIcon.

Loads a QIcon using LoadMaxMultiResIcon, and tries to extract a HICON from it using the given size, mode and state settings. For a detailed description on the iconName syntax, please have a closer look at the LoadMaxMultiResIcon function. The HICON returned might be smaller than requested, but never larger.

Convenience method for legacy usage, for example when using one size of a multi-resolution-icon in a win32 HMENU. Note that the resulting HICON wont refresh itself on a theme change, as the QIcon does.

Parameters
[in]iconNameThe name of the icon to load. This may be the actual filename, but also can be some folder/basename combination, as described in detail in LoadMaxMultiResIcon.
[in]widthThe (maximum) width of the image to be loaded.
[in]heightThe (maximum) height of the image to be loaded.
[in]enabledSets, if an enabled or disabled version of the icon should be retrieved (QIcon::Normal vs QIcon::Disabled)
[in]onSets, if the On or Off state of the icon should be retrieved (QIcon::On vs QIcon::Off).
Returns
A new HICON for the given parameters, if available, a nullptr otherwise. The HICON might be smaller than requested, but never larger.
See also
LoadMaxMultiResIcon, QIcon::Mode, QIcon::State

◆ CreateHICONFromMaxMultiResIcon() [2/2]

HICON MaxSDK::CreateHICONFromMaxMultiResIcon ( const MSTR iconName,
int  size,
bool  enabled = true,
bool  on = false 
)
inline
340  {
341  return CreateHICONFromMaxMultiResIcon( iconName, size, size, enabled, on );
342  }
HICON CreateHICONFromMaxMultiResIcon(const MSTR &iconName, int size, bool enabled=true, bool on=false)
Definition: maxicon.h:339

◆ CreateHIMAGELISTFromMaxMultiResIcon()

CoreExport HIMAGELIST MaxSDK::CreateHIMAGELISTFromMaxMultiResIcon ( const MSTR imageIconName,
int  size,
int  count,
bool  alpha = true,
bool  enabled = true,
bool  on = false 
)

Create an HIMAGELIST from a MaxMultiResIcon.

Loads a QIcon using LoadMaxMultiResIcon, and tries to convert it to a HIMAGELIST using the given size, mode and state settings. For a detailed description on the iconName syntax, please have a closer look at the LoadMaxMultiResIcon function.

Parameters
[in]imageIconNameThe name of the icon to load. This may be the actual filename, but also can be some folder/basename combination, as described in detail in LoadMaxMultiResIcon.
[in]sizeThe width and height of the component icons in the image to be loaded.
[in]countThe number of component icons in the image to be loaded.
[in]alphaSets, if alpha channel in icon should be used when creating the bitmap from the QIcon
[in]enabledSets, if an enabled or disabled version of the icon should be retrieved (QIcon::Normal vs QIcon::Disabled)
[in]onSets, if the On or Off state of the icon should be retrieved (QIcon::On vs QIcon::Off).
Returns
A new HIMAGELIST for the given parameters, if available, a nullptr otherwise.
See also
LoadMaxMultiResIcon, QIcon::Mode, QIcon::State

◆ QmaxMessageBox()

UtilExport int MaxSDK::QmaxMessageBox ( QWidget *  parent,
const QString &  text,
const QString &  caption,
unsigned int  type,
unsigned int  exType = 0,
DWORD *  exRet = nullptr 
)

Provides an extended message box functionality. This is used to support message dialogs with a 'Hold', a 'Help' button and/or a 'Do not show this message again' check box.

The first four parameters correspond to the Win32 MessageBox method parameters, but not all Win32 MessageBox functionality is supported. The last two optional arguments add the extended functionality - exType is used for adding the additional buttons, and exRet is used for getting the extra return info. MaxSDK::MaxMessageBox and MaxSDK::QmaxMessageBox should be used in preference to Win32 MessageBox due to string clipping that can occur with Win32 MessageBox in some locales with some font types and sizes on Windows 10 when dpi scaling is greater than 100%.

Parameters
parent- The parent QWidget
text- The main message
caption- The caption or title for the message window
type- The type of message box. The supported types are:
  • MB_YESNO
  • MB_OK
  • MB_YESNOCANCEL
  • MB_OKCANCEL
  • MB_ABORTRETRYIGNORE
  • MB_RETRYCANCEL
  • MB_CANCELTRYCONTINUE The following Win32 MessageBox flags are supported:
  • MB_DEFBUTTON*
  • MB_SYSTEMMODAL
  • MB_TOPMOST The following Win32 MessageBox flags are not supported and will be ignored:
  • MB_TASKMODAL
  • MB_NOFOCUS
  • MB_SETFOREGROUND
  • MB_RIGHT
  • MB_RTLREADING The MB_HELP flag is supported, albeit in a manner different than Win32 MessageBox. If specified and 'exRet' is not null, a Help button is displayed and clicking it causes 3ds Max Help to be displayed using the help topic id that is passed through 'exRet'. The MB_DEFBUTTON* flag applies to the standard message box buttons, and does not apply to the optional Help and Hold buttons
exType- Used for adding additional UI elements. The supported bit field values are:
  • MAX_MB_HOLD - display a 'Hold' button.
  • MAX_MB_DONTSHOWAGAIN - display a 'Do not show this message again' check box
exRet- Used for specifying the help file topic id and for returning extra info:
  • if MAX_MB_DONTSHOWAGAIN is specified as part of 'exType', on return the MAX_MB_DONTSHOWAGAIN bit will or will not be set in 'exRet' based on check box setting.
  • if MAX_MB_HOLD is specified as part of 'exType', if the button is pressed the MAX_MB_HOLD bit will set in 'exRet' and a value of IDOK is returned.
Note
See "https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-messagebox" for a description of the Win32 MessageBox method parameters.

◆ Q_DECLARE_METATYPE() [1/5]

MaxSDK::Q_DECLARE_METATYPE ( AColor  )

◆ Q_DECLARE_METATYPE() [2/5]

MaxSDK::Q_DECLARE_METATYPE ( Point2  )

◆ Q_DECLARE_METATYPE() [3/5]

MaxSDK::Q_DECLARE_METATYPE ( Point3  )

◆ Q_DECLARE_METATYPE() [4/5]

MaxSDK::Q_DECLARE_METATYPE ( Point4  )

◆ Q_DECLARE_METATYPE() [5/5]

MaxSDK::Q_DECLARE_METATYPE ( Matrix3  )

◆ QStringFromID()

QString QStringFromID ( int  resourceID)
inline
24 {
25  return QString(MaxSDK::GetResourceStringAsMSTR(resourceID));
26 }

◆ operator*() [1/3]

IPhysicalCamera_BitmapApertureSampler::RGBValue MaxSDK::operator* ( const float  a,
const IPhysicalCamera_BitmapApertureSampler::RGBValue b 
)
inline
29 {
30  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a * b.r, a * b.g, a * b.b);
31 }

◆ operator*() [2/3]

IPhysicalCamera_BitmapApertureSampler::RGBValue MaxSDK::operator* ( const IPhysicalCamera_BitmapApertureSampler::RGBValue a,
const float  b 
)
inline
34 {
35  return b * a;
36 }

◆ operator*() [3/3]

39 {
40  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r * b.r, a.g * b.g, a.b * b.b);
41 }

◆ operator+()

44 {
45  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r + b.r, a.g + b.g, a.b + b.b);
46 }

◆ operator-()

49 {
50  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r - b.r, a.g - b.g, a.b - b.b);
51 }

◆ SortPolygonDiagonals()

void MaxSDK::SortPolygonDiagonals ( int  dnum,
int diag 
)

Puts diagonals in increase-by-last-index, decrease-by-first order.

This sorts the diagonals in the following fashion: each diagonal is reordered so that its smaller index comes first, then its larger. Then the list of diagonals is sorted so that it increases by second index, then decreases by first index. Such an ordered list for a 9-gon might be (1,3),(0,3), (0,4),(5,7),(4,7),(4,8). (This order is especially convenient for converting into triangles - it makes for a linear-time conversion.) SortPolygonDiagonals() uses qsort for speed.

Parameters
[in]dnumThe size of the diag array - essentially double the number of diagonals.

[in,out]diagThe diagonals.

◆ BestConvexDiagonals() [1/2]

void MaxSDK::BestConvexDiagonals ( const BufferProxy< const int > &  faceVertexIndices,
const BufferProxy< const Point3 > &  meshVertices,
int diag 
)

Uses a triangulation scheme optimized for convex polygons to find a set of diagonals for this sequence of vertices, creating a triangulation for the polygon they form.

Face vertices are optional. If there is no index buffer, we assume they are trivial: 0, 1, 2, 3, 4, etc.

Parameters
[in]faceVertexIndicesThe face vertices in the sequence.

[in]meshVerticesThe array of vertices.

[out]diagA pointer to an array of size (deg-3)*2 where the diagonals can be put.

◆ BestConvexDiagonals() [2/2]

void MaxSDK::BestConvexDiagonals ( const BufferProxy< const int > &  faceVertexIndices,
const BufferProxy< const DPoint3 > &  meshVertices,
int diag 
)

Uses a triangulation scheme optimized for convex polygons to find a set of diagonals for this sequence of vertices, creating a triangulation for the polygon they form.

Face vertices are optional. If there is no index buffer, we assume they are trivial: 0, 1, 2, 3, 4, etc.

Parameters
[in]faceVertexIndicesThe face vertices in the sequence.

[in]meshVerticesThe array of vertices.

[out]diagA pointer to an array of size (deg-3)*2 where the diagonals can be put.

◆ FindDiagonals() [1/2]

void MaxSDK::FindDiagonals ( const BufferProxy< const int > &  faceVertexIndices,
const BufferProxy< const Point3 > &  meshVertices,
int diag 
)

This method finds diagonals for this sequence of vertices, creating a triangulation for the polygon they form.

Parameters
[in]faceVertexIndicesThe face vertices in the sequence.

[in]meshVerticesThe array of vertices.

[out]diagA pointer to an array of size (deg-3)*2 where the diagonals can be put.

◆ FindDiagonals() [2/2]

void MaxSDK::FindDiagonals ( const BufferProxy< const int > &  faceVertexIndices,
const BufferProxy< const DPoint3 > &  meshVertices,
int diag 
)

This method finds diagonals for this sequence of vertices, creating a triangulation for the polygon they form.

Parameters
[in]faceVertexIndicesThe face vertices in the sequence.

[in]meshVerticesThe array of vertices.

[out]diagA pointer to an array of size (deg-3)*2 where the diagonals can be put.

◆ GetTriangles() [1/6]

void MaxSDK::GetTriangles ( int  deg,
int diag,
Tab< int > &  tri 
)

This method fills in the table with the full triangulation for the face, based on the internal diagonal list.

The table is set to size (deg-2)*3.

Parameters
[in]degFace degree (number of vertices).

[in,out]diagThe diagonals.

[out]triThe output triangle indices, 3 indices per triangle.

◆ GetTriangles() [2/6]

void MaxSDK::GetTriangles ( int  deg,
const int diag,
Tab< int > &  tri 
)

This method fills in the table with the full triangulation for the face, based on the internal diagonal list.

The table is set to size (deg-2)*3. Diags are not reordered.

Parameters
[in]degFace degree (number of vertices).

[in]diagThe diagonals.

[out]triThe output triangle indices, 3 indices per triangle.

◆ GetTriangles() [3/6]

void MaxSDK::GetTriangles ( int  deg,
int diag,
int out_tri 
)

This method fills in the buffer with the full triangulation for the face, based on the internal diagonal list.

The buffer must be of size (deg-2)*3.

Parameters
[in]degFace degree (number of vertices).

[in,out]diagThe diagonals.

[out]out_triThe output triangle indices, 3 indices per triangle.

◆ GetTriangles() [4/6]

void MaxSDK::GetTriangles ( uint64_t  deg,
uint64_t *  diag,
uint64_t *  out_tri 
)

◆ GetTriangles() [5/6]

void MaxSDK::GetTriangles ( int  deg,
const int diag,
int out_tri 
)

This method fills in the buffer with the full triangulation for the face, based on the internal diagonal list.

The buffer must be of size (deg-2)*3. Diags are not reordered.

Parameters
[in]degFace degree (number of vertices).

[in]diagThe diagonals.

[out]out_triThe output triangle indices, 3 indices per triangle.

◆ GetTriangles() [6/6]

void MaxSDK::GetTriangles ( uint64_t  deg,
const uint64_t *  diag,
uint64_t *  out_tri 
)

◆ GetUIScaleFactor()

UtilExport float MaxSDK::GetUIScaleFactor ( int  monitorID = -1)

Returns the UI scaling factor relative to a default of 96 DPI.

The function reads the systems monitor settings and calculates the scaling factor based on the vertical logical DPI (what can be set and changed through the windows OS control panel). It will return 1.0f, if some value couldn't be retrieved or calculated, or a calculation result will be 0.0f; so it is safe to use the result of this function to simply multiply UI sizes without further checking.

Parameters
[in]monitorIDThe index of the monitor to get the actual logical vertical DPI from. Default value is set to -1, which means the primary system monitor.
Returns
The scaling factor, if it could be retrieved and calculated, 1.0f in other cases.

◆ GetUIUserScaleFactor()

UtilExport float MaxSDK::GetUIUserScaleFactor ( )

Get the additional user UI scaling factor.

Returns
The users ui scaling factor.
See also
SetUIUserScaleFactor, GetUIScaleFactor

◆ UIScaled() [1/2]

int MaxSDK::UIScaled ( int  value,
int  monitorID = -1 
)
inline

Returns the given value multiplied with the UI scaling factor.

Parameters
[in]valueThe value which should be dpi scaled.
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
Returns
The dpi scaled value.
See also
GetUIScaleFactor
63  {
64  return (int)(value * GetUIScaleFactor( monitorID ));
65  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.

◆ UIScaled() [2/2]

float MaxSDK::UIScaled ( float  value,
int  monitorID = -1 
)
inline

Returns the given value multiplied with the UI scaling factor.

Parameters
[in]valueThe value which should be dpi scaled.
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
Returns
The dpi scaled value.
See also
UIUnScaled, GetUIScaleFactor
78  {
79  return value * GetUIScaleFactor( monitorID );
80  }

◆ UIUnScaled() [1/2]

int MaxSDK::UIUnScaled ( int  value,
int  monitorID = -1 
)
inline

Returns the given value divided with the UI scaling factor.

Use this function to do an unscaling of a previous dpi scaled value.

Parameters
[in]valueThe value which should be dpi unscaled.
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
Returns
The dpi unscaled value.
See also
UIScaled, GetUIScaleFactor
94  {
95  return (int)(value / GetUIScaleFactor( monitorID ));
96  }

◆ UIUnScaled() [2/2]

float MaxSDK::UIUnScaled ( float  value,
int  monitorID = -1 
)
inline

Returns the given value divided with the UI scaling factor.

Use this function to do an unscaling of a previous dpi scaled value.

Parameters
[in]valueThe value which should be dpi unscaled.
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
Returns
The dpi unscaled value.
See also
UIScaled, GetUIScaleFactor
110  {
111  return value / GetUIScaleFactor( monitorID );
112  }

◆ ScaleRect()

void MaxSDK::ScaleRect ( RECT &  rect,
int  monitorID = -1 
)
inline

Scaling of a rectangle values based on UIScaleFactor.

Parameters
[in,out]rectRECT struct to be scaled to UIScaleFactor
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
124  {
125  float scaleFactor = GetUIScaleFactor( monitorID );
126  rect.top = (LONG)(rect.top * scaleFactor);
127  rect.bottom = (LONG)(rect.bottom * scaleFactor);
128  rect.left = (LONG)(rect.left * scaleFactor);
129  rect.right = (LONG)(rect.right * scaleFactor);
130  }

◆ UnscaleRect()

void MaxSDK::UnscaleRect ( RECT &  rect,
int  monitorID = -1 
)
inline

Unscaling of a rectangle values based on UIScaleFactor.

Parameters
[in,out]rectRECT struct to be unscaled to UIScaleFactor
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
141  {
142  float scaleFactor = GetUIScaleFactor( monitorID );
143  rect.top = (LONG)(rect.top / scaleFactor);
144  rect.bottom = (LONG)(rect.bottom / scaleFactor);
145  rect.left = (LONG)(rect.left / scaleFactor);
146  rect.right = (LONG)(rect.right / scaleFactor);
147  }

◆ GetUIScaledBitmap()

UtilExport HBITMAP MaxSDK::GetUIScaledBitmap ( HBITMAP  bitmap,
int  monitorID = -1 
)

Returns a scaled copy of the bitmap if the UI scaling factor is not 1.0.

Parameters
[in]bitmapThe bitmap to be dpi scaled.
[in]monitorIDThe index of the monitor to get the actual logical vertical dpi from. Default value is set to -1, which means the primary system monitor.
Returns
The dpi scaled bitmap if the UI scaling factor is not 1.0, otherwise null.

◆ AnnotateControlName()

UtilExport HRESULT MaxSDK::AnnotateControlName ( HWND  hWnd,
const MSTR name 
)

Annotates the control with Microsoft Active Accessibility name property.

Parameters
[in]hWndThe window handle of the control to be annotated
[in]nameThe name annotated to the control
Returns
S_OK or the error codes

◆ RemoveAnnotatedNameFromControl()

UtilExport HRESULT MaxSDK::RemoveAnnotatedNameFromControl ( HWND  hWnd)

Removes the Microsoft Active Accessibility name from the control.

Parameters
[in]hWndThe window handle of the control to be removed annotation
Returns
S_OK or the error codes

◆ ScaleFileOpenSaveDialogToolbar()

CoreExport void MaxSDK::ScaleFileOpenSaveDialogToolbar ( HWND  hDlg)

Scales the toolbar size and icons in standard file open/save dialogs.

Scales the toolbar containing the 'Go To Last Folder Visisted', 'Up One Level', 'Create New Folder' buttons, and the 'View Menu' dropdown, by the system dpi scaling value. The hDlg parameter is HWND passed to the LPOFNHOOKPROC specified in the OPENFILENAME structure. Technically, this HWND is a child of the win32 file open / save dialog

static INT_PTR WINAPI MinimalMaxFileOpenHookProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
...
CoreExport INT_PTR WINAPI MinimalMaxFileOpenHookProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
A minimal LPOFNHOOKPROC for scaling the toolbar size and icons in standard file open/save dialogs.
CoreExport void ScaleFileOpenSaveDialogToolbar(HWND hDlg)
Scales the toolbar size and icons in standard file open/save dialogs.
Parameters
[in]hDlgThe dialog's HWND.

◆ MinimalMaxFileOpenHookProc()

CoreExport INT_PTR WINAPI MaxSDK::MinimalMaxFileOpenHookProc ( HWND  hDlg,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

A minimal LPOFNHOOKPROC for scaling the toolbar size and icons in standard file open/save dialogs.

Use this LPOFNHOOKPROC when not customization of the Open/Save File dialog is being performed.
Example usage:

OPENFILENAME ofn;
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.Flags = OFN_HIDEREADONLY | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_ENABLESIZING;
ofn.lpfnHook = (LPOFNHOOKPROC)MaxSDK::MinimalMaxFileOpenHookProc;
...
BOOL res = GetSaveFileName(&ofn);

Implementation:

INT_PTR WINAPI MinimalMaxFileOpenHookProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_INITDIALOG)
return FALSE;
}

◆ MaxMessageBox()

UtilExport int MaxSDK::MaxMessageBox ( HWND  parent,
LPCMSTR  text,
LPCMSTR  caption,
unsigned int  type,
unsigned int  exType = 0,
DWORD *  exRet = nullptr 
)

Provides an extended message box functionality. This is used to support message dialogs with a 'Hold', a 'Help' button and/or a 'Do not show this message again' check box.

The first four parameters correspond to the Win32 MessageBox method parameters, but not all Win32 MessageBox functionality is supported. The last two optional arguments add the extended functionality - exType is used for adding the additional buttons, and exRet is used for getting the extra return info. MaxSDK::MaxMessageBox and MaxSDK::QmaxMessageBox should be used in preference to Win32 MessageBox due to string clipping that can occur with Win32 MessageBox in some locales with some font types and sizes on Windows 10 when dpi scaling is greater than 100%.

Parameters
parent- The parent QWidget
text- The main message
caption- The caption or title for the message window
type- The type of message box. The supported types are:
  • MB_YESNO
  • MB_OK
  • MB_YESNOCANCEL
  • MB_OKCANCEL
  • MB_ABORTRETRYIGNORE
  • MB_RETRYCANCEL
  • MB_CANCELTRYCONTINUE The following Win32 MessageBox flags are supported:
  • MB_DEFBUTTON*
  • MB_SYSTEMMODAL
  • MB_TOPMOST The following Win32 MessageBox flags are not supported and will be ignored:
  • MB_TASKMODAL
  • MB_NOFOCUS
  • MB_SETFOREGROUND
  • MB_RIGHT
  • MB_RTLREADING The MB_HELP flag is supported, albeit in a manner different than Win32 MessageBox. If specified and 'exRet' is not null, a Help button is displayed and clicking it causes 3ds Max Help to be displayed using the help topic id that is passed through 'exRet'. The MB_DEFBUTTON* flag applies to the standard message box buttons, and does not apply to the optional Help and Hold buttons
exType- Used for adding additional UI elements. The supported bit field values are:
  • MAX_MB_HOLD - display a 'Hold' button.
  • MAX_MB_DONTSHOWAGAIN - display a 'Do not show this message again' check box
exRet- Used for specifying the help file topic id and for returning extra info:
  • if MAX_MB_DONTSHOWAGAIN is specified as part of 'exType', on return the MAX_MB_DONTSHOWAGAIN bit will or will not be set in 'exRet' based on check box setting.
  • if MAX_MB_HOLD is specified as part of 'exType', if the button is pressed the MAX_MB_HOLD bit will set in 'exRet' and a value of IDOK is returned.
Note
See "https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-messagebox" for a description of the Win32 MessageBox method parameters.

◆ SearchComboBox()

CoreExport bool MaxSDK::SearchComboBox ( HWND  hWnd,
MCHAR  key,
const MCHAR szTrim = NULL 
)

Multiple character search for ComboBoxes.

This method will select an entry in the ComboBox based on the multiple key entries over a set time period. The functionality mimics the standard windows ListView behavior, including the documented one second time period for key entries. It is intended to be used in conjunction with the WM_CHAR message in the ComboBox's callback.

Example usage:

case WM_CHAR:
return MaxSDK::SearchComboBox( hWnd, (MCHAR)wParam, _M(" "));
CoreExport bool SearchComboBox(HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
Multiple character search for ComboBoxes.
#define _M(x)
Used to wrap string literals.
Definition: strbasic.h:67
#define MCHAR
MBCS/Unicode helper defines std::wofstream doesn't mix well with Unicode.
Definition: strbasic.h:42
Parameters
[in]hWndWindow handle of ComboBox
[in]keyCharacter entered by user
[in]szTrimOptional parameter. Default is NULL. Any leading characters in the ComboBox entries that are contained in szTrim will be removed prior to comparing to the search string.
Returns
true if match found, false if not

◆ SearchListBox()

CoreExport bool MaxSDK::SearchListBox ( HWND  hWnd,
MCHAR  key,
const MCHAR szTrim = NULL 
)

Multiple character search for ListBoxes.

This method will select an entry in the ListBox based on the multiple key entries over a set time period. The functionality mimics the standard windows ListView behavior, including the documented one second time period for key entries. It is intended to be used in conjunction with the WM_CHAR message in the ListBox's callback.

Example usage:

case WM_CHAR:
return MaxSDK::SearchListBox( hWnd, (MCHAR)wParam, _M(" "));
CoreExport bool SearchListBox(HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
Multiple character search for ListBoxes.
Parameters
[in]hWndWindow handle of ListBox
[in]keyCharacter entered by user
[in]szTrimOptional parameter. Default is NULL. Any leading characters in the ListBox entries that are contained in szTrim will be removed prior to comparing to the search string.
Returns
true if match found, false if not

◆ GetDefaultToolTipMaxWidth()

CoreExport int MaxSDK::GetDefaultToolTipMaxWidth ( )
Remarks
Returns the default maximum width, in pixels, for tooltip windows in Max. Tooltips wider than the maximum are broken into multiple lines.