SOLIDWORKS APIを試してみた③ SOLIDWORKS APIのマクロが生成AIで組めた話
はじめに
前回SOLIDWORKS APIのプログラムをChatGTPで変更出来たのに味をしめ、変更ではなく一からプログラムができるのでは?と思い、今度はChatGPTを使って一からのプログラム作成を試みてみました。
(前回の記事) SOLIDWORKS APIを試してみた② プログラムをChatGPTで変更してみた
3Dデータ提出時のSTEP変換
私は通常、3Dで設計した部品のうち板金などの板状の材料を加工して作る部品のデータは、2D図面を作成してPDFとDXFに変換して提出しています。
これに対して、切削加工や鋳造部品、樹脂成形部品は3Dデータを多くの場合、STEP形式に変換してメーカーさんに渡します。この時のSTEP変換の作業も煩わしいです。
ChatGTPにプログラムを作って頂く
そこで、ChatGPTに『デスクトップ上に【試作作成用データ】というフォルダを作り、そのフォルダに、モデルデータをSTEP変換して、ファイル名末尾に_YYMMDDで日付を付けて保存するプログラムを作って。』とお願いしたところ、これまた数秒後にプログラムが書き出されてきました。
書き出されたプログラムを貼り付けて新しいアイコンを作成して実行させると、デスクトップ上のフォルダにSTEPデータができていました。
エラーの表示
しかし、データ変換後の画面には「STEP保存に失敗しました」とメッセージが出てきます。

このことをChatGTPに伝えると、さっそく修正が始まり、新しいプログラムを実行させると、エラーメッセージは出てこなくなりました。

実際のプログラムがこちら
Sub main()
' SolidWorksのアプリケーションを取得
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
' アクティブなドキュメントがない場合、メッセージを表示して終了
If Part Is Nothing Then
MsgBox "アクティブなモデル(パーツまたはアセンブリ)がありません。", vbExclamation, "エラー"
Exit Sub
End If
' モデルデータ(パーツまたはアセンブリ)か確認
If Part.GetType <> 1 And Part.GetType <> 2 Then ' 1 = パーツ, 2 = アセンブリ
MsgBox "このマクロはパーツ(SLDPRT)またはアセンブリ(SLDASM)のみ対応しています。", vbExclamation, "エラー"
Exit Sub
End If
' デスクトップの「試作作成用データ」フォルダのパス
Dim sDesktopPath As String
Dim sSaveFolder As String
sDesktopPath = Environ("USERPROFILE") & "\Desktop"
sSaveFolder = sDesktopPath & "\試作作成用データ"
' 「試作作成用データ」フォルダが存在しない場合は作成
If Dir(sSaveFolder, vbDirectory) = "" Then
MkDir sSaveFolder
End If
' モデルのファイル名(拡張子なし)
Dim sFileStr As String
Dim lFindPoint As Long
Dim sBaseFileName As String
' フルパスからファイル名のみを取得
lFindPoint = InStrRev(Part.GetPathName, "\") ' ファイル名の開始位置
sBaseFileName = Mid(Part.GetPathName, lFindPoint + 1) ' フォルダの区切りから取得
' 拡張子を除去
lFindPoint = InStrRev(sBaseFileName, ".")
If lFindPoint > 0 Then
sBaseFileName = Left(sBaseFileName, lFindPoint - 1)
End If
' 日付のフォーマット(YYMMDD)
Dim sDateStr As String
sDateStr = "_" & Format(Date, "yymmdd")
' 保存ファイルのパス(STEPファイル)
Dim sStepPath As String
sStepPath = sSaveFolder & "\" & sBaseFileName & sDateStr & ".step"
' STEPとして保存
longstatus = Part.SaveAs3(sStepPath, 0, 0)
' **修正ポイント:保存成功の判定方法**
If Dir(sStepPath) = "" Then
MsgBox "STEP保存に失敗しました。", vbExclamation, "エラー"
Exit Sub
End If
' 完了メッセージ
MsgBox "モデルデータをSTEP形式で保存しました。" & vbCrLf & _
"STEP: " & sStepPath, vbInformation, "保存完了"
End Sub
おわりに
筆者が小学生のころ、家庭用パソコン(当時はマイコンと呼んでいた)が登場し、テレビの学園ドラマでは女子高生がマイコンで試験問題を的中させて100点取れたという回があり、これからはマイコンの時代だ!と、私の父がシャープのBASICで動くパソコンと教本を買ってきたものの、プログラミングのハードルが高く、カセットでロードするゲームでしばらく遊んだあと放置になっていたということがありました。
パソコンはプログラムを組まないと動かないというイメージがあったので、社会人になってウインドウを開いてマウスで操作するということに衝撃を受けた記憶があります。
今回もその時と同じ衝撃を受けました。
驚くことに、プログラムの知識無しにSWをカスタマイズできてしまいました。これからネタを見つけてSW APIをもっと利用していきたいと思います。
※プログラムはChatGTP 4o を利用して作成しています。