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

 
 
 

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 へ移動します。 ウィンドウの位置設定を元に戻す処理とやり直しは、Undo および Redo Softimage 組み込みコマンドで実行します。