境界線のタイプを選択できるようにする

庭園の歩道アプリケーションでは、境界の輪郭をライトウェイト ポリラインで描くか、以前のスタイルのポリラインで描くかを、ユーザが選択できるようになります。gp:drawOutline の最初のバージョンでは、境界は常にライトウェイト ポリラインで描かれます。ダイアログ ボックス インターフェースが完成したので、以前のスタイルのポリラインを描くオプションを作成することができます。これを実現するには、描くポリラインのタイプを gp:drawOutline が決定し、それを描くようにしなければなりません。

gp:drawOutline の変更が必要な個所を、次のコード内に示します。gpdraw.lsp の変更個所は、次のコードの太字で示された部分です。

(setq PathAngle  (cdr (assoc 50 BoundaryData))
    Width        (cdr (assoc 40 BoundaryData))
    HalfWidth    (/ Width 2.00)
    StartPt      (cdr (assoc 10 BoundaryData))
    PathLength   (cdr (assoc 41 BoundaryData))
    angp90       (+ PathAngle (Degrees->Radians 90))
    angm90       (- PathAngle (Degrees->Radians 90))
    p1           (polar StartPt angm90 HalfWidth)
    p2           (polar p1 PathAngle PathLength)
    p3           (polar p2 angp90 Width)
    p4           (polar p3 (+ PathAngle (Degrees->Radians 180)) PathLength)
    poly2Dpoints (apply 'append
                   (mapcar '3dPoint->2dPoint (list p1 p2 p3 p4))
                 )
    poly3Dpoints (mapcar 'float (append p1 p2 p3 p4))

    ;; get the polyline style
    plineStyle   (strcase (cdr (assoc 4 BoundaryData)))
) ;_ end of setq

;; Add polyline to the model space using ActiveX automation
(setq pline (if (= plineStyle "LIGHT")
              ;; create a lightweight polyline
              (vla-addLightweightPolyline
                      *ModelSpace*      ; Global Definition for Model Space
                      (gp:list->variantArray poly2Dpoints) ;data conversion
              ) ;_ end of vla-addLightweightPolyline
     
              ;; or create an old-style polyline
              (vla-addPolyline
                      *ModelSpace*
                      (gp:list->variantArray poly3Dpoints) ;data conversion
              ) ;_ end of vla-addPolyline
            ) ;_ end of if
) ;_ end of setq

コードの変更個所を入力するとき、間違えやすい可能性があります。コードの追加だけではなく、既存のコードを削除しなければならない個所や並べ替えが必要な個所もあります。このオンライン チュートリアルの setq 文全体をコピーし、それを貼り付けることをお勧めします。