Q10: 円に接する補強筋を作図(定着有り)/OSQDIM_HV
このマクロでできること
図面上で選択した 円(CIRCLE) に対して、円に外接する水平線2本(上・下)と鉛直線2本(左・右)を自動作図します。 さらに、各線の両端(交点)から外側へ同一長さ
P だけ延長して描きます。。
※開口補強鉄筋の作図で使用します。(定着長有り版)
■円に接する補強筋を作図(定着長有り)
;; OSQDIM_HV
;; 選択円に外接する「水平2本・鉛直2本」を作図し、
;; 各線の両端(交点)から同じ長さPだけ外側に延長して描く(寸法なし)
(defun c:OSQDIM_HV ( / ent obj cen r cx cy cz curLay omode
P
xL xR yB yT
mkline )
(vl-load-com)
;; LINE を確実に生成(OSNAP等の影響なし)
(defun mkline (p q lay)
(entmake (list (cons 0 "LINE") (cons 8 lay) (cons 10 p) (cons
11 q))))
;; 円を選択
(setq ent (car (entsel "\n外接(HV)線を作る円を選択: ")))
(if (not (and ent (= (cdr (assoc 0 (entget ent))) "CIRCLE")))
(progn (prompt "\nCIRCLEを選択してください。")(princ))
(progn
(setq obj (vlax-ename->vla-object ent)
cen (vlax-get obj 'Center)
r (vlax-get obj 'Radius)
cx (car cen)
cy (cadr cen)
cz (caddr cen)
curLay (getvar "CLAYER"))
;; 延長長さ P
(initget 6) ; 正の実数のみ
(setq P (getreal "\n交点からの延長長さPを入力(例 480): "))
(if (or (null P) (<= P 0.0))
(prompt "\nキャンセルしました。")
(progn
;; 作図中は OSNAP 無効化(終了時に復元)
(setq omode (getvar "OSMODE"))
(setvar "OSMODE" 0)
;; 基本座標
(setq xL (- cx r)) ; 左側 x = cx - r
(setq xR (+ cx r)) ; 右側 x = cx + r
(setq yB (- cy r)) ; 下側 y = cy - r
(setq yT (+ cy r)) ; 上側 y = cy + r
;; 上下の水平線:両端を P 延長
(mkline (list (- xL P) yT cz) (list (+ xR P) yT cz) curLay) ; 上
(mkline (list (- xL P) yB cz) (list (+ xR P) yB cz) curLay) ; 下
;; 左右の鉛直線:上下端を P 延長
(mkline (list xL (- yB P) cz) (list xL (+ yT P) cz) curLay) ; 左
(mkline (list xR (- yB P) cz) (list xR (+ yT P) cz) curLay) ; 右
;; OSNAP 復元
(setvar "OSMODE" omode)
(prompt "\nOSQDIM_HV:外接HV線を各端Pだけ延長して作図しました。")
)
)
)
)
(princ)
)
📝 使い方
・APPLOAD で本LISPを読み込み
・コマンドラインで OSQDIM_HV と入力して実行
・外接させたい 円をクリック して選択
・延長長さ P を数値で入力(例:480)
・円に接する 水平2本・鉛直2本 が作図され、各端が P 分だけ外側に延長された状態で出力されます

