境界の輪郭を描く関数を作成する

前のレッスン終了後、gp:drawOutline 関数は次のようになっています。

;;;--------------------------------------------------------------;
;;;     Function: gp:drawOutline                                 ;
;;;--------------------------------------------------------------;
;;; Description: This function draws the outline of the          ;
;;;              garden path.                                    ;
;;;--------------------------------------------------------------;
(defun gp:drawOutline ()
  (alert
    (strcat "This function will draw the outline of the polyline "
      "\nand return a polyline entity name/pointer."
    )
  )
  ;; For now, simply return a quoted symbol.  Eventually, this 
  ;; function will return an entity name or pointer.
  'SomeEname
)

このままでは、コードは不十分です。しかし、変数 gp_PathData 内に格納された連想リストの情報を使用すれば、歩道の境界を描くための点を計算することができます。ここで、その変数内の情報をどのような方法で gp:drawOutline に渡すかを決定する必要があります。

gp_PathData が、C:GPath 関数内で定義されたローカル変数であることを思い出してください。AutoLISP では、ある関数内で宣言されたローカル変数は、その関数から呼び出されたすべての関数で可視になります(「ローカル変数とグローバル変数を区別する」を参照)。gp:drawOutline 関数は、C:GPath 内から呼び出されます。gp:drawOutline 関数内の変数 gp_PathData を参照することはできますが、これは良いプログラミング習慣ではありません。

どうしてでしょう。同じ変数を使用する 2 つの関数が同じファイル内で定義されている場合、変数がどこで定義され、何のために使用されているかを判断するのは、それほど困難ではありません。しかし、関数が別のファイルで定義されていると(これは、よくあるケースです)、gp_PathData が何を表すかを判断するために、両方のファイルを調べなければなりません。