Showing posts with label 3dsmax. Show all posts
Showing posts with label 3dsmax. Show all posts

Sunday, November 21, 2010

3dsmax: COM classes

create .NET classes
register assembly (DLL) to COM

Python:
reference:
http://techarttiki.blogspot.com/2008/03/calling-python-from-maxscript.html
http://oreilly.com/catalog/pythonwin32/chapter/ch12.html

python COM server

class PythonUtilities:
_public_methods_ = [ 'AreaOfCircle' ]
_reg_progid_ = "PythonDemos.Utilities"
# NEVER copy the following ID
# Use "print pythoncom.CreateGuid()" to make a new one.
_reg_clsid_ = "{968B74C1-5B12-47CE-93DF-EE2C1418A542}"


def AreaOfCircle(self, radius):
return 3.14159 * radius * radius


# Add code so that when this script is run by
# Python.exe, it self-registers.
if __name__=='__main__':
print "Registering COM server..."
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)



then compile and run this class...

in 3DS max > MAXScript Listener:

comObj = createOLEObject "PythonDemos.Utilities"
a = comObj.AreaOfCircle(10)


but have to reload 3DS max whenever the COM class is changed

Saturday, November 20, 2010

3dsmax: UI


-- UI
rollout addition "Addition of two numbers"
(
-- UI elements
edittext text1 "First number"
edittext text2 "Second number"
button b "Add"
label lbl "Result"
-- event handlers
on b pressed do
(
a1 = text1.text as float
a2 = text2.text as float
c = a1 + a2
lbl.text = c as string
)
)


in MAXScript listener:

-- create a dialog 320 x 240
createDialog addition 320 240


math operator: +, -, *, /
% = mod number1 to number 2
+=, -=, *=, /=

3dsmax: loops, array, struct, as


-- do-while loop
i = 0
do
(
b = box()
b.pos.x = i * 10
--print i
i = i +1
)while (i <a)

-- while loop
i = 0
while(i < a) do
(
print i
i = i+1
)

-- array
arr = #(1, 2, 3, 4)
-- one-based index
print arr[3]

-- struct
struct Fan
(
-- member variables
speed,
radius,
isOn,
-- member function
function setSpeed spd=
(
speed = spd
),
function getSpeed=
(
return speed
),
-- special: calling function when object is constructed
-- can only call function AFTER it is created. eg.: setSpeed()
speed = setSpeed(1)
)
-- initiating structure
f = Fan()
f.radius = 10
f.setSpeed(3)

-- using "as" command
str = "The fan speed is " + fan.getSpeed() as string

Friday, November 19, 2010

3ds max: MAXScript basics

comments:
-- single line comment
/* multi-line comment */

variables. simple. no need to declare. eg.: a = 3

F11 - Script listener. something like Output panel in flash. but it allows u to key in scripts directly

(.) dot operator = object properties
($) superscript = can use it to reference an object using pathname. eg.: $Sphere01.

point3 data type
eg.:


newpos = point3 10 0 0
b.pos = newpos
function parameter in any order
FunctionName keyword1:value1 keyword2:value2

5 /9 = 0. so if need decimal place, must use 5.0/9 or 5 / 9.0 or 5.0 / 9.0

custom function:
function celsiusToFahrenheit celsius =
(
fah = 5.0/9 * (celsius - 32)
return fah
)

returns fah automatically if without 'return fah'

pass by value default
pass by reference using (&) symbol

if-then-else
eg.:
if(zz > 100) then messagebox "hot"


example 2
function testIF a=
(
if(a > 0) then
(
messagebox "more than zero"
)
else if(a == 0) then
(
messagebox "equal to zero"
)
else
(
messagebox "less than zero"
)
)
and, or operator. literally use "and" and "or"

for loop
eg.:
function testFor a=
(
for i=1 to a do
(
b = box()
b.pos.x = i * 10
)
)


do-while loop
do
(
statements(s)
)
while(conditions)

while-do loop
while(conditions) do
(
statement(s)
)