この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

LISPについて
面積を算出する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)
)
  • 土木太郎
  • MAIL
  • 2025/01/16 (Thu) 20:44:12
Re: LISPについて
試してみましたが、動作しますけど・・・
ただ、変数に既存のコマンドと同じ名前(area)は使わないほうがいいと思います。
  • LUNE
  • 2025/01/17 (Fri) 10:16:09
Re: LISPについて
(VL-LOAD-COM)
が宣言されていないから?

「機能しない」の状況を詳しく。
エラーが出ているならエラーの内容を。
途中で止まっているなら、どこで止まっているのか。
など。
  • 通りすがりの人
  • 2025/01/17 (Fri) 10:32:38
Re: LISPについて
AIに作ってもらうと、下記の様になりました。

(defun c:ShowAreaInMeters ( / ent obj area)
(setq ent (car (entsel "\n面積を求めたいポリラインを選択してください: ")))
(if (and ent
(setq obj (vlax-ename->vla-object ent))
(eq (vla-get-ObjectName obj) "AcDbPolyline")
(> (vla-get-Area obj) 0)
)
(progn
(setq area (/ (vla-get-Area obj) 1000000.0)) ; mm²からm²に変換
(princ (strcat "\n面積 = " (rtos area 2 6) "平方メートル"))
)
(princ "\n選択したオブジェクトはポリラインではないか、面積を持っていません。")
)
(princ)
)
  • 通りすがりの人
  • 2025/01/17 (Fri) 10:35:24

返信フォーム






プレビュー (投稿前に内容を確認)