MaxSDK Namespace Reference

Namespace description

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.

These are classes and enums to support the Data Channel Modifier.

These classes let you define skin weighting using a voxel or height map based algorithm.

See https://msdn.microsoft.com/en-us/library/windows/desktop/aa380369(v=vs.85).aspx for a description of OLE Structured Storage. Within 3ds Max, this API is used by CustomFileStream.dlu and implemented by CustomFileStreamAPI.dll source. The source for these are in maxsdk\samples\utilities\CustomFileStream. CustomFileStream.dlu defines the CustomSceneStreamManager and CustomFileStream FPS (Function Publishing System) interfaces. CustomFileStreamAPI.dll defines the low level file access methods that are used by CustomFileStream.dlu, and can be used by external applications to read, write, and modify the CustomFileStream as supported by the CustomSceneStreamManager and CustomFileStream interfaces. To use this dll, you would link against CustomFileStreamAPI.lib in maxsdk\libs. There are no dependencies by CustomFileStreamAPI.dll on other 3ds Max dlls. To see how these low level methods should be tied together, see the CustomFileStream.dlu source. This API will read and write CustomFileStream to 3ds Max scene files written by any version of 3ds Max. The CustomSceneStreamManager is required to persist the custom data streams across scene file load and save operations. CustomFileStream as supported by CustomSceneStreamManager and CustomFileStream are located in the CustomFileStream IStorage of the 3ds Max scene file main IStorage. Each stream consists of a header consisting of a 1 WORD version number and two 32 bit DWORD values (see CustomFileStreamHeader below), followed by a non-null terminated wchar string or an array of null terminated wchar strings. The current version number is 1. The first 32 bit DWORD is considered private (flag bit usage defined by Autodesk) and the second is considered public (flag bit usage defined by the creator of the stream). Currently, bits 1 to 3 of the private DWORD are used. Bit 1 signifies that the stream is a persistent stream. When this bit is set, the CustomSceneStreamManager will write this stream to the scene file when the scene file is saved. This allows an CustomFileStream to be automatically persisted across a load/save operation. Bit 2 signifies that the stream is to be saved to the scene file when the scene file is saved, but the stream is not necessarily a persistent stream. This allows the user to add streams to CustomSceneStreamManager's cache and have those streams be written to the scene file. This bit is not persisted to the scene file, and is cleared when read from the scene file. Bit 3 signifies that the stream is not to be added to the CustomSceneStreamManager's cache when the scene file is loaded. If neither of the first 2 bits are set, CustomSceneStreamManager does not write this stream to the scene file when the scene file is saved. The content of the stream is considered to be an array of strings if the last character in the content is a null character (signifying an array of null terminated strings), otherwise the content is considered to be a single non-null terminated string,

Samples of usage can be found in

maxsdk/samples/modifiers/bonesdef/VoxelWeights/BMD_Command_VoxelWeight.cpp

The Data Channel Modifier can be extened by adding additional Engines. This is done by having a plugin derive from IDataChannelEngine and using the SuperClassID DATACHANNELENGINE_SUPER_CLASS_ID. Any plugins that do that will appear in the Data Channel modifiers drop down list.

An IDataChannelEngine is just a black box solution that takes an MNMesh and then outputs an array that describes the mesh. For instance a Curvature engine would compute the curvature at each vertex and then return an array of floats one for each geometric vertex that describe the curvature.

The Data Channel modifier allows the vertex, edge and face channels to be modified. NOTE channels here just represent an array of data that describes part of a mesh and is not related to channels that flow up the stack. Vertex data is a bit tricky since some channels need face information and some do not. For instance the Vertex Selection channel implicitly is attached to the geometry face index so you cannot change that while something like a map channel has an explicit face channel attached to it. The Map Channel modifier allows you to copy different face index channels around but not edit them directly.

Namespaces

 AssetManagement
 
 ChannelData
 
 CUI
 
 CustomFileStreamAPI
 
 DebuggingTools
 
 GeomBind
 
 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.
 
 Util
 

Classes

class  Array
 A generic array container, with proper support for non-POD types. More...
 
class  ArrayAutoPtr
 Standard implementation of a AutoPtr for pointer to array types. More...
 
class  ArrayPointerDestructor
 DestructorPolicy template for pointer to array types. More...
 
class  AutoPtr
 Automatic memory-ownership pointer supporting "resource acquisition is initialization. More...
 
struct  AutoPtrRef
 Helper class used to implement destructive copy semantics and allow for AutoPtrs to be used as return values. More...
 
class  BufferProxy
 
class  DeleteThisAutoPtr
 Partial template specialization of AutoPtr for types requiring destruction through a DeleteThis method. More...
 
class  DeleteThisDestructor
 DestructorPolicy template for types requiring destruction through DeleteThis. More...
 
class  EdgeDescr
 
class  HoldBegin
 
class  IActiveShadeFragmentManager
 The IActiveShadeFragmentManager class is used to control the active shade fragment (in-viewport) active shade. More...
 
class  IHairModifier
 Provides access to hair strand definitions for a modifier that generates hair. More...
 
class  IHelpSystem
 This interface provides access to the 3ds Max Help system. More...
 
class  INoSignalCheckProgress
 An alternative progress reporting interface to class RendProgressCallback, which does not process the window message queue. More...
 
class  IPhysicalCamera
 Access to the properties of the Physical Camera object. More...
 
class  IPhysicalCamera_BitmapApertureSampler
 Utility class that provides efficient sampling for a bitmap aperture on the physical camera. More...
 
class  IPhysicalCameraToneOperator
 Access to the properties of the Physical Camera Exposure Control. 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  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  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  QmaxDockWidget
 
class  QmaxDoubleSpinBox
 
class  QmaxFloatSlider
 Qt Max slider for float values. More...
 
class  QmaxLightingSpinBox
 a special QmaxSpinBox for displaying lighting units. 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  QmaxMatrix3Spinner
 
class  QmaxMultiSpinner
 
class  QMaxParamBlockWidget
 Base class for QWidgets which are to be controlled by a parameter block/map. More...
 
class  QmaxPoint2Spinner
 
class  QmaxPoint3Spinner
 
class  QmaxPoint4Spinner
 
class  QmaxProxyDockingWinHostDelegate
 
class  QmaxRollup
 3ds Max Qt Rollup class. More...
 
class  QmaxSpinBox
 
class  QmaxSpinBoxPrivate
 
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  QmaxWorldSpinBox
 
class  SinglePointerDestructor
 DestructorPolicy template for pointer to single object types. More...
 
class  SingleWeakRefMaker
 Utility base class for a ReferenceMaker with a single target that does not share ownership of it's ReferenceTarget. More...
 
class  TexmapThreadSafe
 TexmapThreadSafe interface has been deprecated. More...
 
class  TypedSingleWeakRefMaker
 
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...
 

Typedefs

typedef MAX_DEPRECATED IInteractiveRenderer IAbortableRenderer
 
typedef MAX_DEPRECATED Renderer IStoppableRenderer
 

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...
 
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 ()
 

Typedef Documentation

typedef MAX_DEPRECATED IInteractiveRenderer IAbortableRenderer
Deprecated:
in 3ds Max 2017. All methods of IAbortableRenderer have been moved to class IInteractiveRenderer.
typedef MAX_DEPRECATED Renderer IStoppableRenderer
Deprecated:
in 3ds Max 2017. All methods of IStoppableRenderer have been moved to class Renderer.

Function Documentation

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
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
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 }
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
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.
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
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

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
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
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
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
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.
MaxSDK::Q_DECLARE_METATYPE ( AColor  )
MaxSDK::Q_DECLARE_METATYPE ( Point2  )
MaxSDK::Q_DECLARE_METATYPE ( Point3  )
MaxSDK::Q_DECLARE_METATYPE ( Point4  )
MaxSDK::Q_DECLARE_METATYPE ( Matrix3  )
QString QStringFromID ( int  resourceID)
inline
24 {
25  return QString(MaxSDK::GetResourceStringAsMSTR(resourceID));
26 }
MSTR GetResourceStringAsMSTR(UINT resourceId)
Extract a resource from the calling module's string table.
Definition: dllutilities.h:46
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 }
IPhysicalCamera_BitmapApertureSampler::RGBValue MaxSDK::operator* ( const IPhysicalCamera_BitmapApertureSampler::RGBValue a,
const float  b 
)
inline
34 {
35  return b * a;
36 }
39 {
40  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r * b.r, a.g * b.g, a.b * b.b);
41 }
44 {
45  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r + b.r, a.g + b.g, a.b + b.b);
46 }
49 {
50  return IPhysicalCamera_BitmapApertureSampler::RGBValue(a.r - b.r, a.g - b.g, a.b - b.b);
51 }
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.) DiagSort() uses qsort for speed.

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

[in,out]diagThe diagonals.
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.
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.
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.
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.
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.

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.
UtilExport float MaxSDK::GetUIUserScaleFactor ( )

Get the additional user UI scaling factor.

Returns
The users ui scaling factor.
See also
SetUIUserScaleFactor, GetUIScaleFactor
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.
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  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.
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  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.
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  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.
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  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.
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  }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.
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.
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
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
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:
...
Parameters
[in]hDlgThe dialog's HWND.
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;
}
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.
Parameters
parent- The parent window handle
text- The main message
caption- The caption or title for the message window
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(" "));
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
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(" "));
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
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.