1

Maxscript 中是否有一个命令可以让您提前停止脚本?例如,脚本依赖于将单个对象作为选择。如果没有什么可供选择,那么它将不起作用。

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

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

而不必进行如下测试:

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

这很好,但这确实意味着将大部分脚本放在括号中 - 我发现它使代码变得更难编辑。

4

2 回答 2

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)
于 2013-01-18T17:17:13.323 回答
1

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

while True do

(

    a -= 1

    print a

    if a == 20 do

    (

        print "a is equal to 20!" 

        exit

    )

)
于 2017-01-18T12:59:11.047 回答