What was New in MAXScript in 3ds Max 2015

The following page will give you a quick overview of the MAXScript language changes and improvements in 3ds Max 2015. For details on each feature, please follow the links to the respective documentation pages.

New 3ds Max Features Exposure

New Geometry Classes

A new Seat : GeometryClass has been added to the Populate toolset.

A new PointCloud : GeometryClass implements Point Cloud loading in 3ds Max.

New Quad Chamfer Modifier And Editable Poly Chamfer Options

A new Chamfer : modifier with optional Quad chamfer mode has been added.

Several new properties have been added to the existing Editable_Poly class to expose the Quad chamfer options: .edgeChamferSmooth , .edgeChamferSmoothThreshold , .edgeChamferSmoothType , .edgeChamferType , .edgeChamferTension and .edgeChamferInvert .

New iRay Render Elements

The new Custom_LPE : RenderElement can be used to output a custom Light Path Expression (LPE) from the iRay renderer.

The new Light__Area : RenderElement outputs the Area Lights LPE from the iRay renderer.

The new Light__Environment : RenderElement outputs the Environment Lights LPE from the iRay renderer.

The new Light__Point : RenderElement outputs the Point Lights LPE from the iRay renderer.

The new Mtl__Caustics : RenderElement can be used to output the Caustics LPE from the iRay renderer.

The new Mtl__Diffuse : RenderElement can be used to output the Diffuse LPE from the iRay renderer.

The new Mtl__Reflections : RenderElement can be used to output the Reflections LPE from the iRay renderer.

The new Mtl__Self_Illumination : RenderElement can be used to output the Self-Illumination LPE from the iRay renderer.

The new Mtl__Translucency : RenderElement can be used to output the Translucency LPE from the iRay renderer.

The new Mtl__Transparency : RenderElement can be used to output the Transparency LPE from the iRay renderer.

New UtilityPlugin Classes

A new PythonHost : UtilityPlugin has been added, but it does not expose any UI controls, properties or methods. See the python Core Interface for actual properties and methods access.

The new Placement_Utility : UtilityPlugin is for internal use only and exposes no properties, methods or UI controls. See the PlacementTool Core Interface for actual properties and methods related to the new integrated Placement Tool.

New Core Interfaces

The new nodeSelectionSet Core Interface provides a system for creating node selection sets for display and render control purposes.

The new PlacementTool Core Interface exposes the Placement Tool's controls and functionality to MAXScript. It allows the interactive or scripted placement of objects to the surface of scene geometry.

The new Python Core Interface exposes the Python engine's controls to MAXScript.

The new iray_string_options Core Interface exposes the iRay Renderer's additional string controls to MAXScript.

The new MaterialPreviewSystem Core Interface is for internal use only.

New Functions To Interact With The 3ds Max User Interface

Added a new set of 3ds Max Assert display and log related functions : SetMaxAssertDisplay() , GetMaxAssertLogFileName() and SetMaxAssertLogFileName()

Added a new function to access the Active Shade bitmap: GetActiveShadeBitmap() .

Added a new function to close the Active Shade window: CloseActiveShade() .

Added a new set of Render Element related functions: ElementFileDialog() , ElementGetCustomGamma() , ElementSetCustomGamma() , ElementGetMetaData() and ElementSetMetaData()

Added a new set of Welcome Screen related functions: WelcomeScreenLastTabShown() , WelcomeScreenLaunchCount() and WelcomeScreenShowAtStartup()

New Point Cloud mental ray Shaders

The new Autodesk_Point_Cloud_Generator : textureMap generates the Point Cloud in the mental ray renderer.

The new Autodesk_Point_Cloud_Material : material implements a Point Cloud material for the mental ray renderer.

The new Autodesk_Point_Cloud_Base_Shader : textureMap base shader is used to render the Point Cloud particles in mental ray.

The new Autodesk_Point_Cloud_Shader : textureMap implements a Point Cloud texture map for the mental ray renderer.

Enhancements to Existing 3ds Max Features

CAT Interface And Properties Changes

In the existing ICATControlFPInterface, the PasteRig() method now expects a <maxObject> instead of a <controller> as first argument.

In the existing CATNodeControlFPInterface, the .Stretchy property was replaced by two new properties for separate control during setup and animation.

In the existing CATNodeControlFPInterface, the property .AnimModeInheritance has been renamed to .AnimationModeInheritance .

In the existing CATNodeControlFPInterface, the existing AddArbBone() and CreateLayerMatrix3() methods now accept an optional keyword AsNewGroup: .

In the existing LayerRootFPInterface, two new methods let you get and set the Layer color: GetLayerColor() and SetLayerColor()

Removed the property .BoneID from TailTrans : Matrix3Controller

Pop Interface Changes

Several new properties have been added to the existing pop Interface: .TurnOpt , .SeatMaxTalkAngle , .SeatMaxTalkDist , .SeatMaxTalkAngle

Several new methods have been added to the existing pop Interface to control idling, walking and sitting characters: pop.NumStandingIdlers() , pop.NumPedestrians() , pop.GetStandingIdler() , pop.GetPedestrian() , pop.NumSeatedIdlers() , pop.GetSeatedIdler() , pop.AddSeat() , pop.SetSelectedSeatsGender() .

Several new methods have been added to the existing pop Interface: pop.ResimulateSelected() , pop.RegenerateSelected() , pop.DisplayMarks() , pop.ShowAppearanceUI() , pop.SwapSelPeopleAppearance() , pop.DeleteSelPeople() , pop.SwitchSelPeoplePos() , pop.BakeSelPeople() , pop.SaveTextureMaps() .

The options #HighSkin has been removed from the .DisplayType property of the pop Interface.

Particle Flow Changes

Two new methods have been added to the existing particleFlow Global Interface: setNodeEditorDisplayFlags() and forceRedrawParticleView()

A new property has been added to the existing Test_Icon object: .Enable_By_Switch .

The property .Disable_By_Dependency has been removed from the existing Test_Icon object.

The Viewport_Render : Helper class, which was exposed to MAXScript in previous versions but was for internally use only, has been removed.

RetimerMan Interface Changes

The existing RetimerMan Interface's property .numRetimers has been changed from index to integer type.

Several new methods have been added to the existing RetimerMan Interface: IsGlobalRetimerActive() , ApplyGlobalRetimer() , RemoveGlobalRetimer() , GetActiveRetimerCtrl() , AddToRetimer() , SetUpRetimers() , RemoveRetimers() , BakeRetimers() , FindNodesDependentOnRetimer() and GetGlobalRetimerControl()

LayerManager Interface Changes

The new method layerPropDialog() in the existing LayerManager Interface allows the opening of the Layer Properties dialogs of any number of layers.

Several new methods have been added to the existing LayerProperties Mixin Interface: getParent() , setParent() , getChild() and getNumChildren() to support nested layers.

NitrousGraphicsManager Interface Changes

Two new properties have been added to the existing NitrousGraphicsManager Interface: .HardwareHitTestEnabled and .AntialiasingQuality

Two new texture control methods have been added to the existing NitrousGraphicsManager Interface: SetProceduralTextureSizeLimit() and ForceDisableMipMapGeneration()

New view graph methods added to the existing NitrousGraphicsManager Interface: SaveViewGraph() , LoadViewGraph() and UnloadViewGraph()

SceneExplorerManager Interface Changes

Several new methods have been added to the existing SceneExplorerManager Interface: GetExplorer() , CreateLayerManager() , GetActiveExplorer() , IsDefaultLayer() and SetActiveExplorer()

SkinOps Struct Changes

Two new methods - skinOps.GetBoneIDByListID() and skinOps.GetListIDByBoneID() - have been added to the existing SkinOps Struct.

The method skinOps.GetBoneNameByListID() has been removed from the SkinOps Struct.

Mesh Editing Changes

The existing setNormal() Mesh Vertex method has been changed to set the normal to explicit in order to retain the custom data on mesh updates.

INode Interface Changes

A new property .isSceneXRefNode has been added to the existing INode Interface.

MSCustAttribDef Class Changes

A new .version property has been added to the MSPluginClass. MSCustAttribDef derives from it, effectively exposing the .version property of Custom Attribute definitions.

windows Struct Changes

A new method has been added to the existing windows Struct: windows.snapshot() to create a snapshot image of the specified window including the Windows Desktop, 3ds Max Main Window, Viewports or any other window by its HWND.

viewport Struct Changes

A new method has been added to the existing viewport Struct: viewport.getHWnd() to acquire the windows handle of the viewport.

Enhanced the existing viewport.getViewportDIB() method in the viewport Struct to allow for optional viewport index, viewPanel index, Alpha channel support and Gamma correction.

Viewport Drawing Methods - gw Struct Changes

Enhanced the existing gw.getViewportDIB() method in the existing gw Struct to allow for optional Alpha channel support and Gamma correction.

Improved the existing gw.text() , gw.htext() and gw.wtext() methods in the existing gw Struct to support multi-line text where new lines are introduced using the \n escape sequence.

New MacroScript Event Handlers

The new on isIndeterminate do handler can return True to display the MacroScript menu item as a horizontal dash (representing an indeterminate checkmark) in Menus and QuadMenus.

New Pick Animatable Function

The new pickAnimatable() function is similar to the existing pickObject() function, but it lets you pick an Animatable from a 3D viewport, Explorer, Schematic View, or Track View.

New Bitmap Value Functions And Enhancements

The new function forceReloadBitmapFile() lets you reload the file of a Bitmap Value.

The new function registerFileChangedFunction() lets you register a callback to run a function when the bitmap file of a Bitmap Value changes on disk.

A new optional keyword argument caption: has been added to the existing display() function related to Bitmap Values, allowing the display of a custom caption string in the VFB's title bar.

New RefTargContainer ReferenceTarget

A new RefTargContainer : ReferenceTarget has been added.

bsearch Enhancements

A new index: by-reference optional keyword has been added to the existing bsearch() function to access the index of the found item.

Persistent Global Variables Enhancements

Added support for IntegerPtr saving and loading as persistent global variable value. When saving to previous 3ds Max version, the IntegerPtr value will be stored as an Integer64 . See also Documentation Fixes below.

UI And ESC Key Handling

Pressing the ESC key while editing the text in an editText control will switch focus to the control's parent window.

Pressing the ESC key while in a modal dialog created using createDialog() will close the dialog if the escapeEnable: keyword argument is set to False. This was documented, but was not implemented in previous versions.

Removed Features

OldBoolean

Removed the OldBoolean : GeometryClass class which was hidden and only used for loading ancient .MAX scene files saved in the mid-90s.

XML Material Export

Removed the Material_XML_Exporter: UtilityPlugin which was used to manually export a material to an XML format for use in Architectural Desktop 2004 with VIZrender.

Removed the Interface: XMLMaterial which was used to export a material to an XML format for use in Architectural Desktop 2004 with VIZrender using MAXScript.

Documentation Fixes

The list of value types supported by persistent global variables has been updated to include all new value types introduced since the original implementation of MAXScript, including Integer64, IntegerPtr, Double, Point4 etc. Also, the list is now sorted alphabetically for easier search at a glance.

The function getMaxFileVersionData() was originally introduced in 3ds Max 2013. It provides access the .MAX scene file version including the version of 3ds Max that produced the file. The actual version information is available in files saved by 3ds Max 2010 and higher.