リアクタ ベースのアプリケーションを書くとき、アプリケーションに関係するオブジェクトに影響するすべてのコマンドを処理する必要があります。不可欠なプログラム設計作業の 1 つは、AutoCAD のすべての編集コマンドを調べ、それぞれに対するアプリケーションの応答方法を決定することです。レッスン 6 の最後の方で紹介したリアクタ追跡シートは、この作業に最適です。ユーザが使用するであろうコマンドを呼び出し、アプリケーションが応答しなければならない動作の種類を書き留めます。考えに含めなければならない他のアクションを、次に示します。
- ユーザが UNDO[元に戻す]コマンドや REDO[やり直し]コマンドを実行したとき、何を行うかを決定。
- ユーザが、リアクタにリンクされた図形を削除した後に OOPS[オブジェクト復活]コマンドを実行したとき、何を行うかを決定。
問題が複雑に なり過ぎないように、このチュートリアルでは、カバーしなければならない可能性をすべてカバーすることはしません。また、このレッスンで扱う機能は、最小限にとどめています。
これらの特別なコマンドに対する完全な機能を作成しない場合でも、次のように、その他のいくつかの編集関数を調べてください。
- ユーザが、ポリライン境界をストレッチ(STRETCH[ストレッチ]コマンドを使用)したとき、いくつかの事柄が発生します。長辺や短辺の方向だけでなく、あらゆる方向にストレッチされる可能性があります。そのため、境界が非常に奇妙な形状になる可能性があります。さらに、いくつの頂点がストレッチされたのかを考慮する必要があります。1 つの頂点のみをストレッチするのと、2 つの頂点を移動するのとでは、結果として得られるポリラインは、まったく違ったものになります。どの場合も、境界に必要な調整を決定したら、タイルは削除され、新しい位置が再計算されなければなりません。
- ユーザがポリライン境界を移動した場合、すべてのタイルは削除され、新しい位置に描き直されなければなりません。ポリライン境界のサイズも形状も変更されていないので、これは、かなり単純な作業です。
- ユーザがポリライン境界を尺度変更した場合、次のことを決定する必要があります。歩道が同じ数のタイルを含むように、タイルも同様に尺度変更するのか?それとも、タイル サイズは同じで、ポリラインが拡大されたか、縮小されたかに応じて、アプリケーションはタイルを追加または除去するのか?
- ユーザがポリライン境界を回転した場合、すべてのタイルは削除され、新しい方向に描き直されなければなりません。
しかし、最初は次のような仕様にします。
- 庭園の歩道に有害な影響を与える編集コマンド(stretch、move、rotate など)を選択してコマンドを開始したときは、ユーザに警告を表示します。
- ユーザが続行した場合、タイルは削除されますが、描き直されません。
- 歩道の輪郭からリアクタを除去します。
注: ユーザが呼び出す AutoCAD コマンドに加えて、図形が、AutoLISP や ObjectARX® アプリケーションによって修正または削除されることもあります。庭園の歩道のチュートリアルで提供されたサンプルは、(entdel <polyline entity>)などの、庭園の歩道のポリライン境界に対するプログラム的な操作をカバーしていません。ここでは、編集リアクタ イベント :vlr-commandWillStart および :vlr-commandEnded は、トリガされません。