[maxscript] Undoを強制的にオフにする特殊なパターン

2014/03/09

3dsmax Maxscript

t f B! P L


maxscript tips in undo method
以下の様に、reduceKeysコマンドをforループで一括処理するようなスクリプトを作ったのですが、そこ全体にかけたUndoコマンドがうまく動作せず・・・。

Undo on(
    for i in 1 to selection.count do(
        reduceKeys コマンド
    ) -- end for loop
) -- end undo


どうもreduceKeysコマンド内に、Undoが内包されている?感じの動作がされて、ループ内でreduceKeysが行われるたびに1つずつUndoリストが増えてしまい、スクリプトを一括でUndoできなかった。

ネットで調べると、reduceKeysコマンドをUndoで囲むように記述されているスクリプトを発見・・・。とりあえず真似してみて、以下のように、記述すると解決された。

Undo on(
    for i in 1 to selection.count do(
        Undo on(
            reduceKeys コマンド
        ) -- end undo
    ) -- end for loop
) -- end undo

おそらく、スクリプト側でreduceKyesにUndoを定義することで、forループの外側のUndoにひとまとめにするように処理がされるようになったのだと思われます。。。
reduceKeysコマンドでしか確認していませんが、これ以外にもコマンド自体にUndoが内包されているような場合に、同様に問題を解決できるのでは?と思われます。


ブログ内検索:Search

Translate

ラベル

Blogリンクタグ

QooQ