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 を利用して作成しています。

よかったらシェアしてね!