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

レッスン 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* が設定され、ユーザに警告が表示されます。

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