Home


AutoCAD 2000 ActiveX によるカスタマイズ @

■はじめに
■なぜActiveX(VB)によるカスタマイズか?
■ActiveX(VB)とVBA
■線を描くには?
■VBAを使ってみる
■AddLineのサンプルに付いて説明


■はじめに
私とAutoCADとの付合いは実はまだ浅くR14からです。社内でUNIXのCADのリプレースでVBによるカスタマイズが可能なCADを探している時、当時の最新版のAutoCAD R14が可能であることを知り、付合いが始まりました。私の場合はチョット特殊かもしれません。VBでCADを操作することから始めたのですから(^_^;)

■なぜActiveX(VB)によるカスタマイズか?
AutoCADのカスタマイズでメジャーなのがLISPのようで、LISPは簡単と言われる方もいらっしゃるようですが、私にしてみれば良くわからない言語です。(もし覚えても他に使い道が無い?)多くの方がそうだと思いますが、MicrosoftのWordやExcelを仕事の中で利用されてると思います。私はAutoCADもWordやExcelと同じ位置付けで使っています。当然これらのソフトの連携も多く、同じレベルでカスタマイズできるほうが良いと思います。こんな事でActiveX(VB)を使ってます。

■ActiveX(VB)とVBA
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 space

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
End Sub

となっています。ここまで見ても何のこっちゃ?よく解らん?と言うのが正直な気持ちだと思います。私自身もこの辺の事は不親切だといつも思っています。大体サンプルが全部英語ですし、説明も英語の直訳みたいで...


■VBAを使ってみる
VBAを使うには、AutoCADメニューより「ツール」→「マクロ」→「Visual Basic エディタ」を選ぶと、Microsoft Visial Basic が起動します。AddLineのサンプルをカット&ペーストで貼り付けてみましょう。

vba1

こんな感じになります。後は実行してみて下さい。AutoCAD上に線が引ければ成功です。


■AddLineのサンプルに付いて説明
Sub Example_AddLine()
' This example adds a line in model space

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 '現在のビューポートを図面全体に表示。
End Sub