パワーディメンションは、AutoCAD Mechanicalに搭載されている、並列寸法の間隔を自動で調整し配置機能です。
今回紹介する自作LISP「PD」は、その考え方を再現し、寸法を速く・整えて入力するための実務向けコマンドとして作成したものです。
仕組みとしては、基準となる寸法を選択したあとに新しく寸法を引くと、寸法間隔調整コマンド「DIMSPACE」が自動で実行されます。
その後は、直列寸法(DIMCONTINUE)でそのまま連続して寸法を入力することができます。
※このLISPは異尺度寸法を前提に作られています
参考動画
;;=================================================================
;; 寸法タイプ判定(DXF100 の最後)
;;=================================================================
(defun getDimClass (ent / dxf last100)
(setq dxf (entget ent)
last100 nil)
(foreach x dxf
(if (= (car x) 100)
(setq last100 (cdr x))
)
)
last100
)
;;=================================================================
;; メインコマンド PD
;; 寸法記入 + DIMSPACE 専用
;;=================================================================
(defun c:PD (/ baseEnt base-list oldlast new p1 p2 first done tmp
oldDimLayer cmd dimclass)
(vl-load-com)
(prompt "\n=== 寸法記入 + DIMSPACE 専用 ===")
;;=======================================================
;; 寸法用レイヤー設定
;;=======================================================
(setq oldDimLayer (getvar "DIMLAYER"))
(if (not (tblsearch "LAYER" "SUNPOU"))
(command "_.LAYER" "_M" "SUNPOU" "_C" "7" "" "")
)
(setvar "DIMLAYER" "SUNPOU")
;;=======================================================
;; 基準寸法選択
;; クリックした瞬間に確定
;;=======================================================
(prompt "\n[DMSP] 基準寸法をクリックしてください。")
(setq baseEnt (car (entsel "\n基準寸法を選択: ")))
(if (or
(null baseEnt)
(/= (cdr (assoc 0 (entget baseEnt))) "DIMENSION")
)
(progn
(prompt "\n寸法が選択されませんでした。終了します。")
(setvar "DIMLAYER" oldDimLayer)
(princ)
(exit)
)
)
(setq base-list (list baseEnt))
;;=======================================================
;; 基準寸法タイプを判定
;;=======================================================
(setq dimclass (getDimClass (car base-list)))
(cond
((= dimclass "AcDbAlignedDimension")
(setq cmd "_.DIMALIGNED")
(prompt "\n基準寸法:平行寸法 → DIMALIGNED")
)
((= dimclass "AcDbRotatedDimension")
(setq cmd "_.DIMLINEAR")
(prompt "\n基準寸法:線形寸法 → DIMLINEAR")
)
(T
(setq cmd "_.DIMLINEAR")
(prompt
(strcat
"\n基準寸法タイプ不明("
(if dimclass dimclass "nil")
") → DIMLINEAR"
)
)
)
)
;;=======================================================
;; 寸法作図ループ
;;=======================================================
(setq first T
done nil)
(while (not done)
(if first
;;===========================================
;; 初回寸法
;; 寸法位置は1点目 p1 を自動指定
;;===========================================
(progn
(setq p1 (getpoint "\n1点目を指定 : "))
(if (null p1) (setq done T))
(if (not done)
(progn
(setq p2 (getpoint "\n2点目を指定: " p1))
(if (null p2) (setq done T))
)
)
(if (not done)
(progn
(setq oldlast (entlast))
;; 寸法作図
;; 3点目の寸法位置は p1 を自動入力
(command cmd p1 p2 p1)
(setq new (entlast))
;; DIMSPACE 実行
(command "_.DIMSPACE")
(foreach b base-list
(command b)
)
(command new)
(command "")
(command "")
(setq first nil)
)
)
)
;;===========================================
;; 2回目以降:直列寸法
;;===========================================
(progn
(prompt "\n直列寸法を続ける点をクリック : ")
(setq oldlast (entlast))
(command "_.DIMCONTINUE" pause)
(setq tmp (entlast))
;; Enterで終了
(if (= tmp oldlast)
(setq done T)
(setq new tmp)
)
)
)
)
;;=======================================================
;; DIMLAYER 元に戻す
;;=======================================================
(setvar "DIMLAYER" oldDimLayer)
(prompt "\n処理を終了しました。")
(princ)
)すぐできる設定手順
- コマンド「PD」を入力
- 基準の寸法を選択
- 寸法の一点目と二点目を選択
- 直列寸法に移行
仁(じん)画像付きのSTEPは、下で確認できますよ!
Contents
操作手順
STEP


- コマンド「PD」を入力します
- 基準の寸法を選択します
※基準の寸法をクリックすると自動で決定します



基準寸法選択で自動で決定するので工程が1つ減っています!
STEP


- 寸法の1点目をクリックします
STEP


- 寸法の2点目をクリックします
- 2点目をクリックした時点で自動で最初の寸法が配置されます
STEP


- 最初に寸法が自動で配置されます
- そのまま「直列寸法記入」に移行します
STEP


- 直列寸法を引き終わったらエンターで終了します
まとめ
- DIMSPACEで寸法間隔を自動調整できる
- DIMCONTINUEでそのまま直列寸法を連続入力できる
寸法の入力から整列までを一括で処理できるため、作業スピードと仕上がりの安定性が大きく向上します。


コメント