新しいリアクタ機能を追加する

レッスン 6 で、リアクタ イベント :vlr-commandWillStart に、コールバック関数 gp:command-will-start をフックしました。現在、その関数は、いくつかのメッセージを表示するとともに、2 つのグローバル変数 *polyToChange**reactorsToRemove*nil に初期化します。

コールバック関数 gp:command-will-start に機能を追加するには

  1. ファイル gpreact.lsp を開きます。
  2. gp:command‑will‑start 関数を次のように修正して、setq 関数に 2 つの変数を追加します。
    ;; Reset all four reactor globals to nil.
    (setq   *lostAssociativity* nil
            *polyToChange* nil
            *reactorsToChange* nil
            *reactorsToRemove* nil)
  3. 最後の princ 関数呼び出しまでの gp:command‑will‑start の残りのコードを、次のコードに置き換えます。
    (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* が設定され、ユーザに警告が表示されます。

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