はじめてのiCAD×VBA その5
はじめに
VBAでiCADを操作する方法を教えてもらったので、その備忘録の第五弾です。
今回は会社の講習会ではなくものづくりのススメさんの記事を参考に自分で少し触ってみたいと思います。
その3の最後でも少し触れましたが、作成中のツールで”iCADを起動しているか"のチェックや"開いているのが三次元か"のチェックをしていないので、今回はこの2点を実装していきたいと思います。
参考にさせて頂いた記事
前回作ったVBAコード
処理内容
- 入力フォームを表示し
- 入力された寸法の矩形を作成し
- いい感じの位置に配置して
- パーツ化する
- パーツ名:BASE
- コメント:ベースプレート
- 作成したパーツへ材質を設定する(A5052P)
コード
Private Sub CommandButton1_Click()
Dim iCADObj As Object 'iCADオブジェクト
Dim iCADMac As String 'コマンド格納先
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
Set iCADObj = CreateObject("ICAD.Application")
'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
'★★★矩形の配置★★★
Depth = Me.DEPTH_X '変数にテキストボックス(DEPTH_X)の値を挿入
Width = Me.WIDTH_Z '変数にテキストボックス(WIDTH_Z)の値を挿入
Height = Me.HIGHT_Y '変数にテキストボックス(HIGHT_Y)の値を挿入
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する
'★★★パーツ化★★★
iCADMac = "" 'コマンド格納先の変数をクリア
iCADMac = iCADMac & "@ZOOMFUL" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ";TD4MAK;JKT0" & vbCr
iCADMac = iCADMac & "@IOFF;OPNPD" & vbCr
iCADMac = iCADMac & "@IOFF;OUTCRT" & vbCr
iCADMac = iCADMac & "X " & "0" & vbCr
iCADMac = iCADMac & "Y " & "0" & vbCr
iCADMac = iCADMac & "Z " & "0" & " ," & vbCr
iCADMac = iCADMac & "@GO" & vbCr
iCADMac = iCADMac & ".SHORI " & "/1/" & vbCr
iCADMac = iCADMac & ".PARTSNAME " & "/BASE/" & vbCr
iCADMac = iCADMac & ".LAYER " & "/ 0/" & vbCr
iCADMac = iCADMac & ".COMMENT1 " & "/ベースプレート/" & vbCr
iCADMac = iCADMac & ".COMMENT2 " & "//" & vbCr
iCADObj.RunCommand iCADMac, MODE_MACRO
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「マクロモード」で実行する
'".SHORI "以降の処理がコマンドモードでは存在しない為、マクロモードで実行
'参考:今回の処理をコマンドBOXで取り出すと→;@SUPKER 1;TD4MAK;JKT0;@IOFF;OPNPD;@IOFF;OUTCRT;@SUPKER 0
'★★★材質設定★★★
iCADMac = "" 'コマンド格納先の変数をクリア
iCADMac = iCADMac & ";VOL3D;SET0;SET1" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & "@PTPIC" & vbCr
iCADMac = iCADMac & ".SELPZ " & "/0/" & vbCr
iCADMac = iCADMac & ".SELCL " & "/\/" & vbCr
iCADMac = iCADMac & ".SELNM " & "/BASE/" & vbCr
iCADMac = iCADMac & "@GO" & vbCr
iCADMac = iCADMac & ".ZAI1 " & "/アルミ板/" & vbCr '材質情報を設定
iCADMac = iCADMac & ".ZAI2 " & "//" & vbCr
iCADMac = iCADMac & ".KIG " & "/A5052P/" & vbCr '材質の記号を設定
iCADMac = iCADMac & ".HIJYU " & "/2.6900/" & vbCr
iCADMac = iCADMac & ".DIF " & "/172,169,177, 67/" & vbCr '色情報を設定
iCADMac = iCADMac & ".SPE " & "/214,179, 40, 49/" & vbCr '色情報を設定
iCADMac = iCADMac & ".SHI " & "/14/" & vbCr
iCADMac = iCADMac & ".ALP " & "/100/" & vbCr
iCADObj.RunCommand iCADMac, MODE_MACRO
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「マクロモード」で実行する
'".SHORI "以降の処理がコマンドモードでは存在しない為、マクロモードで実行
'参考:今回の処理をコマンドBOXで取り出すと→;@SUPKER 1;VOL3D;SET0;SET1;@SUPKER 0
Unload Me
'テキストボックスの値を削除する(MsgBOXを前にするとMsgBOXも消えるので、先に処理する)
MsgBox ("実行完了しました")
End Sub
前提環境
- Excelで開発タブの表示
- iCAD SXのダウンロード
参考
「C:\ICADSX\HELP」内にiCADのHelpが格納されています。
- VB I/Fに関するHelp:ICADOLEA.chm
- V8L3コマンドキーワード一覧:SXPROKEY.chm
また、PDFで「コマンド簡易開発ガイド」も用意されており、VBAでの開発とVBでの開発のマニュアルになっています。
(C:/ICADSX/man/development_guide.pdf)
VBAの作成
ライブラリのインポート
下記記事より「ICAD_Contorol.bas」をDLし、Excelファイルへインポートします。
iCADが起動中か確認
続いて、インポートしたライブラリから、iCADが起動中か確認する関数を呼び出します。
今回の場合は関数名は「IsICADActive」なのでコードは下記の通りになります。
'iCADの起動確認
If IsICADActive(iCADObj) = False Then
Exit Sub
End If
この3行だけで無事iCADが起動しているか確認することが出来ました。
たったこれだけで実装できるなんて...
三次元に移動
続いて、今回作成中のツールは開いている次元が三次元でないと動かないので「三次元に移動する」コードを実装することでもしも二次元を開いていてもツール実行時には三次元が開いているようにします。
この場合は「ActivateICAD3DView(アクティブウィンドウを3D画面に切り替える)」という関数を使用します。
コードは下記の通り。
'アクティブウィンドウを3D画面に切り替える
If ActivateICAD3DView(iCADObj) = False Then
Exit Sub
End If
先程のiCADの起動確認のコードから呼び出す関数を変えただけになります。
またしても3行だけで実装できてしまいました...
前回までのコードも含めた全文
Private Sub CommandButton1_Click()
Dim iCADObj As Object 'iCADオブジェクト
Dim iCADMac As String 'コマンド格納先
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
Set iCADObj = CreateObject("ICAD.Application")
'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
'★★★iCADの起動確認★★★
'ものづくりのススメさんのライブラリ(ICAD_Contorol.bas)を使用。
'https://rivi-manufacturing.com/homebrew-tools/icad-sx/14164/
If IsICADActive(iCADObj) = False Then
Exit Sub
End If
'★★★3次元へ移動★★★
'ものづくりのススメさんのライブラリ(ICAD_Contorol.bas)を使用。
'https://rivi-manufacturing.com/homebrew-tools/icad-sx/14164/
If ActivateICAD3DView(iCADObj) = False Then
Exit Sub
End If
'★★★矩形の配置★★★
Depth = Me.DEPTH_X '変数にテキストボックス(DEPTH_X)の値を挿入
Width = Me.WIDTH_Z '変数にテキストボックス(WIDTH_Z)の値を挿入
Height = Me.HIGHT_Y '変数にテキストボックス(HIGHT_Y)の値を挿入
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する
'★★★パーツ化★★★
iCADMac = "" 'コマンド格納先の変数をクリア
iCADMac = iCADMac & "@ZOOMFUL" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ";TD4MAK;JKT0" & vbCr
iCADMac = iCADMac & "@IOFF;OPNPD" & vbCr
iCADMac = iCADMac & "@IOFF;OUTCRT" & vbCr
iCADMac = iCADMac & "X " & "0" & vbCr
iCADMac = iCADMac & "Y " & "0" & vbCr
iCADMac = iCADMac & "Z " & "0" & " ," & vbCr
iCADMac = iCADMac & "@GO" & vbCr
iCADMac = iCADMac & ".SHORI " & "/1/" & vbCr
iCADMac = iCADMac & ".PARTSNAME " & "/BASE/" & vbCr
iCADMac = iCADMac & ".LAYER " & "/ 0/" & vbCr
iCADMac = iCADMac & ".COMMENT1 " & "/ベースプレート/" & vbCr
iCADMac = iCADMac & ".COMMENT2 " & "//" & vbCr
iCADObj.RunCommand iCADMac, MODE_MACRO
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「マクロモード」で実行する
'".SHORI "以降の処理がコマンドモードでは存在しない為、マクロモードで実行
'参考:今回の処理をコマンドBOXで取り出すと→;@SUPKER 1;TD4MAK;JKT0;@IOFF;OPNPD;@IOFF;OUTCRT;@SUPKER 0
'★★★材質設定★★★
iCADMac = "" 'コマンド格納先の変数をクリア
iCADMac = iCADMac & ";VOL3D;SET0;SET1" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & "@PTPIC" & vbCr
iCADMac = iCADMac & ".SELPZ " & "/0/" & vbCr
iCADMac = iCADMac & ".SELCL " & "/\/" & vbCr
iCADMac = iCADMac & ".SELNM " & "/BASE/" & vbCr
iCADMac = iCADMac & "@GO" & vbCr
iCADMac = iCADMac & ".ZAI1 " & "/アルミ板/" & vbCr '材質情報を設定
iCADMac = iCADMac & ".ZAI2 " & "//" & vbCr
iCADMac = iCADMac & ".KIG " & "/A5052P/" & vbCr '材質の記号を設定
iCADMac = iCADMac & ".HIJYU " & "/2.6900/" & vbCr
iCADMac = iCADMac & ".DIF " & "/172,169,177, 67/" & vbCr '色情報を設定
iCADMac = iCADMac & ".SPE " & "/214,179, 40, 49/" & vbCr '色情報を設定
iCADMac = iCADMac & ".SHI " & "/14/" & vbCr
iCADMac = iCADMac & ".ALP " & "/100/" & vbCr
iCADObj.RunCommand iCADMac, MODE_MACRO
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「マクロモード」で実行する
'".SHORI "以降の処理がコマンドモードでは存在しない為、マクロモードで実行
'参考:今回の処理をコマンドBOXで取り出すと→;@SUPKER 1;VOL3D;SET0;SET1;@SUPKER 0
Unload Me
'テキストボックスの値を削除する(MsgBOXを前にするとMsgBOXも消えるので、先に処理する)
MsgBox ("実行完了しました")
End Sub
最後に
今回は以前よりやろうと思っていたポカヨケ関連の処理を追加しました。
ものづくりのススメさんのライブラリを使用させて頂くことで驚くほど簡単に実装できました。
次回は何をしようかな...
続き⇒
Discussion