板金自動化の深淵:SheetMetalFeatureData2を操るフラットパターンDXF生成の極意
SolidWorks APIにおける板金(SheetMetal)操作は、単なるフィーチャ操作の延長ではない。それは数学的な曲げアルゴリズムと、製造現場の要求する幾何学的な整合性との間の「橋渡し」である。
多くのエンジニアが「フラットパターン(展開図)が生成されない」「DXF出力時のレイヤー定義が反映されない」という壁に突き当たる。これらはAPIの仕様ではなく、SolidWorksのオブジェクトライフサイクルと、ドキュメントの再計算ロジックを理解していないことに起因する。
本稿では、レガシーなVBA環境下であっても、メモリを汚さず、かつ堅牢に製造用データを吐き出すための極限のアーキテクチャを提示する。
—
1. 物理的真理:展開図の「非同期」生成を克服する
SolidWorksにおいて、`FlatPattern`フィーチャは「モデルの再計算(Rebuild)」と「フィーチャの有効化」という、二つの大きなオーバーヘッドを抱えている。
APIを叩いて即座にDXFを生成しようとすると、往々にして「展開図が空」のデータが出力される。これはAPIがフィーチャの再計算完了を待たずに次のプロセスへ移行するためだ。
実装の鉄則:強制的な再構築とポインタの検証
コードの先頭で必ず `ModelDoc2.ForceRebuild3` を呼び出し、展開図フィーチャが「抑制解除(Unsuppress)」されているかを厳密に判定すること。
‘ @brief フラットパターンを生成し、DXFへ出力する堅牢なメソッド
Public Sub ExportSheetMetalToDXF(swPart As SldWorks.PartDoc, outputPath As String)
Dim swModel As SldWorks.ModelDoc2
Set swModel = swPart
‘ 1. モデルの完全な再構築
swModel.ForceRebuild3 False
‘ 2. フラットパターンフィーチャの探索と有効化
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “FlatPattern” Then
‘ 抑制解除してアクティブな状態を保証する
swFeat.SetSuppression2 swFeatureSuppressionAction_e.swUnSuppressFeature, _
swInConfigurationOpts_e.swThisConfiguration, Nothing
Exit Do
End If
Set swFeat = swFeat.GetNextFeature
Loop
‘ 3. DXF出力のためのオプション設定(レガシーなDXF変換の罠を回避)
‘ ※DXF出力時は、ExportDataオブジェクトの精緻な制御が不可欠
Dim swExportData As SldWorks.ExportFlatPatternViewData
Set swExportData = swModel.Extension.GetExportFlatPatternViewData()
‘ 出力実行
swModel.Extension.SaveAs outputPath, swSaveAsVersion_e.swSaveAsCurrentVersion, _
swSaveAsOptions_e.swSaveAsOptions_Silent, _
swExportData, 0, 0
‘ 4. メモリ解放の徹底
Set swExportData = Nothing
Set swFeat = Nothing
End Sub
—
2. メモリ最適化とWindows APIの静かなる共存
VBAはガベージコレクションが脆弱だ。特に`ModelDoc2`や`Feature`オブジェクトをループ内で生成・破棄し続けると、SolidWorksプロセスは確実にメモリリークを起こす。
大規模なアセンブリから数百の板金パーツを順次処理する場合、「単一プロセス内での使い回し」が必須だ。オブジェクトをループごとに `Set x = Nothing` するのは当然だが、さらに一歩進んで、プロセス終了時に `DoEvents` を挟み、OS側のメッセージキューを掃き出すことを推奨する。
安定性を高めるAPI定義
特定のレイヤー設定や、DXFの出力精度(折れ線を表示するか等)を制御する場合、`ExportFlatPatternViewData`のプロパティを書き換えるだけでなく、環境変数やレジストリ設定を一時的に操作する「Windows API連携」が有効な場合がある。
‘ 必要な場合はWin32 APIでプロセス監視を追加する
Private Declare PtrSafe Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
‘ ループ処理の合間に挟むことで、SolidWorksの描画更新負荷を軽減する
Public Sub ThrottleProcess()
DoEvents
Sleep 100 ‘ 100msの待機でCPUリソースを解放
End Sub
—
3. シニアエンジニアに向けた「設計意図」の継承
単なる自動化ツールを作るのではない。製造部門が「どのレイヤーに曲げ線があるか」「刻印はあるか」を迷わないデータ構造を生成することが、システムアーキテクトの仕事だ。
- レイヤーマッピング: `ExportFlatPatternViewData.SetLayerMapping` を使用し、社内基準のレイヤー名(例: `BEND_LINE`, `CUT_PROFILE`)を強制的に割り当てること。
- 例外処理: `Err.Number` を捕捉した際は、単に停止するのではなく、ログファイルに「どのフィーチャが展開失敗したか」を書き出し、次モデルへスキップするフォールトトレランスを実装せよ。
チーフアーキテクトの箴言
「コードは動けば良いものではない。SolidWorksという巨大なブラックボックスに対し、APIを通じて『正しい設計意図』をいかに低レイテンシで伝えるか。それが我々の腕の見せ所だ」
DXF出力は単なるファイル変換ではない。それは3次元の思考を、2次元の製造現場という現実へ射影する神聖なプロセスである。この実装が、あなたの自動化パイプラインの心臓部として機能することを期待する。
—
次回の予告:
次回は `ISheetMetalFeatureData2` を用いた「曲げ角度の動的変更と、それに伴うブランク形状の自動計算の最適化」について解説する。再計算時間を最小化する、数学的なアプローチを紹介しよう。
