面積を算出するLISPを作ったのですが機能しない為、有識者の方にどこが間違えているか教えていただけると助かります。
(defun c:PLAREA (/ sel ent obj area)
;; コマンド名: PLAREA
;; 機能 : 選択したポリラインの面積を m² 単位で表示
;; 1. ポリラインの選択
(setq sel (entsel "\n面積を求めたいポリラインを選択してください: "))
(if sel
(progn
(setq ent (car sel)
obj (vlax-ename->vla-object ent))
;; 2. 選択したオブジェクトが AcDbPolyline かどうか判定
(cond
((= (vla-get-ObjectName obj) "AcDbPolyline")
;; 3. 面積を取得
(setq area (vla-get-area obj))
;; 4. 図面単位が mm(ミリメートル)の場合は mm² → m² に変換
;; 1 m = 1000 mm ⇒ 1 m² = (1000 mm)² = 1,000,000 mm²
(setq area (/ area 1000000.0))
;; 5. 結果をコマンドラインに表示
(princ (strcat "\n面積 = " (rtos area 2 3) " 平方メートル"))
)
(T
(princ "\n選択したオブジェクトはポリラインではありません。")
)
)
)
(princ "\nオブジェクトが選択されていません。")
)
(princ)
)
LISPについて
- 土木太郎
- 2025/01/16 (Thu) 20:44:12