【AutoCAD】AutoLISP(ActiveX)で円を描く方法

2021年9月8日

【AutoCAD】AutoLISP(ActiveX)で円を描く方法

AutoLISP(ActiveX)で円を描きたい

こんにちは、メモだよ!!管理人です。

先日、【AutoCAD】超便利!!AutoLISP で Visual Studio Code を使用する の記事で、Visual Studio Code で AutoLISP のデバッグが簡単になったということを書きました。
それもきっかけで、AutoLISP の勉強を始めてみようかと思いました。

私は今まで、ずっと ActiveX でない AutoLISP を使用していました。
そこで、ActiveX の AutoLISP にチェレンジしていこうかと思います。

まず最初は、円を描いてみようと思います。
簡単なところから始めないと、すぐに挫折しちゃいますからね😉

(setq acadobj (vlax-get-acad-object))
(setq document (vla-get-activedocument acadobj))
(setq mspace (vla-get-modelspace document))

(setq point1 (vlax-3d-point '(100.0 100.0 0.0)))
(setq circle (vlax-invoke-method mspace 'AddCircle point1 50.0))

上記を実行すると、中心が 100,100 で、半径が 50 の円が作成されます。

最初はなんだかよくわかりませんが、理解すればそんなに難しいものではないんじゃないかと期待することにします。😅

では、コードを見ていきましょう。
私の勝手な理解を書いていきますので、参考になれば参考にしみてくださいね。😉

コードの詳細について

(setq acadobj (vlax-get-acad-object))
(setq document (vla-get-activedocument acadobj))
(setq mspace (vla-get-modelspace document))

この 3 行は、モデル空間に図形を描くときの「おまじない」みたいのものだと思って、コピペすれば OK です。😉

※ 円はモデル空間に描きたいので、モデル空間のオブジェクトを取得しています。

(setq point1 (vlax-3d-point '(100.0 100.0 0.0)))

ここでは、変数 point1 に円の中心点の座標値を設定しています。
座標値を指定するときの「おまじない」は、vlax-3d-point 関数ってことですね。🧐

(setq circle (vlax-invoke-method mspace 'AddCircle point1 50.0))

vlax-invoke-method 関数というのは、ActiveX メソッドを呼び出す関数になります。

ActiveX メソッドってなに?

ActiveX メソッドは、ActiveX リファレンスガイド を見るのがよさそうです。
ここに出ているものが使えるってことのようです。

例えば、A で始まるのメソッドを見てみると AddCircle がありますね。
AddCircle メソッド

AddCircle をクリックして詳細な説明を見ると、以下のように引数に中心と半径を入れればいいということがわかります。
AddCircle の詳細

ActiveX メソッドが使えるかどうかを確認する方法

vlax-method-applicable-p 関数で ActiveX メソッドが使えるかどうかを確認できるようです。
例えば、(vlax-method-applicable-p mspace 'AddCircle) とすると、T が返ってくるので、AddCircle メソッドが使えるということです。

vlax-invoke-method 関数の最初の引数は リファレンスガイド でみると、VLA オブジェクトになってます。
ここでいう VLA オブジェクトは、円をどこに描きたいかということです。

(レイアウトなどではなく)モデル空間に描きたいので、モデル空間のオブジェクト(mspace)がここに入ります。

その後はメソッドの名前なので AddCircle です。

そしてその後は、中心の座標と半径です。

 

説明は以上になりますが、同じような方法で線分も書いてみましょう。
コードは以下になります。
ん !?、慣れれば簡単って思えてきました😁…気のせいかもしれませんが…

(setq point1 (vlax-3d-point '(0.0 100.0 0.0)))
(setq point2 (vlax-3d-point '(100.0 100.0 0.0)))
(setq circle (vlax-invoke-method mspace 'AddLine point1 point2))

※ mspace は円を描くときにすでに指定してるので、ここではそのまま使ってます。

-API
-