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.
UI Related Changes
Actiontables::IconSize
- adds new sizes (to support HDPI) 30x30, 36x36, 46x48QmaxDockingWinHostDelegate bool SetUserDlgProc(ParamBlockDesc2* pbd, ParamMap2UserDlgProc* proc=NULL);
- Previously was void typeInterface17
- 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
Rendering Related Changes
- include\NotificationAPI\NotificationAPI_Subscription.h - new
INotificationManager::NotifyRenderSettingsEvent
andINotificationManager::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.h –
SimpleObject
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.