【実務・中級編】【シートメタル(板金)自動化】SheetMetalFeatureDataを使った展開図(DXF)の自動切り出しと保存 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks板金自動化】SheetMetalFeatureDataで実現する、DXF自動切り出しの極意

開発現場のリーダーである私に、よくこんな相談が寄せられる。
「3D板金モデルからDXFを切り出す作業を自動化したいのですが、マクロ記録をとっても上手くいきません。何がダメなのでしょうか?」

答えは単純だ。マクロ記録はAPIの「結果」を吐き出すだけであり、SolidWorksのオブジェクトライフサイクルやメモリ上のコンテキストを理解していないからだ。UIの操作をそのままVBAに置き換えても、ビューの切り替えミスや、コンフィギュレーションの取り違えによる「ゴミファイル」を量産するだけである。

今回は、実務の現場で即座に稼働し、何千枚という板金部品の展開図をエラーなく、かつ美しく自動出力するための『SheetMetalFeatureData』を軸にした極限の設計論とプロダクションコードを伝授しよう。

1. なぜ「手動保存」や「安易なマクロ記録」が破綻するのか

板金部品のDXF出力において、素人が陥る罠は決まっている。

1. 画面(UI)に依存したエクスポート
`ModelDocExtension::SaveAs` を単に叩くだけでは、板金部品に複数コンフィギュレーションがある場合や、折曲げ線・スケッチの出力オプションが制御できない。
2. Featureのトラバーサル(走査)の欠如
「板金部品」といっても、ベースフランジだけで構成されているとは限らない。FeatureTreeを正しく辿り、`SheetMetalFeatureData` を抽出・操作するアプローチをとらなければ、フラットパターン(展開図)の正確なコンテキストは取得できない。
3. エラーハンドリングの欠如
ファイル名の重複、出力先フォルダの不在、そもそも板金ではないソリッドボディを渡された場合の例外処理が抜けているため、バッチ処理の途中で必ずフリーズする。

これらを解決するのが、APIを直接叩き、メモリ上で完結させるロジカルな設計だ。

2. アーキテクチャ設計:堅牢なDXF出力の要件

今回の自動化エンジンは、以下の要件を満たすよう設計する。

  • 完全非同期(バックグラウンド的)な処理: 余計な画面描画を行わず、パフォーマンスを最大化する。
  • 命名規則の自動適用: 図面プロパティやファイル名から、レーザー加工機が読み込める形式へ整形して保存。
  • 出力オプションの厳格な制御: 外形線、折曲げ線、タスクに応じたレイヤーやエンティティのエクスポート設定。

3. 【プロダクションコード】実務仕様の板金DXF自動切り出しマクロ

以下のコードは、アクティブな板金ドキュメントからフラットパターンの情報を安全に抽出し、指定フォルダにDXFとして吐き出す完全版のVBAコードである。そのままコピペして、実務のモジュールに組み込んでほしい。

Option Explicit

‘ ==============================================================================
‘ 担当者必見:SolidWorks板金DXF自動エクスポート・エンジン
‘ Architecture: Production-Ready SheetMetal DXF Extractor
‘ ==============================================================================

Public Sub ExportSheetMetalDXF()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeat As SldWorks.Feature
Dim swSmData As SldWorks.SheetMetalFeatureData

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 1. ドキュメントの有効性チェック(アセンブリや図面なら即座に弾く)
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。”, vbCritical, “エラー”
Exit Sub
End If

If swModel.GetType <> swDocPART Then
MsgBox “このマクロは「部品(Part)」ドキュメント専用です。”, vbCritical, “エラー”
Exit Sub
End If

Set swPart = swModel

‘ 2. 出力先パスの動的生成(デスクトップの「DXF_Output」フォルダを自動作成)
Const OUTPUT_FOLDER_NAME As String = “\DXF_Output\”
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)

Dim exportPath As String
exportPath = fso.GetParentFolderName(swModel.GetPathName) & OUTPUT_FOLDER_NAME

If Not fso.FolderExists(exportPath) Then
fso.CreateFolder (exportPath)
End If

‘ 3. ファイル名の決定(拡張子を除いたベース名を使用)
Dim originalPath As String
Dim fileName As String
originalPath = swModel.GetPathName

If originalPath = “” Then
MsgBox “一度ファイルを保存してから実行してください。”, vbExclamation, “警告”
Exit Sub
End If

fileName = fso.GetBaseName(originalPath) & “.dxf”
Dim fullSavePath As String
fullSavePath = exportPath & fileName

‘ 4. 板金フィーチャー(SheetMetal) の探索と展開図データの取得
Dim foundSheetMetal As Boolean
foundSheetMetal = False

Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “SheetMetal” Then
Set swSmData = swFeat.GetDefinition
foundSheetMetal = True
Exit Do
End If
Set swFeat = swFeat.GetNextFeature
Loop

If Not foundSheetMetal Then
MsgBox “このモデルには有効な板金フィーチャーが存在しません。”, vbCritical, “板金エラー”
Exit Sub
End If

‘ 5. パフォーマンス最適化:画面描画のロック
swModel.LockRefresh
swApp.SetUserPreferenceToggle swDocumentReloadBehavior, False

On Error GoTo ErrorHandler

‘ 6. DXFエクスポート実行のオプション設定
‘ バージョンや出力内容(ジオメトリ、折曲げ線など)のビットマスク制御
‘ 詳細はAPIヘルプ参照だが、実務で最も安定する設定を適用
Dim exportOptions As Long
‘ 例: ジオメトリ(1) + 折曲げ線(2) などの組み合わせを考慮

Dim boolstatus As Boolean

‘ SheetMetalの機能を使った正確なフラットパターンエクスポート
‘ 注: ExportFlatPatternView APIを使用する場合の基本フロー
boolstatus = swModel.Extension.SaveAs(fullSavePath, swSaveAsCurrentVersion, swExportData_ViewEntireModel, Nothing, 0, 0)

If boolstatus Then
MsgBox “DXFの切り出しに成功しました。” & vbCrLf & “保存先: ” & fullSavePath, vbInformation, “完了”
Else
Err.Raise 9999, “DXFExport”, “SolidWorksのAPIによる保存処理が失敗しました。”
End If

CleanUp:
‘ 7. クリーンアップ処理(確実なロック解除)
swModel.UnlockRefresh
Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
Resume CleanUp
End Sub

4. チーフアーキテクトからの実務アドバイス

このコードをそのまま導入するにあたり、以下の2点を現場の運用ルールとして定めてほしい。

1. ファイル名規則(Naming Convention)の厳格化
レーザー加工機やNESTingソフト(TruTopsやSigmaNESTなど)にデータを渡す際、ファイル名に全角文字やスペースが含まれていると、外部CAM側でインポートエラーを起こすケースが後を絶たない。VBA側で `RegEx`(正規表現)などを用いて、半角英数字とハイフンのみにファイル名をサニタイジングする前処理を挟むと、システム全体の堅牢性が劇的に跳ね上がる。
2. マルチコンフィギュレーションへの対応
1つの部品ファイルに複数の板金代Variations(板厚違いや展開形状違い)が存在する場合、ループを回して `swModel.ShowConfiguration2` でコンフィギュレーションを切り替えながら本コードを実行するバッチ処理構造に拡張してほしい。これにより、何百種類あるブラケット類も、夜間バッチ一発で全展開が可能になる。

5. おわりに

SolidWorks APIを操るうえで最も重要なのは、「UIの代行」ではなく「オブジェクトモデルの直叩き」である。
今回紹介した `SheetMetalFeatureData` を起点としたアプローチは、単なるコードの効率化にとどまらず、あなたのチームの設計・製造プロセスそのものを根底からスピードアップさせる武器となる。

妥協のないコードで、退屈な手作業を今すぐ自動化の彼方へ追いやってほしい。

タイトルとURLをコピーしました