3ds Max C++ API Reference
Loading...
Searching...
No Matches
MaxSDK Namespace Reference

Namespaces

namespace  AssetManagement
 
namespace  ChannelData
 These are classes and enums to support the Data Channel Modifier.
 
namespace  ColorManagement
 
namespace  CUI
 
namespace  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.
 
namespace  DebuggingTools
 
namespace  GeomBind
 These classes let you define skin weighting using a voxel or height map based algorithm.
 
namespace  Graphics
 
namespace  NotificationAPI
 
namespace  NotificationAPIUtils
 This namespace exposes 4 private internal calls to the 3dsmax application.
 
namespace  OSL
 
namespace  ParticleFlow
 
namespace  PerformanceTools
 
namespace  PointCloud
 
namespace  Populate
 
namespace  RenderingAPI
 
namespace  RenderTimeInstancing
 This API is meant to be implemented by plugins and used by renderers to instantiate objects at render-time.
 
namespace  SkinEngine
 
namespace  ThreadingDebuggingTools
 The functions in this namespace are provided to assist in debugging operations performed on a worker thread.
 
namespace  TranslationSupport
 MAXScript scripts are typically written in English, but when MAXScript accesses names from TrackView nodes only localized names are available.
 
namespace  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  BlockWrite_Ptr
 Holds a non-const pointer to data but restricts the ability to change the pointer itself. More...
 
class  BlockWrite_Value
 Holds a non-const copy of a value but restricts the ability to write to it. 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  IActiveShadeFragmentManager2
 The IActiveShadeFragmentManager2 class is used to control the ActiveShade fragment (in-viewport ActiveShade) and extends IActiveShadeFragmentManager. 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  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  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  ISceneScriptSecurityManager
 Interface class for the Scene Script Security Manager. More...
 
class  ISunPositioner
 Access to functionality and properties of the Sun Positioner object. More...
 
class  MeshChannelContainer
 Container for managing the MaxSDK::MeshChannelData objects. More...
 
class  MeshChannelData
 Base class for Mesh data channel objects. More...
 
class  MeshEdgeVisibilityChannelData
 Edge visibility channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MeshGeomChannelData
 Geometry channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MeshMaterialChannelData
 Material channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MeshTextureMapChannelData
 Texture map channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MeshTopoChannelData
 Topology channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MeshVertexColorChannelData
 Vertex color channel object for Mesh, stored in the MeshChannelContainer. More...
 
class  MNChannelContainer
 Container for managing the MaxSDK::MNChannelData objects. More...
 
class  MNChannelData
 Base class for MNMesh data channel objects. More...
 
class  MNGeomChannelData
 Geometry channel object for MNMesh, stored in the MNChannelContainer. More...
 
class  MNTextureMapChannelData
 Texture map channel object for MNMesh, stored in the MNChannelContainer. More...
 
class  MNTopoChannelData
 Topology channel object for MNMesh, stored in the MNChannelContainer. More...
 
class  MNVertexColorChannelData
 Vertex Color channel object for MNMesh, stored in the MNChannelContainer. More...
 
class  MtlSwitcherInterface
 
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
 3ds Max's version of a Qt QDoubleSpinBox. More...
 
class  QmaxFloatSlider
 Qt Max slider for float values. More...
 
class  QmaxLightingSpinBox
 A special QmaxDoubleSpinBox that displays its value using the current 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  QmaxRollupContainer
 
class  QmaxSpinBox
 3ds Max's version of a Qt QSpinBox. More...
 
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
 A special QmaxDoubleSpinBox that displays its value using the current display units like cm or inches. More...
 
class  RemediateNonManifoldGeometry
 
class  SharedMesh
 SharedMesh is a class to share a mesh between different classes. More...
 
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 MaxSDK::Graphics::RefPtr< SharedMeshSharedMeshPtr
 About SharedMeshPtr defined below : This template class act similar to CComPtr.
 

Enumerations

enum  TriangulationVersionType { TRIANGULATION_VER_2023_1 = 0 , TRIANGULATION_VER_2024 = 1 }
 Enumeration indexing available versions of the algorithm implemented by the variants of BuildDiagonals defined below. More...
 

Functions

HINSTANCE GetHInstance ()
 Get the calling module's HINSTANCE.
 
MSTR GetResourceStringAsMSTR (UINT resourceId)
 Extract a resource from the calling module's string table.
 
bool GetResourceStringAsMSTR (UINT resourceId, MSTR &resourceString)
 Extract a resource from the calling module's string table.
 
void SortPolygonDiagonals (geo::span< int > diag)
 Puts diagonals in increase-by-last-index, decrease-by-first order.
 
void SortPolygonDiagonals (geo::span< uint64_t > diag)
 
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.
 
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.
 
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.
 
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.
 
bool BuildDiagonals (geo::span< int > &diagonals, const geo::span< const Point3 > &xVertices, bool doComputeIfPlanarConvex=true, TriangulationVersionType version=TRIANGULATION_VER_2024)
 Computes a set of diagonals for the polygon defined by the specified bounding vertex loop.
 
bool BuildDiagonals (geo::span< uint16_t > &diagonals, const geo::span< const Point3 > &xVertices, bool doComputeIfPlanarConvex=true, TriangulationVersionType version=TRIANGULATION_VER_2024)
 
bool BuildDiagonals (geo::span< int > &diagonals, const geo::span< const int > &vertexIndices, const BufferProxy< const Point3 > &xVertices, bool doComputeIfPlanarConvex=true, TriangulationVersionType version=TRIANGULATION_VER_2024)
 Computes a set of diagonals for the polygon defined by the specified bounding vertex loop.
 
bool BuildDiagonals (geo::span< uint16_t > &diagonals, const geo::span< const uint64_t > &vertexIndices, const BufferProxy< const Point3 > &xVertices, bool doComputeIfPlanarConvex=true, TriangulationVersionType version=TRIANGULATION_VER_2024)
 
void GetTriangles (int deg, geo::span< int > diag, geo::span< int > out_tri)
 This method fills in the buffer with the full triangulation for the face, based on the internal diagonal list.
 
void GetTriangles (uint16_t deg, geo::span< uint16_t > diag, geo::span< uint16_t > out_tri)
 
void GetTriangles (uint64_t deg, geo::span< uint64_t > diag, geo::span< uint64_t > out_tri)
 
UtilExport MSTR GetResourceStringAsMSTR (HINSTANCE hinstance, UINT resourceId)
 Extract a resource from a module's string table.
 
UtilExport bool GetResourceStringAsMSTR (HINSTANCE hinstance, UINT resourceId, MSTR &resourceString)
 Extract a resource from a module's string table.
 
CoreExport QIcon LoadMaxMultiResIcon (const QString &iconName)
 Loads a set of Images into a multi-resolution QIcon.
 
CoreExport HICON CreateHICONFromMaxMultiResIcon (const MSTR &iconName, int width, int height, bool enabled=true, bool on=false)
 Create an HICON from a MaxMultiResIcon.
 
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.
 
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.
 
 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)
 
template<typename T1 , typename T2 >
constexpr auto min (const T1 &a, const T2 &b) noexcept
 
template<typename T1 , typename T2 >
constexpr auto max (const T1 &a, const T2 &b) noexcept
 
UtilExport float GetUIScaleFactor (int monitorID=-1)
 Returns the UI scaling factor relative to a default of 96 DPI.
 
UtilExport float GetUIUserScaleFactor ()
 Get the additional user UI scaling factor.
 
template<typename T >
UIScaled (T value, int monitorID=-1)
 Returns the given value multiplied with the UI scaling factor.
 
template<typename T >
UIUnScaled (T value, int monitorID=-1)
 Returns the given value divided with the UI scaling factor.
 
void ScaleRect (RECT &rect, int monitorID=-1)
 Scaling of a rectangle values based on UIScaleFactor.
 
void UnscaleRect (RECT &rect, int monitorID=-1)
 Unscaling of a rectangle values based on UIScaleFactor.
 
UtilExport HBITMAP GetUIScaledBitmap (HBITMAP bitmap, int monitorID=-1)
 Returns a scaled copy of the bitmap if the UI scaling factor is not 1.0.
 
UtilExport HRESULT AnnotateControlName (HWND hWnd, const MSTR &name)
 Annotates the control with Microsoft Active Accessibility name property.
 
UtilExport HRESULT RemoveAnnotatedNameFromControl (HWND hWnd)
 Removes the Microsoft Active Accessibility name from the control.
 
CoreExport void ScaleFileOpenSaveDialogToolbar (HWND hDlg)
 Scales the toolbar size and icons in standard file open/save dialogs.
 
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.
 
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.
 
CoreExport bool SearchComboBox (HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
 Multiple character search for ComboBoxes.
 
CoreExport bool SearchListBox (HWND hWnd, MCHAR key, const MCHAR *szTrim=NULL)
 Multiple character search for ListBoxes.
 
CoreExport int GetDefaultToolTipMaxWidth ()
 

Typedef Documentation

◆ SharedMeshPtr

About SharedMeshPtr defined below : This template class act similar to CComPtr.

Using RefPtr<RefObjectType> will be much safer than RefObjectType* since this template class handles the AddRef and Release in its constructor and destructor.

Usage Example: class DerivedRefObject : public ARefObject { public: void foo(); };

Use DerivedRefObject without RefPtr: { DerivedRefObject* pObject = new DerivedRefObject; pObject->AddRef(); // Add reference pObject->foo(); pObject->Release(); // release the object pObject = NULL; }

Use DerivedRefObject with RefPtr: { RefPtr<DerivedRefObject> pObject = new DerivedRefObject; pObject->foo(); don't need to worry about deleting this object }

More RefPtr examples: RefPtr<DerivedRefObject> pObject2 = new DerivedRefObject; RefPtr<DerivedRefObject> pObject3 = pObject2; pObject2 = NULL; // pObject3 is still valid. pObject3->foo(); pObject3 = NULL; // Release the last reference to the object and the object is destroyed automatically.

Enumeration Type Documentation

◆ TriangulationVersionType

Enumeration indexing available versions of the algorithm implemented by the variants of BuildDiagonals defined below.

Version TRIANGULATION_VER_2023_1 is the initial implementation of the algorithm, with improvements for faces containing collinear and/or convex corners, multiply connected faces, and non-planar faces, in comparison to the legacy algorithm implemented in the variants of FindDiagonals. Version TRIANGULATION_VER_2024 further refines the implementation, improving handling of non-planar faces, as well as certain geometric degeneracies, including spur edges and self-intersecting bounding curves.

Enumerator
TRIANGULATION_VER_2023_1 
TRIANGULATION_VER_2024 
128{
131};
@ TRIANGULATION_VER_2024
Definition: triangulate.h:130
@ TRIANGULATION_VER_2023_1
Definition: triangulate.h:129

Function Documentation

◆ GetHInstance()

HINSTANCE 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 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{
49}
MSTR GetResourceStringAsMSTR(UINT resourceId)
Extract a resource from the calling module's string table.
Definition: dllutilities.h:46
HINSTANCE GetHInstance()
Get the calling module's HINSTANCE.
Definition: dllutilities.h:28

◆ GetResourceStringAsMSTR() [2/4]

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

◆ SortPolygonDiagonals() [1/2]

void SortPolygonDiagonals ( geo::span< 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,out]diagThe diagonals.

◆ SortPolygonDiagonals() [2/2]

void SortPolygonDiagonals ( geo::span< uint64_t >  diag)

◆ BestConvexDiagonals() [1/2]

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.

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

◆ BuildDiagonals() [1/4]

bool BuildDiagonals ( geo::span< int > &  diagonals,
const geo::span< const Point3 > &  xVertices,
bool  doComputeIfPlanarConvex = true,
TriangulationVersionType  version = TRIANGULATION_VER_2024 
)

Computes a set of diagonals for the polygon defined by the specified bounding vertex loop.

The algorithm implemented by BuildDiagonals is much more robust than that of FindDiagonals for faces containing non-convex corners, with interior angles greater than or equal to 180 degrees, in that it will typically not generate diagonals implying collapsed or inverted triangles in the triangulation of the polygon, if the polygon itself is geometrically valid. Additionally, the present algorithm will generally yield a higher-quality triangulation for grossly non-planar face than that produced by FindDiagonals. The function will typically be somewhat more costly computationally than FindDiagonals, but the time complexity to compute diagonals for an N-gon with either function should be O(N^2).

Parameters
[out]diagonalsArray of size (N - 3) * 2. If diagonals are computed, then the array &(diagonals[d * 2]) lists the indices, in the xVertices array, of the vertices along diagonal d, for d on the range [0, N - 3).
[in]xVerticesArray, of size N, specifying the position vectors of the vertices along the bounding loop defining the polygon of interest.
[in]doComputeIfPlanarConvexIf false, diagonals are computed only if the specified polygon is found to be non-planar, or to contain one or more non-convex corners, otherwise, diagonals are computed unconditionally for any polygon requiring them, that is, for N > 3.
[in]versionSets the version of the triangulation algorithm to be employed, as discussed in the description of the TriangulationVersionType enumeration.
Returns
Flag indicating whether diagonals were computed. If false, the diagonals array will be unaltered. Note that if N <= 3, we will return false reflexively.

◆ BuildDiagonals() [2/4]

bool BuildDiagonals ( geo::span< uint16_t > &  diagonals,
const geo::span< const Point3 > &  xVertices,
bool  doComputeIfPlanarConvex = true,
TriangulationVersionType  version = TRIANGULATION_VER_2024 
)

◆ BuildDiagonals() [3/4]

bool BuildDiagonals ( geo::span< int > &  diagonals,
const geo::span< const int > &  vertexIndices,
const BufferProxy< const Point3 > &  xVertices,
bool  doComputeIfPlanarConvex = true,
TriangulationVersionType  version = TRIANGULATION_VER_2024 
)

Computes a set of diagonals for the polygon defined by the specified bounding vertex loop.

The algorithm implemented by BuildDiagonals is much more robust than that of FindDiagonals for faces containing non-convex corners, with interior angles greater than or equal to 180 degrees, in that it will typically not generate diagonals implying collapsed or inverted triangles in the triangulation of the polygon, if the polygon itself is geometrically valid. Additionally, the present algorithm will generally yield a higher-quality triangulation for grossly non-planar face than that produced by FindDiagonals. The function will typically be somewhat more costly computationally than FindDiagonals, but the time complexity to compute diagonals for an N-gon with either function should be O(N^2).

Parameters
[out]diagonalsArray of size (N - 3) * 2. If diagonals are computed, then the array &(diagonals[d * 2]) lists the indices, in the vertexIndices array, of the vertices along diagonal d, for d on the range [0, N - 3), so that the position vector of vertex v on diagonal d is given by xVertices[vertexIndices[v']], where v' = diagonals[d * 2 + v].
[in]vertexIndicesArray, of size N, specifying the indices of the vertices along the bounding loop defining the polygon of interest, so that the position vector of polygon vertex v is given by xVertices[vertexIndices[v]].
[in]xVerticesBufferProxy defining the list of vertex position vectors to which the indices given in the vertexIndices array correspond.
[in]doComputeIfPlanarConvexIf false, diagonals are computed only if the specified polygon is found to be non-planar, or to contain one or more non-convex corners, otherwise, diagonals are computed unconditionally for any polygon requiring them, that is, for N > 3.
[in]versionSets the version of the triangulation algorithm to be employed, as discussed in the description of the TriangulationVersionType enumeration.
Returns
Flag indicating whether diagonals were computed. If false, the diagonals array will be unaltered. Note that if N <= 3, we will return false reflexively.

◆ BuildDiagonals() [4/4]

bool BuildDiagonals ( geo::span< uint16_t > &  diagonals,
const geo::span< const uint64_t > &  vertexIndices,
const BufferProxy< const Point3 > &  xVertices,
bool  doComputeIfPlanarConvex = true,
TriangulationVersionType  version = TRIANGULATION_VER_2024 
)

◆ GetTriangles() [1/3]

void GetTriangles ( int  deg,
geo::span< int diag,
geo::span< 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.

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

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

[in,out]diagThe diagonals.

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

◆ GetTriangles() [2/3]

void GetTriangles ( uint16_t  deg,
geo::span< uint16_t >  diag,
geo::span< uint16_t >  out_tri 
)

◆ GetTriangles() [3/3]

void GetTriangles ( uint64_t  deg,
geo::span< uint64_t >  diag,
geo::span< uint64_t >  out_tri 
)

◆ GetResourceStringAsMSTR() [3/4]

UtilExport MSTR 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 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 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 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 CreateHICONFromMaxMultiResIcon ( const MSTR iconName,
int  size,
bool  enabled = true,
bool  on = false 
)
inline
340 {
341 return CreateHICONFromMaxMultiResIcon( iconName, size, size, enabled, on );
342 }
CoreExport HICON CreateHICONFromMaxMultiResIcon(const MSTR &iconName, int width, int height, bool enabled=true, bool on=false)
Create an HICON from a MaxMultiResIcon.

◆ CreateHIMAGELISTFromMaxMultiResIcon()

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.

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 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]

Q_DECLARE_METATYPE ( AColor  )

◆ Q_DECLARE_METATYPE() [2/5]

Q_DECLARE_METATYPE ( Point2  )

◆ Q_DECLARE_METATYPE() [3/5]

Q_DECLARE_METATYPE ( Point3  )

◆ Q_DECLARE_METATYPE() [4/5]

Q_DECLARE_METATYPE ( Point4  )

◆ Q_DECLARE_METATYPE() [5/5]

Q_DECLARE_METATYPE ( Matrix3  )

◆ QStringFromID()

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

◆ operator*() [1/3]

36{
38}
A simple RGB color value. the Max SDK's Color class couldn't be used since we want to remain independ...
Definition: IPhysicalCamera_BitmapApertureSampler.h:36
float float b
Definition: texutil.h:51
float a
Definition: texutil.h:51

◆ operator*() [2/3]

41{
42 return b * a;
43}

◆ operator*() [3/3]

◆ operator+()

◆ operator-()

◆ min()

constexpr auto min ( const T1 &  a,
const T2 &  b 
)
inlineconstexprnoexcept
32 {
33 static_assert(!std::is_same<T1, T2>::value, "T1 == T2. Use std::min instead");
34 static_assert(std::is_scalar<T1>::value && std::is_scalar<T2>::value, "T1 and T2 must be scalar types");
35 return a < b ? a : b;
36 }

◆ max()

constexpr auto max ( const T1 &  a,
const T2 &  b 
)
inlineconstexprnoexcept
41 {
42 static_assert(!std::is_same<T1, T2>::value, "T1 == T2. Use std::max instead");
43 static_assert(std::is_scalar<T1>::value && std::is_scalar<T2>::value, "T1 and T2 must be scalar types");
44 return b < a ? a : b;
45 }

◆ GetUIScaleFactor()

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

Get the additional user UI scaling factor.

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

◆ UIScaled()

T UIScaled ( 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
65 {
66 static_assert(std::is_arithmetic_v<T>, "T must be arithmetic type");
67 return static_cast<T>(value * GetUIScaleFactor(monitorID));
68 }
UtilExport float GetUIScaleFactor(int monitorID=-1)
Returns the UI scaling factor relative to a default of 96 DPI.

◆ UIUnScaled()

T UIUnScaled ( 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
83 {
84 static_assert(std::is_arithmetic_v<T>, "T must be arithmetic type");
85 return static_cast<T>(value / GetUIScaleFactor(monitorID));
86 }

◆ ScaleRect()

void 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.
98 {
99 float scaleFactor = GetUIScaleFactor( monitorID );
100 rect.top = (LONG)(rect.top * scaleFactor);
101 rect.bottom = (LONG)(rect.bottom * scaleFactor);
102 rect.left = (LONG)(rect.left * scaleFactor);
103 rect.right = (LONG)(rect.right * scaleFactor);
104 }

◆ UnscaleRect()

void 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.
115 {
116 float scaleFactor = GetUIScaleFactor( monitorID );
117 rect.top = (LONG)(rect.top / scaleFactor);
118 rect.bottom = (LONG)(rect.bottom / scaleFactor);
119 rect.left = (LONG)(rect.left / scaleFactor);
120 rect.right = (LONG)(rect.right / scaleFactor);
121 }

◆ GetUIScaledBitmap()

UtilExport HBITMAP 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 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 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 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 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 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 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 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 GetDefaultToolTipMaxWidth ( )
Remarks
Returns the default maximum width, in pixels, for tooltip windows in Max. Tooltips wider than the maximum are broken into multiple lines.