庭園の歩道の境界を描く

庭園の歩道のサイズと描く方向の情報を取得したら、その情報を使用して庭園の歩道の境界を描くことができます。

Gardenpath 関数のユーザとの対話処理は、3 つのセカンダリ関数で定義されます。これらのセカンダリ関数は、AutoLISP プログラミング言語の一部である getxxx 関数を 1 つまたは複数使用して、庭園の歩道の寸法と配置だけでなく、庭園の歩道内に配置するタイルも定義します。ユーザからの入力を取得するために使用するセカンダリ関数は、次のとおりです。

庭園の歩道の境界描画関数とタイル描画関数の LSP ファイルを作成する

次に、gardenpath 関数の境界描画関数とタイル描画関数を格納するために使用する LSP ファイルを作成する方法を説明します。

Windows
  1. 次のいずれかの操作を行います。
    • (Windows 7) [スタート]ボタン [すべてのプログラム] [アクセサリ] [メモ帳]をクリックします。
    • (Windows 8) [スタート]画面で、note と入力し、[メモ帳]をクリックします。
  2. メモ帳で、[ファイル]メニュー [名前を付けて保存]を選択します。
  3. [名前を付けて保存]ダイアログ ボックスで、[ドキュメント] (または[マイ ドキュメント])フォルダに移動し、GardenPath フォルダをダブルクリックして現在のフォルダにします。
  4. [ファイル名]テキスト ボックスに、gpdraw.lsp と入力します。
  5. [ファイルの種類]ドロップダウン リストをクリックし、[すべてのファイル(*.*)]を選択します。
  6. [文字コード]ドロップダウン リストをクリックし、[ANSI]を選択します。[保存]をクリックします。

    LSP ファイルは閉じないでください。

Mac OS
  1. [Finder]で、Mac OS のメニュー バーから[移動]メニュー [アプリケーション]を選択します。
  2. [アプリケーション]ウィンドウで、[テキストエディット]をダブルクリックします。
  3. テキストエディットで、Mac OS のメニュー バーから[テキストエディット]メニュー [環境設定]を選択します。
  4. [環境設定]ダイアログ ボックスで、次の操作を行います。
    • [標準テキスト]をオンにします。
    • [スマート引用符]オプションをオフにします。
    • [スマート ダッシュ記号]オプションをオフにします。
    • [スマート リンク]オプションをオフにします。
    • [閉じる]ボタンをクリックします。
  5. Mac OS のメニュー バーから[ファイル]メニュー [保存]を選択します。
  6. [名称未設定]ダイアログ ボックスで、[書類]フォルダに移動し、GardenPath フォルダを選択して現在のフォルダにします。
  7. [別名で保存]テキスト ボックスに、gpdraw.lsp と入力します。[保存]をクリックします。
  8. ファイル拡張子 .lsp を使用するように求めるプロンプトが表示されたら、[.LSP を使用]をクリックします。

    LSP ファイルは閉じないでください。

歩道の境界を計算する

次の手順では、gp:calcPathBoundary という名前の関数を定義できます。この関数は、庭園の歩道の境界の 4 つのコーナーを計算します。

gp:calcPathBoundary 関数は、単一の引数を受け入れます。

gp:calcPathBoundary は、gp:drawPathBoundary 関数によって描画されるポリラインと庭園の歩道の境界のコーナー点を含むリストを返します。

  1. メモ帳またはテキストエディットのエディタ領域に、次のように入力します。
    (defun gp:calcPathBoundary (boundaryData / pathAngle pathWidth startPt
                                               pathLength angm90 angp90 p1 p2
                                               p3 p4 plineStyle pline polyPoints
                               )
    
      ; Extract values from the list boundaryData
      (setq	pathAngle     (cdr (assoc 50 boundaryData))
            pathWidth     (cdr (assoc 40 boundaryData))
            pathLength    (cdr (assoc 41 boundaryData))
            startPt       (cdr (assoc 10 boundaryData))
            plineStyle    (strcase (cdr (assoc 4 boundaryData)))
      )
    
      ; Calculate the positive and negative angle from 90 degrees 
      (setq angp90        (+ pathAngle (Degrees->Radians 90.0))
            angm90        (- pathAngle (Degrees->Radians 90.0))
      )
    
      ; Calculate the boundary points for the garden path
      (setq p1            (polar startPt angm90 (/ pathWidth 2.0))
            p2            (polar p1 pathAngle pathLength)
            p3            (polar p2 angp90 pathWidth)
            p4            (polar p1 angp90 pathWidth)
      )
    
      ; Add the polyline to the drawing
      (setq	pline        (gp:drawPathBoundary p1 p2 p3 p4 plineStyle))
    
      ; Return a list of dotted pairs that represent the calculated points
      ; for the corners of the garden path
      (setq polyPoints    (list
                            (cons 12 p1)
                            (cons 13 p2)
                            (cons 14 p3)
                            (cons 15 p4)
                          )
      )
      
      ; Return the entity name of the polyline and its points
      (list pline polyPoints)
    )
  2. LSP ファイルを保存します。

歩道の境界を描く

次の手順では、gp:drawPathBoundary という名前の関数を定義できます。この関数は、ユーザが入力した値に基づいて、庭園の歩道の境界を描画するために使用されます。

gp:drawPathBoundary 関数は、次の 5 つの引数を受け入れます。

gp:drawPathBoundary は、描画されるポリラインの図形名を返します。

  1. メモ帳またはテキスト エディットのエディタ領域で、gp:calcPathBoundary 関数の最後の右括弧の後ろで、[Enter]を 2 回押します。その後、次のように入力します。
    (defun gp:drawPathBoundary (p1 p2 p3 p4 plineStyle / plinetype-save)
      ; Store the current value of the PLINETYPE system variable
      (setq plinetype-save (getvar "PLINETYPE"))
      
      ; Use the PLINETYPE system variable to control the
      ; type of polyline to create with the PLINE command
      (if (= (strcase plineStyle) "PLINE")
        (setvar "PLINETYPE" 0)
        (setvar "PLINETYPE" 1)
      )
    
      ; Draw the boundary of the garden path
      (command "._pline" p1 p2 p3 p4 "_c")
    
      ; Restore the previous value of PLINETYPE
      (setvar "PLINETYPE" plinetype-save)
    
      ; Return the last object drawn, the polyline in this case
      (entlast)
    )
  2. LSP ファイルを保存します。