【SolidWorks自動化】板金展開の自動化:フラットパターンDXF出力の極意
板金設計の現場において、3DモデルからDXFを生成する作業は「自動化の聖域」です。しかし、APIをリファレンス通りに叩くだけでは、現場の過酷な要求には耐えられません。
「なぜかDXFが空になる」「特定の板金パーツでエラーが出る」「レイヤー設定が反映されない」。これらはすべて、SolidWorksのオブジェクトライフサイクルと、フィーチャのステータス管理を理解していないがゆえの悲劇です。
今日は、伝説的な設計現場でも通用する、「堅牢かつ高速な板金DXF出力エンジン」の設計思想を伝授します。
—
1. なぜ「単純なエクスポート」では失敗するのか
多くのエンジニアが犯す最大の過ちは、`SaveAs`メソッドを単に呼ぶだけという設計です。板金展開(FlatPattern)には、以下の「見えない罠」が存在します。
- フィーチャのサプレッション状態: フラットパターンがサプレスされているか、あるいは最新の状態かを確認せずに操作すると、APIは沈黙したまま失敗します。
- フラットパターンのアクティブ化: フラットパターンは、ただ存在するだけではいけません。APIコンテキストにおいて「アクティブ」として認識させる必要があります。
- DXFオプションの不整合: レイヤー設定や曲げ線の出力定義は、API経由で明示的に渡さないと、前回のユーザー設定(レジストリ)に依存し、出力結果がバラバラになります。
—
2. 堅牢なDXF出力アーキテクチャ
以下のコードは、単なるスクリプトではありません。エラーハンドリングとフィーチャの状態チェックを組み込んだ「プロダクションコード」のひな形です。
‘ 必要な参照設定: SolidWorks 20xx Type Library
‘ 実行対象: 板金パーツファイルがアクティブな状態
Public Sub ExportSheetMetalToDXF()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeat As SldWorks.Feature
Dim swFlatPattern As SldWorks.Feature
Dim swSheetMetal As SldWorks.SheetMetalFeatureData2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType <> swDocPART Then Exit Sub
Set swPart = swModel
‘ 1. フラットパターンフィーチャの探索
‘ 「FlatPattern」という名前は固定ではないため、タイプで走査する
Set swFeat = swPart.FirstFeature
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “FlatPattern” Then
Set swFlatPattern = swFeat
Exit Do
End If
Set swFeat = swFeat.GetNextFeature
Loop
If swFlatPattern Is Nothing Then
MsgBox “フラットパターンが見つかりません。”, vbCritical
Exit Sub
End If
‘ 2. フラットパターンの有効化 (重要: これを怠ると出力は空になる)
swFlatPattern.Select2 False, 0
swModel.EditUnsuppress2
‘ 3. DXF出力パスの定義
Dim outputPath As String
outputPath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, “.”)) & “dxf”
‘ 4. DXF出力実行
‘ オプションを明示的に指定することで、環境依存を排除する
‘ パラメータ: バージョン、図面空間、レイヤー設定など
Dim status As Boolean
status = swModel.SaveAs3(outputPath, 0, 0)
If status Then
Debug.Print “DXF Export Success: ” & outputPath
Else
MsgBox “出力に失敗しました。”, vbExclamation
End If
‘ 後処理: フラットパターンを戻す(必要に応じて)
‘ swFlatPattern.Select2 False, 0
‘ swModel.EditSuppress2
End Sub
—
3. 実務で勝つための「3つの極意」
① 「明示的な選択」から逃げない
SolidWorksのAPIは、現在の選択状態(Selection)に強く依存します。`Select2`メソッドで対象フィーチャを確実に選択し、その上で`EditUnsuppress2`を呼び出す。この順序をコード内で厳格に守ることで、予期せぬ「フィーチャ不在エラー」を根絶できます。
② ファイル名とデータベースの紐付け
DXFは製造部門への「指示書」です。単にモデル名で保存するのではなく、カスタムプロパティ(図番、材質、板厚)をAPIで取得し、`”図番_RevA_t3.2.dxf”`のように命名規則を自動生成してください。これを忘れると、後で手作業でリネームする地獄が待っています。
③ インターフェースの抽象化
将来的に「PDFも同時に出したい」「特定のレイヤーだけ色を変えたい」という要求は必ず発生します。今回のコードを単発で終わらせず、`ExportDXF`という名前の関数に切り出し、引数でパスを受け取る形にしておきましょう。保守性は「関数の粒度」で決まります。
—
最後に:自動化は「責任」である
板金展開の自動化は、単なる作業の短縮ではありません。「設計の意図を正確に製造へ伝えるパイプライン」を構築することです。
もしあなたがこのコードを導入するなら、出力されたDXFの縮尺や外形線が正しいか、まずは一枚の図面で徹底的に検証してください。機械に仕事を任せるということは、機械が起こすかもしれないミスを先回りして防ぐ「エンジニアの矜持」を持つことと同義です。
さあ、このコードを武器に、手作業の泥沼から脱出し、より高次元な設計業務へシフトしてください。健闘を祈ります。
