レッスン 6 で、リアクタ イベント :vlr-commandWillStart に、コールバック関数 gp:command-will-start をフックしました。現在、その関数は、いくつかのメッセージを表示するとともに、2 つのグローバル変数 *polyToChange* と *reactorsToRemove* を nil に初期化します。
;; Reset all four reactor globals to nil.
(setq *lostAssociativity* nil
*polyToChange* nil
*reactorsToChange* nil
*reactorsToRemove* nil)
(if (member (setq currentCommandName (car command-list))
'( "U" "UNDO" "STRETCH" "MOVE"
"ROTATE" "SCALE" "BREAK" "GRIP_MOVE"
"GRIP_ROTATE" "GRIP_SCALE" "GRIP_MIRROR")
) ;_ end of member
(progn
(setq *lostAssociativity* T)
(princ "\nNOTE: The ")
(princ currentCommandName)
(princ " command will break a path's associativity .")
) ;_ end of progn
) ;_ end of if
このコードは、タイルと歩道の関連性を失わせるようなコマンドを、ユーザが実行しようとしたかどうかをチェックします。そのようなコマンドをユーザが実行しようとすると、グローバル変数 *lostAssociativity* が設定され、ユーザに警告が表示されます。
庭園の歩道アプリケーションをテストすると、庭園の歩道を修正したときに、関連性を失わせる他の編集コマンドが見つかるかもしれません。これらのコマンドをクォーテーション付きリストに追加すれば、何が起こるかをユーザに警告できます。この関数が起動されると、ユーザはコマンドを起動しても、修正する図形を選択せずにすみます。ユーザは、コマンドをキャンセルし、図形を変更せずにおくことができます。