undo <boolean>
コンテキストを使うと、スクリプトによるシーンの変更のやり直しが可能かどうかを制御できます。
既定では、MAXScript 内で実行される操作はやり直し可能です。
つまり、リスナーに入力されたシーン変更コマンドは、既定の状態でやり直し可能だということです。コンテキストによるコントロール動作を実行すると、ユーザが undo
のオーバーヘッドをなくしたい場合に、それが可能になります。
例:
undo on ( delete $box* delete $sphere* clearUndoBuffer() )
やり直し可能な操作は、3ds Max の[元に戻す] (Undo)メニュー内に「MAXScript」というラベルで表示されます。
やり直し可能な操作のそれぞれが undo 句全体レベルであることに注意してください。上の例では、やり直しスタックにエントリが 1 つ追加されます。
この場合、両方の delete を単一の操作として格納します。
このエントリに対するやり直しを[元に戻す] (Undo)メニューで選択すると、両方の削除処理が元に戻されます。
適切なやり直しブロック式グループを選択するとそれぞれのやり直し操作をコントロールできます。
MAXScript からやり直しを呼び出すには、max
コマンドを使用します。
max undo
非常に大きなシーン変更のスクリプトを作成する場合、注意してやり直し機能を off
にし、やり直しスタックの補充と大量のメモリの消費が容易に行えるようにする必要があります。その場合、やり直しを禁止すると処理を向上できます。
作成したスクリプトによって実行されるアクションがやり直しスタック内に既に存在するエントリを妨害する可能性がある場合は、やり直しを使用可能にする前にやり直しスタックを完全にクリアする必要があります。
やり直しスタック内のエントリでは、一般にエントリがやり直しスタック内に置かれたときの状態にあるシーンが要求されます。
やり直しスタックのエントリの保存を中断して、互換性のない方法(エントリが引き受けるオブジェクトを削除するなど)でシーンを修正すると、その後やり直しを実行しようとすると 3ds Max がクラッシュする場合があります。
次の関数により、3ds Max におけるシーンの保存およびやり直し状態を制御できます。
clearUndoBuffer()
元に戻すバッファを空にして、元に戻す状態をリセットする方法と変更の保存リクエスタを制御する方法を提供します。
setSaveRequired <boolean>
3ds Max システムの「ダーティ」フラグを設定することができます。このフラグが設定されている場合や、やり直しスタック内にエントリが存在する場合は、[ファイル] (File) > [新規] (New)または[ファイル] (File) > [リセット] (Reset)を選択するときシーン ファイルを保存するかどうかの確認を求められます。
getSaveRequired()
3ds Max システムの「ダーティ」フラグが true
に設定されていたり、やり直しバッファが空でない場合は、true
を返します。やり直しバッファが空でない場合、setSaveRequired false
を呼び出した後でも true
を返します。
通常は、シーンが閉じているときに元に戻すスタックにエントリがあると、3ds Max は変更の保存リクエスタでプロンプトを表示します。MAXScript で「やり直し」処理をコントロールしている場合、常に変更の保存プロンプトを表示するようにできます。
3ds Max の[元に戻す/やり直し] (undo/redo)ドロップダウン リストで、元に戻すことができる MAXScript 操作について、ラベルが若干変更されています。
3ds Max 4 以前のバージョンでは、すべての操作について「MAXScript」と表示されていました。
ツールバー ボタン、メニュー項目、ホットキーまたはクアッド メニュー項目など、元に戻すことができるマクロスクリプトを実行すると、[元に戻す/やり直し] (undo/redo)リストにマクロスクリプト名とともに表示されます。
「undo on」コンテキスト プレフィックスを使って、「undo」キーワードの後に、オプションの文字列リテラル(二重引用符で囲まれたテキスト)を指定できるようになりました。この文字列リテラルは、3ds Max の[元に戻す/やり直し] (undo/redo)リストの[元に戻す] (undo)ブロックのラベルとして使用されます。
undo ["undo_item_label" | label:<string_operand> | variable_name ] <bool_expr> <expr>
ここで、
"undo_item_label"
は文字列リテラルである必要があります。
<string_operand>
はランタイム時に文字列を評価します。
variable_name
は、文字列値を含むグローバルまたはローカル変数です。
例:
rollout test "test" ( local undoString = "Button Press" local buttonPress = 0 button b "press me" on b pressed do with undo label:(undoString + (buttonPress +=1) as string) on box() ) createdialog test
undo "add background" on ( ... )
my_context_name = "An Undo Context" undo my_context_name on ( --... )
この例では、プレフィックスの後に続くブロック式内のすべての操作について、[元に戻す] (undo)ブロックが生成されます。これらの操作は、[元に戻す/やり直し] (undo/redo)リストに、名前として指定した文字列とともに表示されます。
名前は、リテラル文字列でなければなりません。この文字列はオプションです。既定値は "MAXScript" です。