Incremental Improvements

Layer property enhancements

Layer properties can now be propagated to child layers by setting the "propagate" parameter for those ILayer methods that set properties to true. By default properties are not propagated. For more information see class ILayer and its methods in the C++ API Reference.

RenderElement enhancements

The BOOL MaxRenderElement::IsVisibleToScanlineRenderer() method is added so render elements can inform 3ds Max whether or not they are compatible with the scanline renderer. A render element that overwrites this method to return FALSE is not shown in the selection dialog for the scanline renderer. By default this method returns true to respect legacy behavior.

APIs promoting the use of dynamic length string arrays (MSTR)

The SDK now provides wrappers for several Windows APIs for getting text out of windows and various controls that work with dynamic length strings (MSTR). They ensure that the string buffer passed to the Windows API has sufficient space to hold the window's text, thus improving robustness of the code that uses these APIs. Using dynamic length string arrays (MSTR) over fixed sized arrays of characters (MCHAR var[MAX_PATH]) has the advantage of reducing the chances for buffer overruns.

One example of such a function is:

UtilExport TSTR
GetListBoxItemText(HWND hDlg, int nIDDlgItem, int
nListboxItem);

For a full list of the available functions, see maxsdk\include\winutil.h and winutil.h in the C++ API Reference.

Ability to filter animatables

Plug-ins can now filter animatable instances during a hit test with the newly added PickAnimatableCallback class. Previously only nodes could be filtered with the PickNodeCallback class.

Access to the main thread ID

The DWORD Interface15::GetMainThreadID() method provides access to 3ds Max's main thread id.

Xref Scene Enumeration

You can now enumerate the scene entities in xref nodes using IScene::EnumTree() by passing true as the value for the new bIncludeXref parameter.

Notifications on action item execution

NOTIFY_ACTION_ITEM_PRE_EXEC and NOTIFY_ACTION_ITEM_POST_EXEC have been renamed to NOTIFY_ACTION_ITEM_HOTKEY_PRE_EXEC and NOTIFY_ACTION_ITEM_HOTKEY_POST_EXEC to better reflect their semantics. These notifications are sent only when action items are executed via hotkeys.

NOTIFY_ACTION_ITEM_EXECUTION_STARTED and NOTIFY_ACTION_ITEM_EXECUTION_ENDED are two new notifications sent on action items execution, regardless of the way the action item execution was triggered (such as hotkey, menu, toolbar, ribbon, maxscript, SDK, or python).