码迷,mamicode.com
首页 > 其他好文 > 详细

MAXScript 自定义函数 (八)

时间:2015-08-29 17:19:38      阅读:1145      评论:0      收藏:0      [点我收藏+]

标签:

创建自定义函数

函数创建语法为:
<function_def>::=[mapped](function / fn)<name> {<parameter>}=<expr>

函数的定义以关键字function 或fn 开始,

后面紧跟着函数名,

然后是函数定义需要的参数序列,

“=”号表示函数定义的开始,函数定义语句必须用一对括号括起来,即使函数定义语句只有一行。


fn subtract x y =
(
    x-y
)

subtract 14 2
function sign val: 0 =
(
    if val == 0        
        then messageBox("Equal to 0") --等于0
    else if val > 0
        then messageBox("Bigger than 0") --大于0
    else messageBox("Less than 0") --小于0
)

sign val: 0        --Equal to 0
sign val: -5       --Less than 0
sign val: 5        --Bigger than 0

如果想定位一个脚本函数的源脚本文件,可以用 showSource() 函数,

showSource <fn>


函数变量

当用户定义一个函数时,在MAXScript 内部依次发生以下事件:

    函数定义表达式<expr>被求值,创建一个函数值。

    函数<name>作为一个新变量被声明。

    函数值被赋给新变量。

    函数值作为函数定义表达式的值返回。

fn saddle x y = sin x * sin y
fn sombrero x y = cos(x^2 + y^2)/(1 +(x^2 + y^2))
print(saddle 1 1)
fn funcA which =
( 
    if which == 1 then
        fn saddle x y = sin x * sin y
    else
        fn sombrero x y = cos(x^2 + y^2)/(1 +(x^2 + y^2))
)
myfunc=funcA 2
z=myfunc 10 10

函数参数

fn getXYZset val =
( 
    val.x=random -100 100
    val.y=random 100 100
    val.z=random val.x val.y
)

v1=[0,0,0]
v4=v1            -- 此处,v1 v4 引用的是同一个值,因此下面getXYZset v1  v4时候返回的值是相同的,

getXYZSet v1
format "v1= %; v4= %\n" v1 v4

getXYZSet v4
format "v1= %; v4= %\n" v1 v4

v5 = copy v1    -- v5 作为v1的副本调用,此时v1 v5引用的是不同的值
getXYZSet v1
format "v1= %; v5= %\n" v1 v5

----------------以下为返回结果----------------------

getXYZset()
[0,0,0]
[0,0,0]
-25.3909
v1= [-57,100,-25.3909]; v4= [-57,100,-25.3909]
OK
49.2024
v1= [43,100,49.2024]; v4= [43,100,49.2024]
OK
[43,100,49.2024]
[43,100,49.2024]
65.0695
v1= [-24,100,65.0695]; v5= [43,100,49.2024]
OK


return 表达式

返回一个值,

如在运行一个函数时遇到return 语句,函数会马上退出,并返回<expr>指定的值

return <expr>

fn zz =            --定义一个函数
(
    return 0       --返回值
)
    
zz()               --调用函数

----------------以下为返回结果----------------------

zz()
0



函数调用的优先级

一个函数调用优先级比操作数低,而比数学表达式、比较表达式、逻辑表达式要高,这意味着在将函数的变量用括号括起来时必须非常小心。

例如:

sin x+1 的求值顺序为(sinx)+1


必须把形式为表达式的变量用括号括起来,

例如:

sin(x+1)

atan2(y-1)(z-1)






MAXScript 自定义函数 (八)

标签:

原文地址:http://my.oschina.net/VfxZhen/blog/498958

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!