じどう化とか

ロボット、IoT、AIとか

CADがおしゃべりしたらCADもゲームみたいに楽しくならないかな?

CADのコマンドがゲームの必殺技みたいに叫んだら楽しくないかな?

というわけで作っていみました。
Solidworksでコマンドを実行するたびにwavファイルを呼び出します。動画ではずんだもんにしゃべってもらってます。

エラー処理もろくにしてないので、あくまで遊びの範囲にしてください。なお、bingに相談して作ってます(便利)。


www.youtube.com

概要

今回はSolidworksのマクロを利用しています。

  • Cドライブの中に"C:\temp\wave"というフォルダを作ります。
  • そのフォルダの中に、音声ファイル(WAV)と設定ファイル(CSV)を入れます。
  • 設定ファイルでは、数字と音声ファイルの名前を書きます。数字は、Solidworksでどんな操作をしたかを表すもので、swCommands_e Enumerationと呼ばれています。どんな数字がどんな操作に対応しているかは、次のサイトで見ることができます。
    swCommands_e Enumeration - 2021 - SOLIDWORKS API Help
  • マクロを実行すると、設定ファイルに書いた数字の操作をするたびに、その数字に対応した音声ファイルが再生されます。この効果はSolidworksを終了するまで続きます

マクロ本体

メイン部分

Dim swEventsHandler  As EventsHandler

Sub main()

    Set swEventsHandler = New EventsHandler

End Sub

クラスモジュール部分

Option Explicit
Private Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Public WithEvents swApp As SldWorks.SldWorks
Private filePaths() As String 'ファイルパスを格納する配列
Private commandIDs() As String '数字を格納する配列

Private Sub Class_Initialize()
    Set swApp = Application.SldWorks
    Dim fileNum As Integer 'ファイル数
    Dim i As Integer 'ループカウンタ
    Open "C:\temp\wave\sound_list.csv" For Input As #1
    fileNum = 0
    While Not EOF(1)
        ReDim Preserve filePaths(fileNum)
        ReDim Preserve commandIDs(fileNum)
        Input #1, filePaths(fileNum), commandIDs(fileNum)
        fileNum = fileNum + 1
    Wend
    Close #1
    MsgBox "VOICEVOX:ずんだもん" & vbCrLf & "(Exit Load : " & fileNum & ")"
End Sub

 

Private Function swApp_CommandOpenPreNotify(ByVal command As Long, ByVal userCommand As Long) As Long
    Dim i As Integer 'ループカウンタ
    Dim comandStr As String '再生するコマンドを格納する変数
    '数字と比較して対応するファイルを検索する
    For i = 0 To UBound(commandIDs)
        If commandIDs(i) = CStr(command) Then
            comandStr = "play " & filePaths(i)
            Exit For
        End If
    Next i
    
    '再生するファイルが見つかった場合は、wavファイルを再生する
    If comandStr <> "" Then
        Call mciSendString(comandStr, "", 0, 0)
        'MsgBox comandStr
    End If
End Function

設定ファイルの例("C:\temp\wave\sound_list.csv")

C:\temp\wave\001_ずんだもん(ノーマル)_おしだし.wav,8
C:\temp\wave\002_ずんだもん(ノーマル)_おしだかっとっ.wav,10
C:\temp\wave\003_ずんだもん(ノーマル)_ぐるん.wav,24
C:\temp\wave\004_ずんだもん(ノーマル)_ぐるんかっと.wav,48
C:\temp\wave\005_ずんだもん(ノーマル)_ねじねじ.wav,39
C:\temp\wave\006_ずんだもん(ノーマル)_あーる.wav,9

参考サイト

swCommands_e Enumeration - 2021 - SOLIDWORKS API Help

Handling SOLIDWORKS events (codestack.net)