ChatGPTを使ったSOLIDWORKSプログラミング ~イントロダクション~
SOLIDWORKSユーザー会の重鎮の方から「ChatGPTを使ったらSOLIDWORKS APIのプログラミングが簡単にできないだろうか?検証してほしい」という依頼をいただきました。
早速検証をしてみたいと思います。
SOLIDWORKSの準備
今回はSOLIDWORKS VBAでプログラムを書いてみます。
SOLIDWORKSを起動したらマクロのツールバーを出しておきましょう。
ツールバーを出したら右から2つめのアイコン[新規マクロ]をクリックします。
マクロファイルの保存場所を聞かれるので適当な場所に適当な名前で保存します。
保存が完了するとVBEが起動します。これで準備完了!
ChatGPTの準備
まずはChatGPTのアカウントを作りましょう。
無料プランのChatGPT 3.5で十分です。
ログインして新規チャットを立ち上げたら準備完了。
この画面の一番下のところに命令を入れていきます。
さて、書いてもらおうか
英語で命令したほうがシンプルなんですが、今回は敢えて日本語でいきます。
SOLIDWORKS APIを使うこと、VBAでプログラムを書いて欲しい旨を伝えます。
…と、まだプログラムの内容を命令していないのになんかどんどん勝手に書き始めたんですが・・・
いきなりそれっぽいのができました。
ぱっと見でも気になる部分はありますが、ChatGPTはSOLIDWORKS APIのメソッドを知っていることがわかりました。
せっかくなのでこれを使ってコードを実行する手順を確認しましょう。
コード実行の手順
ChatGPTに表示されたコード部分の右上にある『Copy code』をクリックするとクリップボードにコードがコピーされます。
コピーしたコードをVBEに貼り付けます。
VBE画面左側のツリー上にあるモジュール(上の画像だと「Module11」をダブルクリックすると右側にコードウィンドウが開きます。
SOLIDWORKSで最初にマクロ作成したときにすでに何行かコードが存在するので、これらは残した状態で最終行に先ほどクリップボードにコピーしたコードを貼り付けます。
『Sub ~ End Sub』で一つのプログラム(メソッド)です。この範囲のどこでもいいのでカーソルを置いておいて[コードの実行]ボタンを押すとこのプログラムが実行されます。
おっと、まだ実行してはいけません。
書き換えが必要な部分があります。
ファイルのパスを指定する部分、何でもいいので保存可能なフォルダのパスと適当なSLDPRTファイル名に書き換えておきましょう。
これで本当に実行準備が完了。
[コードの実行]ボタンをぽちっとなしてみましょう。
実行結果の確認と修正
おっと、何かエラーが出ましたね。
エラーメッセージは「引数は省略できません。」となっています。
メソッドの動作に何か指定が足りないところがあるようです。
[デバッグ]ボタンを押すとエラーが起きた行をハイライトしてくれます。
エラーの原因はAPIヘルプを見ながら解決していきます。
おそらくプログラム経験がないとAPIヘルプを見ながらの問題解決は難しいと思うので流れだけ紹介します。
例えばNewDocumentメソッドのヘルプは以下のような感じです。
引数としてテンプレート名、用紙サイズ、用紙幅、用紙高さが必要なようですね。
今回はパーツを作りたいのでTemplateNameはパーツのテンプレートファイルのパスを指定し、ほかの引数は使わない(図面ファイルの作成で指定が必要)のでとりあえず0を指定しておきます。
そんな感じで修正して以下のようなコードに修正しました。
意味のない行を残してありますが一応動く形にはしています。
Sub CreateNewPart()
Dim swApp As Object
Dim partDoc As Object
Dim model As Object
Dim featMgr As Object
' SOLIDWORKSアプリケーションを取得
Set swApp = GetObject(, "SldWorks.Application")
' 新しい部品ドキュメントを作成
'ここから修正---------------------------------
'Set partDoc = swApp.NewDocument("Part") '元のコードをコメントアウト
Dim sPartTemplateName As String 'PRTDOTのフルパスを格納
sPartTemplateName = "テンプレートフォルダパス\temp_Part.PRTDOT"
' ↑↑ 自身の環境に応じて書き換えてください。
Set partDoc = swApp.NewDocument(sPartTemplateName, 0, 0, 0) '引数追加
'修正ここまで---------------------------------
' 部品のモデルを取得
Set model = partDoc.Extension
' 部品の特徴マネージャを取得
'ここから修正---------------------------------
'Set featMgr = model.FeatureManager '元のコードをコメントアウト
Set featMgr = partDoc.FeatureManager
'修正ここまで---------------------------------
' ここに部品の作成や変更に関するコードを追加
' 部品を保存
partDoc.SaveAs3 "保存先フォルダパス\NewPart.SLDPRT", 0, 2
' ↑↑ 自身の環境に応じて書き換えてください。
' 部品を表示
swApp.Visible = True
End Sub
これを実行すると指定したフォルダに(中身は空ですが)新しいパーツファイルが保存されます。
今回のまとめ
ChatGPTにSOLIDWORKS APIを使ったプログラムを書かせようとしたところ、頼んでもいないのに何かコードを書いてくれました。
非常に簡単なコードですが、動かすにはわずかに修正が必要でした。
しかしながら、ChatGPTはSOLIDWORKS APIを間違いなく知っており、命令の仕方を工夫するとそれなりに使えるコードを提示してくれる可能性を感じます。
それでは次回は実現したい動作のプログラムをChatGPTに命令して書かせてみたいと思います。
これは期待できそうな予感!