レッスン 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* が設定され、ユーザに警告が表示されます。
庭園の歩道アプリケーションをテストすると、庭園の歩道を修正したときに、関連性を失わせる他の編集コマンドが見つかるかもしれません。これらのコマンドをクォーテーション付きリストに追加すれば、何が起こるかをユーザに警告できます。この関数が起動されると、ユーザはコマンドを起動しても、修正する図形を選択せずにすみます。ユーザは、コマンドをキャンセルし、図形を変更せずにおくことができます。