Q9: 円に接する45°補強筋を作図(定着有り)/OSQDIM
このマクロでできること
図面上で選択した円に対して、円に外接する 45°回転の正方形(接線4本) を自動作図します。 さらに、その正方形の各頂点(接線の交点)から外側へ、指定長さ
P の突出線を2本(隣接2辺の延長方向)描きます。
※開口補強鉄筋の作図で使用します。(定着長有り版)
■円の中心に同心で、円に4か所で接する正方形を作図
;; OSQDIM
;; 1) 選択円に外接する水平2本・鉛直2本を、各端Pだけ延長して作図
;; 2) 作成した4本だけを、円の中心を基準に +45° 回転
(defun c:OSQDIM ( / ent obj cen r cx cy cz P
xL xR yB yT
omode curLay
mkline eTop eBot eLft eRgt ss )
(vl-load-com)
;; LINEを確実に生成
(defun mkline (p q lay)
(entmakex (list (cons 0 "LINE") (cons 8 lay) (cons 10 p) (cons
11 q))))
;; 円を選択
(setq ent (car (entsel "\n外接線を作る円を選択: ")))
(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を一時OFF
(setq omode (getvar "OSMODE"))
(setvar "OSMODE" 0)
;; 基本座標(HV外接)
(setq xL (- cx r) xR (+ cx r)
yB (- cy r) yT (+ cy r))
;; 4本作図(各端P延長)…作ったenameを保持
(setq eTop (mkline (list (- xL P) yT cz) (list (+ xR P) yT cz) curLay))
(setq eBot (mkline (list (- xL P) yB cz) (list (+ xR P) yB cz) curLay))
(setq eLft (mkline (list xL (- yB P) cz) (list xL (+ yT P) cz) curLay))
(setq eRgt (mkline (list xR (- yB P) cz) (list xR (+ yT P) cz) curLay))
;; 4本だけ選択セットへ
(setq ss (ssadd))
(foreach e (list eTop eBot eLft eRgt) (setq ss (ssadd e ss)))
;; 円の中心を基点に +45° 回転
(command "_.ROTATE" ss "" cen 45)
;; OSNAP復帰
(setvar "OSMODE" omode)
(prompt "\nOSQDIM:HV外接線を作図し、中心基準で45°回転しました。")
)
)
)
)
(princ)
)
📝 使い方
・APPLOAD で本LISPを読み込み
・コマンドラインで OSQDIM と入力して実行
・外接させたい円をクリックして選択
・延長長さ P を数値で入力(例:480)
・円に接する 水平2本・鉛直2本 が作図され、各端が P 分だけ外側に延長された状態で出力されます

