在Maxscript中停止脚本

时间:2013-01-18 14:34:11

标签: maxscript

Maxscript中是否有一个允许您提前停止脚本的命令?比方说,脚本依赖于将单个对象作为选择。如果没有什么可以选择那么它将无效。

myObj = $
if ($ == undefined) then STOP
-- rest of code

其中STOP表示难以捉摸或虚构的停止命令

而不是像以下那样进行测试:

myObj = $
if ($ != undefined) then
(
--rest of code
)

哪个好,但它确实意味着将大部分脚本放在括号中 - 我发现它使代码成为一个但更难以编辑。

2 个答案:

答案 0 :(得分:2)

这取决于你通常可以使用return强制提前退出。即使在事件处理程序的情况下,它也可以工作,因为它们基本上只是函数:

rollout test "Test"
(
    button btn "Exception"

    on btn pressed do
    (
        if selection.count != 1 do
            return messageBox "Selection count expected to be one."
        if NOT isKindOf selection[1] Editable_poly do
            return messageBox "Object not an Editable Poly."
        btn.text = selection[1].name
    )
)
createDialog test

由于某些实现细节,如果在循环体中或可能多次执行的其他地方使用,它会使整个脚本变慢。

如果您只想退出脚本并仅在监听器中打印信息,throw可能是一个更好的功能。

    if selection.count != 1 do
        throw "Selection count expected to be one."
    if NOT isKindOf selection[1] Editable_poly do
        throw "Object not an Editable Poly"
    print selection[1].name

然而,在大多数情况下,您目前使用的是最合适的解决方案。如果你想改进它(特别是如果你发现自己一遍又一遍地编写同一段代码),你可以编写一个类似于Filters的自定义结构:

    #Struct:Filters(
        GetModOrObj:<fn>; Public,
        Is_EditSpline:<fn>; Public,
        CanSwitchTo_Segment:<fn>; Public,
        HasBaseObjectProperty:<fn>; Public,
        ...
        Is_EditPolyMod:<fn>; Public,
        Is_This_EditPolyObj:<fn>; Public,
        Is_EditPatch:<fn>; Public,
        CanSwitchTo_Face:<fn>; Public)

答案 1 :(得分:1)

使用exit,这是一个简单的例子:a = 100

while True do

(

    a -= 1

    print a

    if a == 20 do

    (

        print "a is equal to 20!" 

        exit

    )

)