This topic will give you a quick overview of the MAXScript language changes and improvements in 3ds Max 2019. For details on each feature, please follow the links to the respective documentation pages.
Viewport ActiveShade Mode | The ActiveShadeFragmentManager Interface provides MAXScript access to the new viewport ActiveShade display mode. |
Custom Attribute Container Owner | A new property is exposed on the custom attribute array returned by MAXWrapper.custattributes, .owner , that contains the owning object. |
Node Event System Changes | Two new functions have been added to retrieve information about registered NodeEventCallbacks: getNodeEvents() and showNodeEvents() . A new handling option has been added to NodeEventCallbackValue , polling, which tells the system the callback can be triggered by the new triggerNodeEventCallback() function.The general event callback inspection function now takes an optional asArray: keyword argument, which causes the output to be formatted as an array. |
3ds Max Process Information | Three new functions have been added to the sysinfo struct to get information about the 3ds Max process, getMAXHandleCount() , getMAXUserObjectCount() , and getMAXGDIObjectCount() . |
Previously undocumented items | The cfgMgr struct, which provides access to the 3dsmax.ini configuration file, is now documented.The isDeleted <MAXWrapper> function and MAXWrapper.isDeleted property are now documented; they indicate whether a MAXWrapper is deleted.The |
Fluid Loader | The FluidLoader class is now accessible and creatable in MAXScript. This class exposes the Fluid Loader Geometry object. |
Script Loading Detection | The new getMaxscriptStartupState() function can be used to determine the loading state of standard and startup scripts. There is a new corresponding #preStartupScriptLoad event called immediately before the startup scripts are executed. |
Rendering UV Range of TextureMaps | The renderMap() function has an additional range parameter to specify a UV range to render, and a new disableBitmapProxies parameter to disable the proxy system. |
Max Information | The maxVersion() function now includes release year and product version items.New functions in the sysinfo structure, getCommandLine() and getCommandLineArgs() return information about the command line that executed Max. SystemTools.isDebugBuild() is a new function that indicates whether the currently running 3ds Max is a debug or release build. |
Root Node User Properties | The get/setUserProp/val/buffer(), deleteUerProp(), and doesUserPropExist() functions now recognize a special rootNode parameter, allowing access to the scene root node user properties. The parameter can also be the root node of an xref, which is held in the xref file .tree property. |
Adding Nodes via Layer Manager | The LayerProperties interface has a new method, addNodes() , that works like addNode() , but takes an array of nodes, allowing you to add multiple nodes in a single call. |
SkinOps changes | The SkinOps struct has two new functions: SetBoneWeights() and Hammer() . In addition, many functions that previously required that the modifier UI be selected, now take an optional node:<node> or name:<string> argument, which when supplied, is applied to the specified node even if it is not selected. |
Alembic Importer File Inspection Methods | Several methods have been removed from the AlembicImport Import Plugin: GetABCNodeType() , GetABCNodeDataType() , GetABCNodeExtent() , and IsPropertyNode() . These have been replaced with new methods: GetABCNodeProperties() , GetNumProperties() , GetChildPropertyFromIndex() , GetChildPropertyFromName() , GetPropertyType() , GetPropertyDataType() , and GetPropertyExtent() . |
Miscellaneous Changes | The noValue predefined global variable has been renamed silentValue to more accurately indicate what it does. |
Removed Items | Synchronization mode related items that were removed from the Unwrap_UVW modifer in 3ds Max 2018.2 Update, have been removed from the documentation: setSyncSelectionMode() , getSyncSelectionMode() , syncTVSelection() , and syncGeomSelection() . |
Previously undocumented items | The Interface : ParticleCache used by the MaxLiquidSolver is now documented.Several previously undocumented properties and methods in Interface pluginManager are now covered.The max group open recursively max command is now documented. |
File Archiving | The File > Archive command is now exposed in MAXScript as archiveMAXFile(). |
XRefObject re-parenting | The xrefs.addNewXRefObject() method has a new reparentAction parameter to specify how to handle xref re-parenting. The objXRefs.addNewXRefObject() method has new flag bits to specify how to handle xref re-parenting. |
Improved version information | The maxversion() function now returns the build number, and is consistent with the information returned from SystemTools.GetBuildNumber(). The SystemTools struct now has a new function, , to report the OS version that works with Windows 10. |
Node user-defined properties methods | Two new methods provide better control over how user-defined node properties are stored and retrieved, getUserPropVal() and setUserPropVal(). The doesUserPropExist() method checks whether a user-defined node property exists, and deleteUserProp() removes a user-defined node property. |
Alembic Importer File Inspection Methods | Several new methods have been added to the AlembicImport Import Plugin to expose Alembic file inspection functionality. |
FBX Exporter Animation Option | The FBX Exporter has a new parameter option, "ExportAnimationOnly". |
Fluids | The Volume helper object is exposed as the VolumeHelper : Helper class. |
Miscellaneous | New miscellaneous function createFloatControllerWithRandomValues() for creating random data for testing. The scene compression setting is now exposed in the |
maxOps interface methods getCompressSceneFileOnSave() and setCompressSceneFileOnSave(). | |
Previously undocumented items | Some parameter clauses for scripted plug-ins are now documented: readOnly:<boolean> , readOnlyAsset:<boolean> , and enumAsAsset:<boolean> . A method for copying a modifier with its local data, addModifierWithLocalData(), is now documented in Node Common Properties, Operators, and Methods. The dontRepeatMessages context is now documented. The <maxclass>.isMSPluginClass property and <string>getObjectName <maxwrapper> method are now documented in MAXWrapper Common Properties, Operators, and Methods. The NetworkRTT() function for creating network render to texture jobs is now documented. The convertIntToDirID() function returns the system directory name for the specified integer. The pathConfig.removeProjectDirectoryCreateFilter() function removes a single specified Project Directory Filter. The pathConfig.getProjectDirectoryCreateFilters function returns an array of all currently set Project Directory Filters. The getFiles() and getDirectories() methods have a recurse:<bool> parameter to indicate whether to recursively search for files or directories. |
Advanced Wood | The Advanced Wood procedural texture map is exposed as the Advanced_Wood : TextureMap map. |
OSL | The Open Shading Language (OSL) is now supported in 3ds Max. There are many new OSL shaders available, and a generic OSLMap class that can be used to load or modify existing shaders, or create new ones. |
Shape Booleans | The ShapeBooleanObject class exposes the functionality of the new Shape Booleans feature. |
Alembic Import and Export | Improvements to the Alembic import and export plug-ins are exposed as new or changed properties and methods in Alembic_Import: Importer_Plugin and Alembic_Export: ExporterPlugin. |
Custom Scene File Data Streams | You can now write and read custom data to 3ds Max scene files. In MAXScript this functionality is exposed by methods in: CustomFileStream Interface CustomSceneStreamManager Interface |
Rollout Resizing Changes | Rollouts and Rollout Floaters now support automatically re-calculating the layout when they are re-sized. This accommodate resizing when docked in the command panel, since command panel can now be arbitrarily sized. Changes include:New autoLayoutOnResize: <boolean> parameter is added to CreateDialog(), newRolloutFloater(), and rollout and subrollout specifications. Rollouts have new properties: rolloutFloater and autoLayoutOnResize .New methods SetDialogSize() and updateRolloutLayout(). Buttons and CheckButton UI controls now have .height and .width properties.New applyUiScaling: <boolean> keyword argument is added to setDialogPos(). |
Stream parameter for persistents.show() | The persistents.show() method has a new to:<stream> parameter to direct output to. |
deepCopy() changes |
The deepCopy() method now applies to Dictionaries, DataPairs, and Structures, as well as Arrays. It has been optimized to guarantee that if the copied object contains two references to a value, only one copy of that value is made. That is, the returned object contains two references to a single value, rather than two copies (which was the previous behavior). |
Documentation Enhancements | The procedure for enabling autocomplete in the MAXScript Editor is now documented. |
Review new features in previous releases.
Icon made by Freepik from www.flaticon.com.