私とAutoCADとの付合いは実はまだ浅くR14からです。社内でUNIXのCADのリプレースでVBによるカスタマイズが可能なCADを探している時、当時の最新版のAutoCAD R14が可能であることを知り、付合いが始まりました。私の場合はチョット特殊かもしれません。VBでCADを操作することから始めたのですから(^_^;)
AutoCADのカスタマイズでメジャーなのがLISPのようで、LISPは簡単と言われる方もいらっしゃるようですが、私にしてみれば良くわからない言語です。(もし覚えても他に使い道が無い?)多くの方がそうだと思いますが、MicrosoftのWordやExcelを仕事の中で利用されてると思います。私はAutoCADもWordやExcelと同じ位置付けで使っています。当然これらのソフトの連携も多く、同じレベルでカスタマイズできるほうが良いと思います。こんな事でActiveX(VB)を使ってます。
ActiveX(VB)とVBAによるカスタマイズは非常によく似ています。CADだけのカスタマイズであれば、VBAでも事足りると思いますが、VBAにはやはり制限事項も少なくありません。今からカスタマイズを始める方も、先々、結局行きつくとかはVisualBasicではないかと思います。
まずは、線を描いてみましょう。2つの点を通る線分を作成するには、AddLineメソッドを使います。 AutoCADヘルプでActiveX/VBAリファレンスを開き、AddLineメソッドの使い方を見てみると
2 つの点を通る線分を作成します。 構文と要素
RetVal = object.AddLine(StartPoint, EndPoint)
Object ModelSpace コレクション, PaperSpace コレクション, Block
このメソッドが適用されるオブジェクト
StartPoint バリアント型 (3 要素の倍精度浮動小数点数型配列); 入力のみ
線分の始点を示す 3D WCS 座標
EndPoint バリアント型 (3 要素の倍精度浮動小数点数型配列); 入力のみ
線分の終点を示す 3D WCS 座標
RetVal Line オブジェクト
新しく作成される線分オブジェクト
と書いてあり、例(サンプルコード)を見てみると
Sub Example_AddLine() ' This example adds a line in model spaceEnd Sub
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
' Define the start and end points for the line
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
' Create the line in model space
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll
となっています。ここまで見ても何のこっちゃ?よく解らん?と言うのが正直な気持ちだと思います。私自身もこの辺の事は不親切だといつも思っています。大体サンプルが全部英語ですし、説明も英語の直訳みたいで...
VBAを使うには、AutoCADメニューより「ツール」→「マクロ」→「Visual Basic エディタ」を選ぶと、Microsoft Visial Basic が起動します。AddLineのサンプルをカット&ペーストで貼り付けてみましょう。
こんな感じになります。後は実行してみて下さい。AutoCAD上に線が引ければ成功です。
Sub Example_AddLine()' This example adds a line in model spaceEnd Sub
Dim lineObj As AcadLine 'ラインオブジェクト変数を宣言
Dim startPoint(0 To 2) As Double '始点をDouble型配列変数で宣言
Dim endPoint(0 To 2) As Double '終点をDouble型配列変数で宣言
' Define the start and end points for the line
startPoint(0) = 1# '始点のX座標(絶対座標)を代入(#は倍精度浮動少数点を表す)
startPoint(1) = 1# ' 〃 Y座標
startPoint(2) = 0# ' 〃 Z座標
endPoint(0) = 1# '終点のX座標(絶対座標)を代入(#は倍精度浮動少数点を表す)
endPoint(1) = 1# ' 〃 Y座標
endPoint(2) = 0# ' 〃 Z座標
' Create the line in model space
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
'現在アクティブな図面(ThisDrawing.)のモデル空間(ModelSpace.)に線を追加(AddLine)
ZoomAll '現在のビューポートを図面全体に表示。