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.
 New in 3ds Max 2019.3 Update
New in 3ds Max 2019.3 Update| 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()andshowNodeEvents(). A new handling option has been added toNodeEventCallbackValue, polling, which tells the system the callback can be triggered by the newtriggerNodeEventCallback()function.The general event callback inspection function   now takes an optionalasArray: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(), andgetMAXGDIObjectCount(). | 
| Previously undocumented items | The  cfgMgr struct, which provides access to the 3dsmax.ini configuration file, is now documented.The isDeleted <MAXWrapper>function andMAXWrapper.isDeletedproperty are now documented; they indicate whether a  MAXWrapper is deleted.The | 
 New in 3ds Max 2019.2 Update
New in 3ds Max 2019.2 Update| 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 rangeparameter to specify a UV range to render, and a newdisableBitmapProxiesparameter 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()andgetCommandLineArgs()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 rootNodeparameter, 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.treeproperty. | 
| Adding Nodes via Layer Manager | The  LayerProperties interface has a new method, addNodes(), that works likeaddNode(), 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()andHammer(). In addition, many functions that previously required that the modifier UI be selected, now take an optionalnode:<node>orname:<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(), andIsPropertyNode(). These have been replaced with new methods:GetABCNodeProperties(),GetNumProperties(),GetChildPropertyFromIndex(),GetChildPropertyFromName(),GetPropertyType(),GetPropertyDataType(), andGetPropertyExtent(). | 
| Miscellaneous Changes | The noValuepredefined 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(), andsyncGeomSelection(). | 
| 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 recursivelymax command is now documented. | 
 New in 3ds Max 2019.1 Update
New in 3ds Max 2019.1 Update| 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>, andenumAsAsset:<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>.isMSPluginClassproperty 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. | 
 New in 3ds Max 2019
New in 3ds Max 2019| 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:rolloutFloaterandautoLayoutOnResize.New methods  SetDialogSize() and  updateRolloutLayout(). Buttons and  CheckButton UI controls now have.heightand.widthproperties.NewapplyUiScaling: <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 Scripting Editor is now documented. | 
 What's New Previous
What's New PreviousReview new features in previous releases.
Icon made by Freepik from www.flaticon.com.