梁を描くLISP 3|polarで輪郭の座標を計算する
要点
polarへ基点・角度・距離を渡し、梁の輪郭を構成する点を求めます。角度の単位と幅の方向を確認しながら作図します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 梁の中心線となる2点と、幅を入力します。
- angleで中心線の方向を調べます。
- polarで幅方向に離れた点を計算します。
- 計算した点で輪郭を描き、幅と端点の位置を照合します。
AutoLISP入門その1,AutoLISP 入門その2,AutoLISP入門その3,AutoLISP入門その4
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(点)」が残ることも。設定の保存と復元は「梁を描くLISP 4」で扱います。
結果の確認
角度はラジアンで扱います。数値の度数をそのまま渡さず、必要に応じて変換してください。スナップによる位置ずれも確認します。
参照資料
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。