Q3:寸法線の平均値記入/DimSetAvgFromLines
このマクロでできること
寸法線1本だけ選択 → その寸法の表示文字を変更 選択した複数線分の「平均値・最小値・最大値」を使用 寸法表示は 2段構成:「(平均)」「最小〜最大」
■autocadをマクロで実行させるコマンドです
マクロは、メニュー>管理>ユーザーインターフェース(コマンド:CUI)を入力
^C^C(load "DimSetAvgFromLines.lsp") (c:DimSetAvgFromLines)
■寸法線の平均値記入(DimSetAvgFromLines.lsp)
(defun c:DimSetAvgFromLines ( / ent_dim obj_dim ss_line ent obj len total
count avg min max text)
(vl-load-com)
;; 寸法線を1つ選択
(prompt "\n【ステップ1】変更対象の寸法線を左クリックで選択:")
(setq ent_dim (car (entsel "\n寸法線を選択してください:")))
(if ent_dim
(progn
(setq obj_dim (vlax-ename->vla-object ent_dim))
;; 平均をとる線分を選択
(prompt "\n【ステップ2】平均をとる線分(LINE, LWPOLYLINE)を左クリックで複数選択 → 右クリックで確定:")
(setq ss_line (ssget '((0 . "LINE,LWPOLYLINE"))))
(if ss_line
(progn
;; 初期化
(setq total 0
count 0
min nil
max nil
i 0)
;; 線分の長さを取得
(while (< i (sslength ss_line))
(setq ent (ssname ss_line i)
obj (vlax-ename->vla-object ent))
(if (vlax-property-available-p obj 'Length)
(progn
(setq len (vla-get-Length obj))
(setq total (+ total len))
(setq count (1+ count))
(if (or (null min) (< len min)) (setq min len))
(if (or (null max) (> len max)) (setq max len))
)
)
(setq i (1+ i))
)
;; 平均と寸法文字の作成
(if (> count 0)
(progn
(setq avg (fix (+ 0.5 (/ total count))))
(setq min (fix (+ 0.5 min)))
(setq max (fix (+ 0.5 max)))
(setq text (strcat "(" (itoa avg) ")\\P" (itoa min)
"〜" (itoa max)))
(vla-put-TextOverride obj_dim text)
(princ (strcat "\n寸法文字を(" (itoa avg) ")\\P" (itoa
min) "〜" (itoa max) " に変更しました。"))
)
(prompt "\n有効な線分が見つかりませんでした。")
)
)
(prompt "\n線分が選択されていません。")
)
)
(prompt "\n寸法線が選択されていません。")
)
(princ)
)
直接実行する場合
上記コードを DimSetAvgFromLines.lsp に保存←保存箇所は以下※1)
AutoCADで APPLOAD → DimSetAvgFromLines.lsp を読み込む
コマンドラインに:
DimSetAvgFromLines
として実行
※1)
C:\Users\user\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\jpn\Support

