Share

What's New: 3ds Max 2018 SDK

This topic describes new items and changes that affect the 3ds Max 2018 C++ SDK.

Update 1

The Developer's Guide has a new Icon Reference that lists all the standard system icons, their paths, and resolutions, available in UI_ln/IconsDark.rcc and UI_ln/IconsLight.rcc. See Using Multi-Res Icons in Max and Qt for information about how to load and use these icons in your plug-ins.

SDK Break

3ds Max 2018 is not binary compatible with previous versions. This means that plug-ins must be recompiled using the 3ds Max 2018 SDK and the Microsoft Visual C/C++ version 14.0 compiler. See the SDK Requirements to know the platform requirements for building plug-ins in 3ds Max 2018.

Qt

3ds Max 2018 now uses Qt 5.6.2, and plug-ins can build UIs in Qt using the standard GPL Qt 5.6.2 distribution, and the Visual Studio 2015 Qt add-on. See Using Qt with 3ds Max Plug-ins for more information.

Parameter Block 1 to Parameter Block 2 Migration

In preparation of deprecating the Parameter Block 1 system in the future, plug-in developers should start migrating projects to use Parameter Block 2. All samples in the SDK have been migrated, and the Developer Guide now has a Porting Guide.

These headers contain some small changes due to this migration: include\iparamb.h include\iparamb2.h include\iparamb2.inline.h include\iparamm2.h

Note: Parameter Block 1 is not deprecated in this release, but will be in a future release.

Other Parameter Block Changes

PBAccessor now has new PreSet() and PostSet() methods, which guarantee the state of the value returned by GetValue() to be either the original or new value, respectively. In general, plug-ins should now use PreSet() instead of Set().

ParamBlock2 now supports Point2 and IParamBlock2 value types.

PB2Value has some new helper methods for handling strings, Initialize() and ReplaceString().

Data Channel Modifier

The new maxsdk\include\IMNMeshDataChannel.h contains classes and enums that allow you to create additional operators ("engines") to be used by the Data Channel Modifier.

Bezier Trajectories

The new IAdjustTangents class (istdplug.h) supports tangent adjustment.

  • Actiontables::IconSize - adds new sizes (to support HDPI) 30x30, 36x36, 46x48
  • QmaxDockingWinHostDelegate bool SetUserDlgProc(ParamBlockDesc2* pbd, ParamMap2UserDlgProc* proc=NULL); - Previously was void type
  • Interface17 - added
  • include\helpsys.h ShowProductHelp* - all return bool now to indicate the help was displayed
  • include\hold.h Hold::Accept signature using OperationDesc
    • New header: \include\operationdesc.h
  • include\idraganddrop.h - new MCGFILE_DROPTYPE for MCG
  • include\imenuman.h - new QMenuBar
  • include\NotificationAPI\NotificationAPI_Subscription.h - new INotificationManager::NotifyRenderSettingsEvent and INotificationManager::NotifyEnvironmentEvent
  • include\Rendering\IRendParams.h - new IRendParams2 interface with new methods
  • include\RenderingAPI\Translator\Translator.h
    • Translator::Translate – added param
    • New: Translator::TranslateKeyframe
    • New: Translator::InvalidateParents
  • include\Scene\IHairModifier.h - supports the Hair modifier

MAXScript Changes

The ClassDesc::InternalName() returns a fixed, parsable internal name for the plug-in. By default, Plug-in names exposed to MAXScript are generated using both the strings from ClassName() and InternalName(). You can change this behavior by returning true from ClassDesc::UseOnlyInternalNameForMAXScriptExposure(), in which case the plug-in exposes only its InternalName(). We recommend that new plugins implement this method and return true.

Other changes

  • iepoly.h includes new divide faces methods.
  • New: include\IRootNode.h – mainly for xref support
  • include\iskin.h - DQBlend
  • include\istdplug.h – PB2 work
  • include\itreevw.h – testfilters and few misc changes
  • include\linshape.h – removed LinearShape::CreateTriObjRep(TimeValue t)

include\simpshp.h – removed SimpleShape::CreateTriObjRep(TimeValue t)

  • include\simpspl.h – removed SimpleSpline::CreateTriObjRep
  • include\splshape.h – removed SplineShape::CreateTriObjRep
  • include\triobj.h - removed TriObj::CreateTriObjRep
  • include\matrix3.h – added methods PseudoInverse, AffineTranspose, AffineTranspose
  • include\maxapi.h
    • MaxSDK::QmaxMainWindow* GetQmaxMainWindow()
  • Interface17 Get/SetEnableTMCache, NonInteractiveMode, SecureMode, SelectedKeyTangent, PathColoringType, Trajectory methods
  • include\MaxHeap.h, maxheapdirect.h - aligned_malloc, aligned_free, aligned_realloc
  • include\mnmesh.h - IMNMeshLegacySnap
  • include\notify.h - NOTIFY_SCENE_EXPLORER_NEEDS_UPDATE
  • include\object.h - HIT_MIRROREDTM
  • include\paramtype.h – reordered enum
  • include\paramtype.h - ControlType2::TYPE_POINT2LISTBOX, TYPE_FLOAT_EDITABLE_COMBOBOX
  • include\include\RTMax.h – new IParameterManager::kPType_Point3
  • include\simpobj.hSimpleObject cleanup, added new base.
  • include\snap.h - SNAP_OVERRIDE_UNSEL_OBJS_ONLY, SNAP_DURING_CREATION
  • include\TrackFlags.h - ADJTAN_ABSOLUTE, ADJTAN_ANGLE, ADJTAN_LENGTH

Software Security Changes

The SDK property sheets (maxsdk\ProjectSettings\propertySheets\3dsmax.general.project.settings.props) have been updated with software security settings. Existing projects should be updated to use this property sheet.

Removed and Deprecated

CUI Frame

Elements of the CUIFrame system have been removed as part of the migration to a native Qt UI for 3ds Max. The following classes are removed:

  • CUIPosData
  • CUIFrameMsgHandler
  • ICUIFrame

The CUIFrameMgr::GetCount() method is removed.

The CreateCUIFrameWindow() method is also removed. To create a new window frame for a toolbar, use MaxSDK::QmaxToolBar() instead. See the maxsdk/howto/ui/cuitest sample for an example.

Deprecated

See the C++ API Reference > Topics > Deprecated List for more deprecated items.

Was this information helpful?