If you are already a hard-core .NET programmer
and have installed the 3ds Max 2012 Subscription Advantage Pack then you might
want to quickly open up a new file in the Autodesk root folder named
"Autodesk.Max.dll" in your Visual Studio Object Browser.
So what is
so special about this little DLL? Previously the 3ds Max .NET SDK offered
only a tiny subset of the entire SDK functionality. With this advantage
pack we have released a new class library (the Autodesk.Max.dll assembly)
that exposes virtually every C++ API element to .NET.
can be used from 3ds Max in several ways:
From managed plug-ins and
CUI actions loaded from /bin/assemblies
We have updated
SDK documentation with this release with new information
regarding the .NET SDK. Some starting points for information on the .NET
The .NET SDK
mimics the structure of the C++ API, so you will also need to consult out theC++ reference documentation. Note that
opening the assembly in Visual Studio's object browser is a very quick and easy
way to find what you are looking for.
way to get started using the new enhancements to the .NET SDK is from
MAXScript. First load the assembly and get some handles that you can work with
(hint: this could be a good start-up script):
-- Get a handle to the global interface instance GlobalInterfaceType = dotNetClass "Autodesk.Max.GlobalInterface" global GlobalInterface = GlobalInterfaceType.Instance global Interface13 = GlobalInterface.COREInterface13
actually do something:
Interface13.PushPrompt "Pinch me, I'm dreaming!"
now a little message in the prompt window at the bottom of 3ds Max.
So what the
heck is happening? The .NET class Autodesk.Max.GlobalInterface provides a means to access the
global methods and objects in the 3ds Max SDK. There is one global instance of
this interface already instantiated which you can get via the static
So the get
access global function in the C++ SDK such as GetCOREInterface13()we can find it as a property
of Autodesk.Max.GlobalInterface, specificallyAutodesk.Max.GlobalInterface.Instance.COREInterface13. It is converted from a
function to a property because it has the prefix “Get” and no arguments. This
is a bit complicated, but once we store the key interface instances in global
variables we can start using them.
global variable Interface13 defined in the above script we can now call any
function from the Interface13class in the C++ SDK (and all of its base
Here is a
slightly more interesting MAXScript example that walks the nodes in a scene and
calls a function with each one.
function VisitNodes n f = ( -- Call the function "f" passing the node
"n" as an argument f n -- Recursively Visit all of the children nodes for i = 0 to n.NumberOfChildren - 1 do VisitNodes (n.GetChildNode i) f )
-- Declare a function that we can use to visit each node with function NodeNamePrinter n = print n.Name
-- Visit the root node and all of its children using the
NodeNamePrinter function VisitNodes Interface13.RootNode NodeNamePrinter
keep you 3ds Max hackers busy for a while. I know I have been enjoying playing with
information on other features of the 3ds Max 2012 Subscription Advantage Pack
visit the following blogs on the Area: