カスタム コマンドを元に戻す/やり直す

 
 
 

C++ API カスタム コマンドによってシーン以外のデータに対して実行した操作を元に戻すまたはやり直す必要がある場合は、そのコマンドを Undo コールバックと Redo コールバックに実装します。

重要:

カスタムコマンドで元に戻せるのは、ユーザデータで実行した作業のみです。元に戻すまたはやり直すときにシーンデータを変更すると、Softimageが不安定になることがあります(取り消し可能なコマンドを呼び出した場合など)。たとえば、カスタム コマンドで一連の SetValue コマンドを実行する場合、これらの操作を Undo コールバックで元に戻さないようにします。これは Softimage によって自動的に処理されます。

取り消し可能なコマンドの実行中にユーザ データを変更すると、いつ変更するかにかかわらずカスタム Undo コールバックは常にすべての Softimage コマンドが取り消された時点で実行されます。また、Redo コールバックは常に Softimage コマンドがやり直される前に呼び出されます。

元に戻す/やり直す機能の実装

コマンドの Execute コールバックでは、TermUndoRedo コンテキスト属性を調べ、コマンド操作を元に戻すまたはやり直すためにメモリを割り当てる必要があるかどうかを確認できます。メモリの割り当てが必要な場合は、UndoRedoData 属性を設定してコマンド操作データを格納します。 その後、このデータは Undo コールバックと Redo コールバックで使用され、コマンドの Execute コールバックで実行した作業を元に戻すまたはやり直す処理が行われます。このデータは TermUndoRedo で解放する必要があります。

より細かい制御を行う場合は、元に戻すデータの管理をすべてプラグインで処理することができます。 このような場合、カスタム コマンドで固有の Undo スタックを保持し、Softimage の Undo スタックと一致させるようにする必要があります。

ヒント:

簡単な取り消し可能なコマンドの例では、取り消し可能なカスタム コマンドを C++ API を使用して実装する方法を示します。 この例は NetView を 0,100 で作成し、取り消し可能なコマンドによってウィンドウを 200,100 へ移動します。 ウィンドウの配置は Softimage の組み込みコマンドである Undo および Redo を介して元に戻すまたはやり直すことができます。