Unlike Maya, 3ds Max does not have internal support for Python. But that shouldn't stop you from calling useful Python code in your MaxScripts! Here's the basics of how to do that using COM.
COM is a Windows system that supports, among other arcane things, interprocess communication. You can use a language like Python, Visual Basic, or C to define a COM "server". This is a class or function, defined by a unique identifier (GUID) and a name. Here's some gory details on COM if you're curious.
Here's a simple COM server using Python:
Requires the Python Win32 Extensions (which no TA should be without)
# A simple Python COM server.
class PythonComUtilities:
# These tell win32 what/how to register with COM
_public_methods_ = ['checksumMD5']
_reg_progid_ = 'PythonCom.Utilities'
# Class ID must be new/unique for every server you create
_reg_clsid_ = '{48dd4b8f-f35e-11dc-a4fd-0013029ef248}'
def checksumMD5(self, string):
"""Creates MD5 checksum from string"""
import hashlib
m = hashlib.md5()
m.update(str(string))
return m.hexdigest()
if (__name__ == '__main__'):
print 'Registering COM server...'
import win32com.server.register as comReg
comReg.UseCommandLine(PythonComUtilities)
This defines a function,
checksumMD5
that takes a string as input, and returns the MD5 checksum for that string.
To register the COM server on a PC, simply run the Python script. Windows records it in registry, noting which script/application it uses.
Now that's done, another application (3ds Max, in this case) can connect to that COM server's interface and call it like any other function. Here's an example of doing that from MaxScript:
-- Connect to the COM server by name
comObj = createOLEObject "PythonCom.Utilities"
-- Call the function it exposes, with a sample string
checksum = comObj.checksumMD5 "The quick brown fox."
It's that simple. The checkum value returned for our sample string is
"2e87284d245c2aae1c74fa4c50a74c77"
.
You might be wondering what a checksum is, or what it's good for. Stay tuned and I'll show you some slick stuff you can do with them in 3ds Max. See
Checksums in 3ds Max, Part 1 and
Part 2.
Python COM server example adapted from code appearing in Python Programming in Win32 by Mark Hammond and Andy Robinson... a great book for getting more out of Windows with Python.