AutoLISPメモです。
AutoCADにはフィレットというコマンドがあります。簡単にいうと2つのオブジェクトの角をとって丸める機能です。
このコマンドをアレンジする際、任意のオブジェクトを指定するため、ユーザー入力待ち状態を作るコードが必要になりました。
今回はその役割をするpauseを使ってみたいと思います。
フィレットコマンドの概要
「2つのオブジェクトの角をとって丸める機能」と書きましたが、言葉より画像のほうが分かりやすいかと思います。
下図のような2つの線分があります。
フィレットコマンドを実行してみます。コマンドラインにFILLETと入力。
するとオプションが表示されます。ここでは丸めの半径を指定してみます。Rと入力します。
前回指定した半径が<>内に表示されますが、今回は違う値にします。50と入力してみます。
ここで、どのオブジェクトを選択するか問われます。これが「ユーザー入力待ち状態」です!
2線を順番に指示すると…
2線を延長し、角を丸めることができました。
フィレット機能は上記のように「角を丸める」ものですが、指定半径を0にすると離れた2線の鋭角を取ることができます。
私は半径0の状態でしかほとんど使用することがないのですが、他の人が使っていた図面ファイルなどは半径を指定しなおさなければなりません。
この手間を省略したいと思い、作ったのが今回のLISPです。
常に半径0でフィレットするLISPを作る
まず、フィレットコマンドをLISPで作ります。F0という名前をつけました。
(defun c:F0()
(command-s "._FILLET")
(princ)
)
半径のオプションをつけます。"R"の値を"0"にすればOKです。
(defun c:F0()
(command-s "._FILLET" "R" "0" );半径0でフィレット
(princ)
)
最後に「ユーザー入力待ち状態」を作ります。
2つのオブジェクトを選択しなければならないため、「pause pause」と繰り返す必要があります。
(defun c:F0()
(command-s "._FILLET" "R" "0");半径0でフィレット
(command-s "._FILLET" pause pause);2つオブジェクトを選択
(princ)
)
これで完成です!
LISPを実行してみる
作成したF0コマンドを実行するとこのようになります。
オプションを指定しなくても、鋭角をとることができました。
「pause」はほかのコマンドを作るときにも多用しそうなので、備忘録も兼ねて紹介しました。