スクラッチ&スクラップ

簡単なプログラミングや電子工作など。しょうもない工作の記録。

複数のフォーマットにまとめてエクスポートする SolidWorksのマクロ

f:id:macrochelys99:20191121010644p:plain

SolidWorksモデリングした各部品を中間フォーマットに変換しようとするときは、 指定保存 から拡張子をプルダウンで選んで変換するフォーマットを選びます。しかし対応している形式がとても多いのでプルダウンメニューから探すのがわりと面倒くさいんです。

というわけでマクロを組みます

Excelのマクロでおなじみ、VBAです。UI も Excel のと同じですね。

f:id:macrochelys99:20191121001906p:plain

Excelのマクロは解説している書籍やサイトがたくさんありますが、SolidWorksのマクロを解説している資料は少ないので、まずは操作を記録させてどういうコードが生成されているか観察するところから始めました。

モデルをエクスポートする際、ファイル名を(日付を含めるとか)変更することがほとんどなので、マクロを実行するとファイル名を入力するテキストボックスを開きます。するとエクスポート用のフォルダを作ってそのなかに IGESSTEPSTL、そして パラソリッド に変換して保存するようにしました。

f:id:macrochelys99:20191121002501p:plain

Option Explicit

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()
    
    '変換したファイルを保存するフォルダを設定
    Const SAVEFOLDER = "_exported"
    
    Dim filename As String
    Dim message As String
    Dim format As String
    Dim warnmsg As String
    
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    filename = ""
    warnmsg = ""
    
    '保存するファイル名を入力
    'While filename = ""
        filename = InputBox("ファイル名(" + SAVEFOLDER + " フォルダに出力)")
    'Wend
    If (filename = "") Then Exit Sub
    
    ChDir (swApp.GetCurrentWorkingDirectory())
    
    If Dir(SAVEFOLDER, vbDirectory) = SAVEFOLDER Then
        '何もしない
    Else
        MkDir (SAVEFOLDER)
    End If
    
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".IGS")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STEP")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".x_t")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")

End Sub

ところが

IGES STEP パラソリッド は出力されるのですが、STL が出力されません。

Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")

のところを

Part.SaveAs ("C:\tmp\hoge.STL")

と直接パスとファイル名を指定すれば出力されました。しかしこれでは汎用性がなくて使えません。

結論

書き方や設定を変えてみたりいろいろ試してみたのですが、STL を最初にエクスポートすると全部出力されました。

    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".IGS")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STEP")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".x_t")

エクスポートする順番が影響するって何でしょうね。
Windows7 + SolidWorks2015 SP3 のマシンでも、Windows10 + SolidWorks2017 SP3 のマシンでも、どちらも再現したので個別の環境による問題ではなさそうです。

次の目標

アセンブリ内の部品を全部まとめてエクスポート、できたらちょっと楽になるかな?
ネジとか要らない部品まで変換されちゃいますね。

おまけ

STL のビューワは L-Phinus が軽くて使いやすいです。
https://l-phinus.jp/index.html

f:id:macrochelys99:20191121003438p:plain