この構造体では、3 つの theHold パブリック SDK メソッドを除くすべてのメソッドが公開されています。(欠落している 3 つのメソッドは、MXS スクリプト コンテキストにおいて有用ではありません。)
3ds Max のアンドゥ/リドゥ システムでは、theHold と呼ばれる Hold クラスのグローバル インスタンスを使用します。開発者は theHold オブジェクトのメソッドを呼び出して、アンドゥ/リドゥ システムにアクセスします。
警告: |
これらは、付加的な保護機能を何も組み込まずに、直接 SDK メソッドを公開したものです。 自分の実行内容をきちんと把握してください。コードは try/catch ブロック内で実行して、hold システムを一貫した状態に保つようにします。 |
引数を取得するメソッドについては、使用前に引数をチェックしますが、引数が不正な場合でもエラーは発行されません。その代わりに、既定値の文字列 "" が、Accept と SuperAccept、および復元用の &unsupplied に使用されます。
データベースを変更済みの状態にしておき、アンドゥ システムにアンドゥ オブジェクトを登録します。これによってユーザは操作を元に戻すことができます。パラメータは、[編集](Edit)メニューの[元に戻す](Undo)または[やり直し](Redo)の隣に表示される文字列です。
開発者は、データベースを変更するとき、theHold が「holding」(保持された状態)であるかどうかを確認する必要があります。これは Begin() メソッドが呼び出されたことを示しています。可能なアンドゥ/リドゥ操作が開始されたことを表しているのです。Hold が保持された状態でない場合 Begin() を呼び出す必要があります。Begin() が呼び出された後、システムは復元オブジェクトを受け入れることができます。
プラグインがデータベースへの変更を開始しようとした時点で、システムがすでに「holding」になっている場合もあります。たとえば、コントローラは通常 Begin() を呼び出しません。たとえば、コントローラは通常 Begin() を呼び出しません。これは、通常 Begin() が既に呼び出されているからです。手続き型オブジェクトでは通常 Begin() を呼び出します。手続き型オブジェクトがシステムの他の部分で変更されることはないので Begin() も呼び出されていないからです。
データベースを以前の状態に復元し、復元オブジェクトを送出します。これによって操作がキャンセルされます。
これは内部使用のメソッドです。プラグインの開発者はこのメソッドを呼び出してはいけません。Accept() が呼び出されたときに、元に戻せないようにします。
これは内部使用のメソッドです。プラグインの開発者はこのメソッドを呼び出してはいけません。Accept() が呼び出されたときに、元に戻せるようにします。
このメソッドは 3ds Max に対して内部使用されるもので、プラグインの開発者はこのメソッドを呼び出してはいけません。このメソッドでは、データベースを変更済みの状態のままにしておきますが、復元オブジェクトを送出します。
3ds Max の現在のセッションで Put() が呼び出された回数を返します。
これは、theHold.Begin() が呼び出されたかどうかを示します。データベースを変更するあらゆる操作で、theHold が現在 holding 状態であるかどうかをチェックします。アンドゥ システムは「holding」である場合、復元オブジェクトを受け入れることができます。
戻り値: theHold が holding の場合は true、それ以外の場合は false を返します。
システムがリドゥ処理を行っている場合はゼロ以外の値、そうでない場合はゼロを返します。
直前の Begin() 以降の復元オブジェクトを渡しますが、まだ holding 状態のままです。複数の Begin-End リストをグループ化して単一のスーパーグループにします。
このメソッドは、直前の Begin() 以降に登録されたすべての復元オブジェクト上で Restore() を呼び出します。これによってデータベースは Begin() が呼び出された時点の状態に復元されます。復元オブジェクトは削除できません。
システムが復元またはリドゥ処理を行っている場合はゼロ以外の値、そうでない場合はゼロを返します。
システムが復元処理を行っている場合はゼロ以外の値、そうでない場合はゼロを返します。isUndo パラメータは更新され、アンドゥによる復元なのかどうかを示すようになりました。アンドゥによる復元であればゼロ以外、そうでない場合はゼロが割り当てられます。
これは内部使用のメソッドです。holding が中断されていた場合に、それを再開します。
開発者が SuperBegin() を使用した場合、このメソッドは[受諾](Accept)のために使用されます。データベースを変更済みの状態にしておき、アンドゥ システムに復元オブジェクトを登録します。これによってユーザは操作を元に戻すことができます。文字列パラメータは、[編集](Edit)メニューの[元に戻す](Undo)または[やり直す](Redo)の隣に表示されるテキストです。
通常は必要ではありませんが、特別な場合に役に立つメソッドです。これを使用すると、開発者は Begin()/Accept() シーケンスのセットをグループ化して 1 度の操作でアンドゥが実行できるようになります。
Shift-Move コマンドを使用してシーン内に新しいノードを作成する事例を考えてみます。このプロセスには 2 つの部分があります。最初に、ノードのクローンを作成し、2 番目に、ユーザがマウスを動かして新しいノードをシーン内に配置するときに位置を追跡する必要があります。この操作を元に戻そうとする場合、ユーザは当然、[元に戻す](Undo)コマンドを 1 度選択するだけで実行できるだろうと考えます。しかし、このプロセスは単一の操作ではないのです。最初にノードがクローン化し、次に、シーン内でノードを移動し、位置を復元し、もう一度移動させ、再度復元するといった反復操作が行われていたのです。このような場合の処理には、SuperBegin()、SuperAccept() および SuperCancel() といった名前の theHold メソッドを使用します。開発者はこれらを使用して、複数の復元オブジェクトを 1 つにまとめて、[元に戻す](Undo)を 1 度選択しただけでアンドゥされるようにできます。なお、この例で使用する必要があるのは SuperBegin() と SuperAccept() のみです。移動はインタラクティブに復元されていたからです。通常は、データベースの変更に複数の操作を行った場合でも、開発者はこれらのメソッドを使用する必要はありません。theHold.Accept() が呼び出されたときに、アンドゥ オブジェクトの一部として必要となるすべての復元オブジェクトがアンドゥ システムによって自動的に登録され、[元に戻す](UNDO)コマンドを 1 度使用するだけでアンドゥが実行されるからです。
開発者が SuperBegin() を使用した場合、このメソッドは[キャンセル](Cancel)のために使用されます。データベースを以前の状態に復元し、復元オブジェクトを送出します。これによって操作がキャンセルされます。
中断されている場合は true、それ以外の場合は false を返します。
スーパーレベルの深さを返します。通常は 0 です。 SuperBegin を呼び出すたびに増加し、SuperAccept か SuperCancel を呼び出すたびに減少します。
アンドゥおよびリドゥ エントリの数を返します。3ds Max 8 以降 で使用可能です。
アンドゥおよびリドゥ エントリの最大数を返します。[基本設定](Preference Settings)ダイアログ ボックスの[シーンを元に戻す](Scene Undo)/[レベル](Levels)の設定と同じものです。3ds Max 8 以降 で使用可能です。