AutoLISP入門その1,AutoLISP 入門その2,AutoLISP入門その3,AutoLISP入門その4
AutoLISPで図形を描くには、正確な座標計算が欠かせません。今回は、梁(ビーム)を描くために必要な点を計算する方法を紹介します。キーワードは「角度」「距離」「(polar)関数」です!
polar関数とは?
AutoLISPの (polar)
関数は、ある点から指定した角度と距離にある別の点を返してくれる便利な関数です。
(setq p2 (polar ip (dtr 180.0) (- (/ lb 2) nl)))
この例では、挿入点 ip
から180度の方向に、ビームの長さの半分からノッチの長さを引いた距離だけ離れた点 p2
を計算しています。
角度はラジアンで!
AutoLISPでは角度を「度」ではなく「ラジアン」で指定する必要があります。
ラジアンとは、円の中心角で、半径と同じ長さの弧が作る角度のこと。180度は πラジアンです。
変換関数を作っておきましょう:
(defun dtr (x) ; 度をラジアンに変換
(* pi (/ x 180.0))
)
ビームの各点を計算する
以下のコードは、ユーザーから必要な寸法を取得し、ビームの各点を計算するルーチンです:
(defun c:testbeam ()
;; ユーザー入力
(setq lb (getdist "\nLength of Beam : "))
(setq hb (getdist "\nHeight of Beam : "))
(setq wt (getdist "\nFlange Thickness : "))
(setq ep (getdist "\nEnd Plate Thickness : "))
(setq nl (getdist "\nLength of Notch : "))
(setq nd (getdist "\nDepth of Notch : "))
(setq ip (getpoint "\nInsertion Point : "))
;; 座標計算
(setq p2 (polar ip (dtr 180.0) (- (/ lb 2) nl)))
(setq p3 (polar p2 (dtr 270.0) wt))
(setq p4 (polar p2 (dtr 270.0) nd))
(setq p5 (polar p4 (dtr 180.0) nl))
(setq p6 (polar p5 (dtr 180.0) ep))
(setq p7 (polar p6 (dtr 270.0) (- hb nd)))
(setq p8 (polar p7 (dtr 0.0) ep))
(setq p9 (polar p8 (dtr 90.0) wt))
(setq p10 (polar p9 (dtr 0.0) lb))
(setq p11 (polar p8 (dtr 0.0) lb))
(setq p12 (polar p11 (dtr 0.0) ep))
(setq p13 (polar p12 (dtr 90.0) (- hb nd)))
(setq p14 (polar p13 (dtr 180.0) ep))
(setq p15 (polar p14 (dtr 180.0) nl))
(setq p16 (polar p15 (dtr 90.0) (- nd wt)))
(setq p17 (polar p16 (dtr 90.0) wt))
;; 線を描く
(command "Line" ip p2 p4 p6 p7 p12 p13 p15 p17 "c"
"Line" p3 p16 ""
"Line" p9 p10 ""
"Line" p5 p8 ""
"Line" p11 p14 "")
(princ)
)
実行時の注意点
このルーチンを読み込んで実行すると、ビームが描かれます。ただし、AutoCADのスナップ設定によっては、意図しない点にスナップしてしまうことがあります。
また、画面に「blip(点)」が残ることも。これらの問題は次回で解決方法を紹介します!
コメント