軸の破断線を、LISPで簡易的に作図する機能を作ってみました。
かなり簡単なものですが、個人的には役立っているので紹介します。
この記事の目的
たまに軸の破断部分を下図のように表現したいことがあります。
単純な形状とは言え、毎回作図するのは面倒なのでLISPで省力化を試みました。
動作環境
BricsCAD v17で動作を確認しました。
AutoCADでの使用時は別途コードの書き換えが必要です。LISPなので基本的な文法は同じですが、細かいコマンド名がAutoCADでは異なる為です。
ちなみに、 AutoCADの上位版である「AutoCAD Plus (AutoCAD including specialized toolsets)」には、標準で機能が備わっているので、この記事のカスタマイズは必要ありません。
▼ AutoCADの入手については、別記事にまとめています。
動作デモ
動作の様子です。中心線、軸端の点を順番にクリックして指定します。
コード
コードは以下の通りです。表示されない場合はこちら
処理の流れ
指示した中心線と端点から、交点を取得し、円弧と対称複写と回転複写を使って作図しています。
行数 | コード | 内容 |
---|---|---|
3 | (setq cen (entsel"\n中心線をクリック")) | 中心線の情報を取得する |
4 | (command-s "._ucs" "_e" cen) | 中心線の傾きを使って、座標系を設定する |
5 | (setq p1 (getpoint"\n軸端をクリック")) | 破断線を描く軸端の位置を取得する |
6 | (setq cenp1 (cdr (assoc 10 (entget (car cen))))) | 3行目で選択した中心線cenの始点座標を取り出す |
7 | (setq cenp1 (trans cenp1 0 1)) | cenp1 をユーザ座標に変換する |
8-9 | (setq cenp2 (cdr (assoc 11 (entget (car cen))))) (setq cenp2 (trans cenp2 0 1)) | 6、7行目と同様。終点について処理 |
10 | (setq p2 (list (car p1) (+ (cadr p1) 5))) | 5行目の点p1から、垂線の始点・終点のリストを作る(11行目で使う) |
11 | (setq p3 (inters p1 p2 cenp1 cenp2 nil)) | 軸端からの垂線と、中心線との交点を求める |
12 | (setq dis (distance p1 p3)) | 軸端と11行目の点の距離disを求める |
13 | (command-s "._arc" p1 "_e" p3 "_r" dis) | 始点(p1)と終点(p3)、半径(dis)を指定して円弧を描く |
14 | (command-s "._mirror" "L" "" p1 p3 "_n") | 13行目の円弧を対称複写する |
15 | (command-s "._rotate" "L" "" p3 "_c" 180) | 14行目の円弧を中心線の反対側へ回転複写する |
16 | (command-s "._ucs" "_w") | 座標系をワールドに戻す |
導入方法
LISPファイルを作る
上記のコードをメモ帳等テキストエディタへコピペして保存します。拡張子はlspです。
例えばtest.lspなど。
LISPファイルをロードする
先ほど作ったlspファイルをロードします。
実行
コマンド欄に、sblと入力し、コードを実行します。
※ sbl は今回のコードの名前で、最初の行に記述(defun c:sbl ()
)しています。
すると、まず中心線の指示待ちになるのでクリックし、次に軸端の点をクリックします。
なお、軸端の点は、中心線の指示によって設定された座標系のプラス側をクリックする必要があります。(反対だと凹凸の方向が狂います)
参考ドキュメント
AutoLISPのドキュメントを参照しました。
Help