LISP で円形状の配列複写をしたいんだけど…
どうすればいいの?
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、円形状の配列複写を行う方法を紹介します。
command 関数を使用して、円形状の配列複写を行う
command 関数を使用して、円形状の配列複写を行うことができます。
サンプルコートは以下になります。
(defun c:ArrayCircular ()
; 配列複写するオブジェクトを取得
(setq entities (ssget))
; 回転の中心点を指定
(setq centerPoint (getpoint "\n配列複写の中心を指定:"))
; 配列複写する数
(setq number 8)
; 配列複写を実行
(initcommandversion)
(command "._array" entities "" "_po" centerPoint "_as" "_y" "_i" number "_rot" "_y" "_x")
(princ)
)
この LISP をロードして、ArrayCircular コマンドを実行してみてください。
「オブジェクトを選択」と聞かれるので、配列複写したいオブジェクトを選択して、右クリックで確定します。
そして、「配列複写の中心を指定」と聞かれるので、配列複写の中心にしたい場所をクリックします。
やったー!!
円形状に配列複写できた!!
ところで、command 関数の前にある (initcommandversion) ってなに?
initcommandversion 関数で何も引数を付けなくて実行すると、このあとに実行するコマンドのオプションが新しいものになります。
AutoCAD は、バージョンアップされるごとにいろいろ機能が追加されています。
中には、今まであったコマンドのオプションになにか追加されたり、オプションを実行するときにキーボード入力する文字が変わったりすることがあります。
(initcommandversion) を実行しないと、古いコマンドが実行されるので、そのコマンドの新しい機能が使用できなくなります。
例えば、配列複写コマンドでは、昔の AutoCAD には自動調整(配列複写したものがひとつのかたまりになる)機能がありませんでした。
なので、何もしないで実行すると、自動調整にできないですし、そもそもオプションが異なるのでコマンドが完了しません。
なるほど!!
だから (initcommandversion) を書いてるんですね!!
ところで、自動調整(配列複写したものがひとつのかたまりになる)でない配列複写を作成したいときは、どうすればいいの?
command 関数の 6 番目と 7 番目の引数が「"_as" "_y"」となっています。
ここで、自動調整に設定しています。
「"_as" "_n"」とすれば、配列複写されたオブジェクトはバラバラになります。😉
; 配列複写を実行
(initcommandversion)
(command "._array" entities "" "_po" centerPoint "_as" "_n" "_i" number "_rot" "_y" "_x")