;; 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) )