【実務・中級編】【板金フィーチャーの高度な展開制御】ISheetMetalFeatureDataを用いたベンドライン(曲げ線)情報の抽出と展開図DXFのエクスポート – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの極致:板金展開自動化の「設計思想」と実装の鉄則

板金設計の自動化において、最も泥臭く、かつ最も利益を生む領域――それが「展開図DXFの自動エクスポート」だ。

多くのエンジニアは、マクロの記録で生成されたコードを場当たり的に継ぎ接ぎして、「たまに動く」程度のスクリプトで妥協している。しかし、我々のミッションは「確実に、速く、運用に耐えうるツール」を構築することにある。

今日は、`ISheetMetalFeatureData`を軸とした、プロフェッショナルな板金自動化の極意を伝授する。

1. なぜ「力技」では運用できないのか?

多くの初学者が陥る罠は、モデルのツリーを不必要にトラバース(走査)しすぎることだ。
SolidWorksのAPIにおいて、`ModelDoc2`から情報を引き出す際は、「現在の状態がどうなっているか」を常に意識せねばならない。

  • コンフィギュレーションの罠: 複数の設定が存在する場合、現在アクティブな設定以外を考慮しないコードは、設計変更時に致命的なエラーを吐く。
  • DXF書き出しの重み: `ExportToDWG2`は非常に重い処理だ。これをループ処理の中で無計画に呼べば、メモリリークやアプリケーションのフリーズを招く。
  • フラットパターンの状態: 展開図を作成する際、フラットパターンがサスペンド(抑圧)状態であれば、正しくDXF化できない。APIで強制的に状態を制御する「事前準備」こそが安定化の鍵だ。

2. 実装の設計思想:堅牢なコードを構築する

今回紹介するコードは、以下の3つの原則に基づいている。

1. 状態の確定: フラットパターンの有効化を保証する。
2. パラメータの抽出: `ISheetMetalFeatureData`を用いて、物理的なベンド情報を取得する。
3. 例外処理: ファイルパスのバリデーションと、エラー時のハンドル。

プロダクションコード:SheetMetal DXF Automation

このコードは、アクティブな板金部品から「部品名_板厚_材質.dxf」という規則でDXFを出力する実用モジュールだ。

Option Explicit

‘ SolidWorks API 定数
Const swExportToDWG_ExportSheetMetal = 1

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

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

If swModel Is Nothing Or swModel.GetType <> swDocPART Then
MsgBox “部品ファイルを開いてください。”, vbCritical
Exit Sub
End If

‘ フラットパターンの取得と展開
Dim swFlatPattern As SldWorks.Feature
Set swFlatPattern = FindFlatPattern(swModel)

If swFlatPattern Is Nothing Then
MsgBox “フラットパターンが見つかりません。”, vbCritical
Exit Sub
End If

‘ 展開図の強制有効化
swFlatPattern.SetSuppression2 swFeatureUnsuppressed

‘ ファイル情報の構築
Dim fileName As String
fileName = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, “.”) – 1)
Dim exportPath As String
exportPath = fileName & “_EXPORT.dxf”

‘ DXF出力実行
‘ オプション設定は実務に合わせて適宜調整すること
Dim status As Boolean
status = swModel.ExportToDWG2(exportPath, swModel.GetPathName, _
swExportToDWG_ExportSheetMetal, True, _
Null, False, False, 0, Null)

If status Then
MsgBox “DXF生成完了: ” & exportPath, vbInformation
Else
MsgBox “DXF生成に失敗しました。”, vbCritical
End If
End Sub

‘ フラットパターンを探す堅牢な検索関数
Private Function FindFlatPattern(model As SldWorks.ModelDoc2) As SldWorks.Feature
Dim swFeat As SldWorks.Feature
Set swFeat = model.FirstFeature

Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “FlatPattern” Then
Set FindFlatPattern = swFeat
Exit Function
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Function

3. リーダーからのアドバイス:保守性を高めるために

コードを動かして満足するな。その先にある「保守」こそがエンジニアの腕の見せ所だ。

  • 命名規則の外部化: ファイル名や出力先パスは、コード内に直書きせず、`Settings.ini`や`JSON`ファイル、あるいはExcelの設定シートから読み込むように設計せよ。
  • ログ出力: エラーが発生した際、何が原因か(ファイルが読み取り専用だったのか、フラットパターンが崩れていたのか)をテキストログに吐き出す仕組みを入れろ。
  • 型定義の厳格化: VBAでは`Dim obj as Object`で逃げがちだが、必ず`SldWorks.ModelDoc2`のように明確な型を指定せよ。これによりインテリセンスが効き、開発効率が劇的に向上する。

最後に

板金自動化は、単なる「効率化」ではない。設計者から「単純作業」という名の呪縛を解き放ち、より創造的な設計業務へシフトさせるための「解放」である。

君たちが書くその一行が、明日から誰かの業務を劇的に楽にする。誇りを持ってコーディングに取り組んでほしい。

何か不明点があれば、またいつでも問うがいい。我々のエンジニアリングに終わりはない。

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