チュートリアル(導入編)


 

ステップ1 インストール


「AcadRemocon.DLL」はActiveX-DLLですので、システムフォルダにコピーしただけでは使うことが出来ません。

「AcadRemocon.DLL」をシステムに登録する方法には、下記の2通りがあります。

 

(1)ホームページより「AcadRemocon.lzh」をダウンロードし、regsvr32.exe等を用いて自分でシステムに登録する(必要に応じてVB6ランタイムも入手して下さい)。

「AcadRemocon.lzh」には下記のファイルが含まれています。

AcadRemocon.DLL

AcadRemocon.chm

Readme.txt

 

(2)ホームページよりWindows Installerパッケージ「AcadRemocon.msi」をダウンロードし、実行する。

インストーラは下記の作業を行います。

・「AcadRemocon.DLL」および必要なランタイムファイルをシステムフォルダにコピーし、システムに登録します。

・インストールフォルダを作成し、その中にヘルプファイル「AcadRemocon.chm」と説明書「Readme.txt」をコピーします。

・デスクトップに「AcadRemocon.chm」へのショートカットを作成します。

 

「AcadRemocon」は、コントロールパネルの「アプリケーションの追加と削除」で、いつでも安全にアンインストールすることが出来ます。

 

ここでは(2)のインストーラを使う手順で説明します。

 

手順1)「AcadRemocon.msi」を実行するとWindows Installerが起動するので、「次へ」をクリックして下さい。

 

セットアップウイザードが起動しない場合は「Microsoft Windows Installer」が正常に機能していない可能性があります。

必要に応じて下記リンクから「Windows Installer」をダウンロード&インストールして下さい。

 

Windows Installer 2.0 (for Windows 95, 98 & Me)

Windows Installer 2.0 (for Windows NT 4.0 & 2000)

 

手順2)インストールフォルダを聞いてくるので、そのまま「次へ」をクリックして下さい。

 

以上でインストール作業は終わりです。

 

 

 

ステップ2 外部コマンドの作成


まず簡単な外部コマンドを実際に作成してみましょう。プログラムを作ると聞いて気後れしないで下さい。使うアプリケーションはWindows付属のテキストエディタ「メモ帳」で、プログラムはたったの2行ですから安心して下さい。  

 

手順1)C:\ARemoというフォルダを新規作成して下さい。

 

なるべく手順通りのフォルダ名で進めていって下さい。後の手順のため、フォルダ名には空白を含めないで下さい。

 

 

手順2)作成したフォルダ内に「テキストドキュメント」を新規作成して下さい。

 

 

手順3)ファイル名を「Line.vbs」に変更します。

 

拡張子を「vbs」に変更しても、アイコンが「ファイル名変更後」のように変わらない場合は「Microsoft Windows Script」が正しくインストールされていない可能性があります。

必要に応じて下記リンクから「Windows Script」をダウンロード&インストールして下さい。

 

Windows Script 5.6 for Windows 98/Me/NT4.0 

Windows Script 5.6 for Windows 2000

 

 

ファイル名変更後

 

手順4)「Line.vbs」を選択し、マウス右クリックから「編集」を選択します。

 

手順5)メモ帳(テキストエディタ)が起動するので、下記の2行のコードを貼り付けるか入力して下さい。

 

Set Acad=CreateObject("AcadRemocon.Body")
Acad.acPostCommand "LINE 0,0 100,100 " 

 

「LINE」「0,0」「100,100」の間には半角スペースが1個、「100,100」の後ろには半角スペースが2個入いっています。

 

手順6)上書き保存してメモ帳を終了させて下さい。

 

 

これで外部コマンドの作成は終了です。

 

 

 

ステップ3 外部コマンドの実行


それでは早速、作成した外部コマンドを実行してみましょう。

 

手順1)AutoCADを起動し、新しい図面を開いて下さい。

 

手順2)「Line.vbs」を実行(ダブルクリック)して下さい。

 

あっという間に直線が引かれたと思います。

 

 

 

ステップ4 AutoCADツールボタンへの外部コマンド登録


次に作成した外部コマンド(Line.vbs)をAutoCADのツールボタンに登録しましょう。

 

手順1)AutoCADメニューから「表示」→「ツールバー」を実行して下さい。

 

手順2)カスタマイズダイアログが表示されるので、右図内に赤字で記入してある手順に従って「ARemo」というツールバーを新規作成して下さい。

 

新しいツールバー「ARemo」が作成されました。

 

手順3)「Draw」にチェックを付け、「Draw」ツールバー内の線分ボタンをCtrlキーを押しながらドラッグし、「ARemo」ツールバー上でドロップして下さい。

 

→線分ツールバーがコピーされました。

 

手順4)右図内に赤字で記入してある手順に従って下記のマクロをツールボタンに登録して下さい。

 

↓↓LT版の場合↓↓

^C^CAI_STARTAPP "C:/WINNT/SYSTEM32/WSCRIPT.EXE C:/AREMO/LINE.VBS";

 

↓↓レギュラー版の場合↓↓

^C^C(STARTAPP "C:/WINNT/SYSTEM32/WSCRIPT.EXE" "C:/AREMO/LINE.VBS");

 

下線の部分は、お使いのPC環境によって異なります。

一般的にWindows2000では「WINNT/SYSTEM32」、Windows98,Meでは「WINDOWS」になります。

うまくいかない場合はエクスプローラで「WSCRIPT.EXE」の場所を検索して下さい。

 

 

手順5)ツールボタンをクリックして下さい。

 

→外部コマンドが実行され直線が引かれます。

 

これで外部コマンドがAutoCAD内部コマンドと同じ感覚で実行出来ることがわかったと思います。

 

 

 

 

ステップ5 AutoCAD情報取得系の外部コマンド作成


次はAutoCADから情報を取得するメソッドを使った外部コマンドを作成してみましょう。

ここではユーザーが指示した点の座標値を取得するacGetPointメソッドと文字を記入するacTextメソッドを使って、クリックした点のXY座標値を記入するコマンドを作成します。

手順1)「GetPoint.vbs」を新規作成し、下記の3行のコードを記入後、保存する。  

 

Set Acad=CreateObject("AcadRemocon.Body")
Acad.acGetPoint "測定点を指示","",X,Y

Acad.acText "BL",X,Y,5,0,X & "," & Y

 

手順2)AutoCADを起動し、新規図面を開く。

 

手順3)「GetPoint.vbs」を起動(ダブルクリック)する。

 

手順4)AutoCADがアクティブになり、座標の指示を要求してくるので任意の点を指示する。

 

指示した点に、その点の座標値が記入されました。

 

 

 

ステップ6 エラー処理


ここまでは、なるべく拒否反応を起こさないように簡潔な書き方をしてきました。しかし実際に運用するプログラムではユーザーがキャンセルした場合などのエラー処理をしっかり行わないと実用的とは言えません(この辺りがDIESELマクロは弱い、というか皆無だと感じます)。

 

ステップ5のプログラムを実行するとわかりますが、AutoCAD上での座標の指示をESCキー、または改行でキャンセルした場合でもacTextメソッドが実行されてしまうため、カンマだけが記入されてしまいます。またAutoCADが起動していない場合でもエラーが表示されません。   

ステップ5のプログラムに完全なエラー処理を加えたのが下記のコードです。一見複雑そうに見えますが青色の部分はすべてのプログラムに共通の部分ですので、書き加えるのは2行だけで済みます。

 

Dim Acad  'Acad変数はErサブルーチンでも使うのでここで宣言
Call Main 'Mainサブルーチンコール

Sub Main()'エラー時にExit Subで中断出来るようにサブルーチン化する
   
Set Acad=CreateObject("AcadRemocon.Body")

    If Not Acad.acGetPoint("測定点を指示","",X,Y) Then Er:Exit Sub

    If Not Acad.acText("BL",X,Y,5,0,X & "," & "Y") Then Er:Exit Sub

End Sub

 

'エラー処理
Sub Er()
    'ユーザーによるキャンセル
    If Acad.ErrNumber = vbObjectError + 1000 Then
        'ここにキャンセル時の処理を追加
        '
    Else
        'エラー内容表示
        Acad.ShowError
    End If
End Sub

上のプログラムを実行してみて下さい。入力をキャンセルした場合はacTextメソッドは実行されませんし、AutoCADが起動していない状態で実行すると、ちゃんと下記のメッセージが表示されます。 

 

 

 

 

ステップ7 実用コマンド例


それでは実用プログラムを2個紹介します。いずれも標準のAutoCAD LTのマクロでは難しい物です。  

実用プログラム@ 文字高さ一括変更コマンド

 選択したオブジェクトの文字高さを「DIMSCALEシステム変数×4mm」に一括変更するコマンド。

 

Dim Acad  'Acad変数はErサブルーチンでも使うのでここで宣言
Call Main 'Mainサブルーチンコール

 

Sub Main()

    Set Acad = CreateObject("AcadRemocon.Body")
    If Not Acad.acGetVar("DIMSCALE", DimScale) Then Er: Exit Sub 'システム変数 DIMSCALE 取得
    If Not Acad.acSelect("文字高を揃えたい図形を選択", Cnt) Then Er: Exit Sub 'オブジェクト選択
    If Cnt = 0 Then Exit Sub '選択数が0なら終了
    If Not Acad.acPostCommand("CHANGE P ") Then Er: Exit Sub 'CHANGEコマンド送信
    Do 'ループ開始
        If Not Acad.acSkipPrompt("新しい高さ*", rIndex) Then Er: Exit Sub '高さの入力までスキップ
        If rIndex = -1 Then Exit Sub '「コマンド:」に戻った
        If Not Acad.acPostCommand(DimScale * 4 & " ") Then Er: Exit Sub '新しい高さを送信
    Loop While True

End Sub

 

'エラー処理
Sub Er()
    'ユーザーによるキャンセル
    If Acad.ErrNumber = vbObjectError + 1000 Then
        'ここにキャンセル時の処理を追加
        '
    Else
        'エラー内容表示
        Acad.ShowError
    End If
End Sub

 

 

実用プログラムA バルーン記号連続記入コマンド

下記の機能を持つ、バルーン記号連続記入コマンドです。

・バルーンの中に自動的に連番を記入します。

・連番文字の高さはDIMSCALEシステム変数×4mmで記入します。

・始点の指示の時にEnterキーを押す(または右クリックする)と、連番の開始値を変更するダイアログが表示されます。

 

Dim Acad  'Acad変数はErサブルーチンでも使うのでここで宣言
Call Main 'Mainサブルーチンコール

 

Sub Main()

    Set Acad = CreateObject("AcadRemocon.Body")
    Cnt = 1 '記入番号初期化
    If Not Acad.acGetVar("DIMSCALE", DimScale) Then Er: Exit Sub 'システム変数 DIMSCALE 取得
    Do 'ループ開始
        If Not Acad.acGetPoint("始点を指示[Enter=開始値変更]", "", X1, Y1, , InStrCancel) Then '始点を指示
            If Acad.ErrNumber <> vbObjectError + 1000 Then Er: Exit Sub 'エラー内容がユーザーキャンセル以外なら終了
            If InStrCancel Then Er: Exit Sub 'Escキーによる明示的なキャンセルなら終了
            If Not Acad.GetInteger("開始値を入力", Cnt, Cnt) Then Er: Exit Sub '開始値変更ダイアログ表示
        Else
            If Not Acad.acGetDist("バルーンの中心を指示", "@ ", , Angle, , DeltaX, DeltaY) Then Er: Exit Sub '始点からの距離を指示
            CX = X1 + DeltaX: CY = Y1 + DeltaY 'バルーンの中心を計算
            Acad.CalcCircumPoint X2, Y2, CX, CY, 4, Angle + 180 '引き出し線と円の交点を計算
            If Not Acad.acLine(X1, Y1, X2, Y2) Then Er: Exit Sub '引き出し線記入
            If Not Acad.acText("MC", CX, CY, 4 * DimScale, 0, Cnt) Then Er: Exit Sub '番号記入
            If Not Acad.acCircle(CX, CY, 4 * DimScale) Then Er: Exit Sub '円記入
            Cnt = Cnt + 1 '番号加算
        End If
    Loop While True

End Sub

 

'エラー処理
Sub Er()
    'ユーザーによるキャンセル
    If Acad.ErrNumber = vbObjectError + 1000 Then
        'ここにキャンセル時の処理を追加
        '
    Else
        'エラー内容表示
        Acad.ShowError
    End If
End Sub

 

実行手順

手順1)コマンドを起動すると始点の指示を促すメッセージがAutoCADウインドウ左下に表示されるので、任意の点を指示して下さい。

 

手順2)続けてバルーン中心の指示を促すメッセージが表示されるので、任意の点を指示して下さい。

 

バルーン記号が記入されました。

 

手順3)このコマンドは繰り返しコマンドなので、連続してバルーン記号が記入出来ます。

 

手順4)始点の指示の時にEnterキーを押す(または右クリックする)と、連番の開始値を変更するダイアログが表示されます

 

※「OK」をクリックすると、始点の指示に戻ります。ここでは開始値を「8→20」に変更します。

 

手順5)続けてバルーン記号を記入すると手順4で変更した開始値が反映されていることがわかります。

 

手順6)下記のいずれかの操作でコマンドを終了出来ます。

・Escキーを押す。

・開始値変更ダイアログの「キャンセル」ボタンを押す。

・2点目(バルーン中心)指示の時にEnterキー(または右クリック)を押す。

 

追記)たった十数行のプログラムでここまで出来るのは驚きではないですか?

さらにPutIniメソッドとGetIniメソッドを使えば、記入番号の保存・復元も可能ですし、acSetCLayerメソッドを使えば確実な画層切り換え(存在しない場合は自動作成)も間単に実現出来ます。

 

 

 

これでチュートリアル(導入編)は終了です。

 

時間が出来たらステップアップ編(仮題)を作成したいと思います。

予定している内容は下記の通りです。

・エクセルのVisual Basic Editorを使った効率的なプログラム作成&デバッグ。

・エクセルVBAを使った、エクセルからの自動作図&図面情報抽出。

・DXF系メソッド(acDxfOut,DxfExtract,DxfUpdate,acDxfIn)を使った、より柔軟な図面処理。

乞うご期待!