【入門編】【板金設計の自動化】SheetMetalFeatureData2.GetEdgeFlangeDataを用いた板金パーツの展開長(Kファクター)自動検証とレポート – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
今回は、現場で最も需要が高い「板金設計の自動化」にスポットを当てます。

「マクロの記録」ボタンを押して図面を出力するだけのコードから卒業し、APIのオブジェクト構造を正しく理解して、設計の合否判定までを自動化する――ここをクリアすれば、あなたのVBAスキルは一気にプロの領域へと到達します。

今回は、板金パーツのエッジフランジから「Kファクター(展開係数)」や「曲げ半径」を抽出し、社内基準に照らし合わせて自動検証、さらにフラットパターンのDXFまで一気通貫で吐き出す実用コードを一緒に紐解いていきましょう。

1. なぜ「板金データの検証」をVBAで自動化すべきなのか?

板金設計において、Kファクターや曲げ半径の入力ミスは、そのまま工場での加工ミス(寸法不良)に直結します。「熟練者のチェックに頼る」「図面を1枚ずつ目視確認する」というアナログなプロセスは、ヒューマンエラーの温床です。

SolidWorks APIを使えば、「3Dモデルが生成された瞬間に、コードが数値を読み取り、基準外であれば即座にアラートを出す」という堅牢なシステムを構築できます。ここで鍵となるのが、今回取り上げる `SheetMetalFeatureData2` インターフェースです。

2. 本日の主役:`SheetMetalFeatureData2` と板金ツリーの構造

SolidWorksのフィーチャーツリーにおいて、板金パーツの根幹には「板金(Sheet-Metal)」フィーチャーが存在します。ここには、グローバルな厚みや既定のKファクターが格納されています。
さらに、エッジフランジなどの個別の曲げには `EdgeFlangeFeatureData` がぶら下がっており、`GetEdgeFlangeData` メソッドを使うことで、その曲げに適用されている詳細なパラメータにアクセスできます。

陥りやすい罠:オブジェクトの適切な取得手順

API初心者が最もハマるのが、「どのフィーチャーからどのデータ型へキャスト(変換)すべきか」という点です。
フィーチャー(`Feature`)を取得しただけでは、板金固有のプロパティにはアクセスできません。必ず `GetDefinition()` メソッドを使って、固有のデータオブジェクト(例: `SheetMetalFeatureData2`)へ安全に引き渡す必要があります。

3. 実装コード:板金検証&DXF出力マクロ

以下のコードは、アクティブなパーツドキュメントが板金部品であることを前提に、すべてのエッジフランジの曲げ半径とKファクターを検証し、条件を満たしていればフラットパターンのDXFを自動保存するスクリプトです。

VBAエディタ(Alt + F11)を開き、標準モジュールに貼り付けて実行してみてください。

Option Explicit

‘ =================================================================================
‘ 担当エンジニア直伝:板金自動検証&DXF出力マクロ
‘ 対象: アクティブなSolidWorksパーツ(板金モデル)
‘ =================================================================================
Sub ValidateAndExportSheetMetal()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeat As SldWorks.Feature
Dim swSubFeat As SldWorks.Feature
Dim swSheetMetalData As SldWorks.SheetMetalFeatureData2
Dim swEdgeFlangeData As SldWorks.EdgeFlangeFeatureData

‘ アプリケーションの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開かれているか、パーツであるかの基本チェック
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical, “エラー”
Exit Sub
End If

If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイルでのみ実行可能です。”, vbCritical, “エラー”
Exit Sub
End If

Set swPart = swModel

Dim validationPassed As Boolean
validationPassed = True

Dim reportLog As String
reportLog = “— 板金設計検証レポート —” & vbCrLf

‘ 1. フィーチャーツリーを走査し、板金フィーチャーとエッジフランジを探す
Set swFeat = swModel.FirstFeature

Do While Not swFeat Is Nothing

‘ 板金フィーチャー(SheetMetal)の処理
If swFeat.GetTypeName2 = “SheetMetal” Then
Set swSheetMetalData = swFeat.GetDefinition
If Not swSheetMetalData Is Nothing Then
‘ 展開法の取得 (1 = Kファクター, 2 = 許容差テーブル など)
‘ ここでは例としてKファクターの値をログに追加
reportLog = reportLog & “[ベース板金] 厚み: ” & (swSheetMetalData.Thickness 1000) & ” mm” & vbCrLf
End If
swSheetMetalData.ReleaseSelectionAccess
End If

‘ エッジフランジ(EdgeFlange)の処理
If swFeat.GetTypeName2 = “EdgeFlange” Then
Set swEdgeFlangeData = swFeat.GetDefinition
If Not swEdgeFlangeData Is Nothing Then

Dim bendRadius As Double
bendRadius = swEdgeFlangeData.Radius 1000 ‘ メートルからミリメートルへ変換

reportLog = reportLog & ” > フランジフィーチャー: ” & swFeat.Name & vbCrLf
reportLog = reportLog & ” – 曲げ半径: ” & bendRadius & ” mm” & vbCrLf

‘ 【社内基準チェック】例:曲げ半径が板厚未満の場合はエラーとする(R < 1.0mm はNGなど) If bendRadius < 1.0 Then validationPassed = False reportLog = reportLog & " 【警告】曲げ半径が社内基準(1.0mm以上)を満たしていません!" & vbCrLf End If End If swEdgeFlangeData.ReleaseSelectionAccess End If ' 次のフィーチャーへ Set swFeat = swFeat.GetNextFeature Loop ' 2. 検証結果に基づく処理分岐 If Not validationPassed Then MsgBox reportLog & vbCrLf & "基準を満たさない箇所があったため、DXFの出力は中止されました。", vbExclamation, "検証不合格" Exit Sub End If ' 3. 検証クリアの場合、フラットパターンのDXFを出力 Dim boolstatus As Boolean Dim pathName As String Dim fileName As String Dim dxfPath As String pathName = swModel.GetPathName If pathName = "" Then MsgBox "一度ファイルを保存してから実行してください。", vbExclamation, "未保存ファイル" Exit Sub End If ' ファイルパスのディレクトリとファイル名を抽出してDXF用パスを生成 fileName = Left(swModel.GetTitle, InStrRev(swModel.GetTitle, ".") - 1) dxfPath = Left(pathName, InStrRev(pathName, "\")) & fileName & "_FlatPattern.dxf" ' フラットパターンビューのエクスポート実行 ' ※注: 実務ではエクスポートオプション(コンター、非表示線等)の細かい制御が必要になります boolstatus = swModel.Extension.SaveAs(dxfPath, 0, 0, Nothing, 0, 0) If boolstatus Then MsgBox reportLog & vbCrLf & "検証に合格しました!" & vbCrLf & "DXFを出力しました: " & dxfPath, vbInformation, "完了" Else MsgBox "DXFの出力に失敗しました。", vbCritical, "エラー" End If End Sub ---

4. コードの深掘り:ここだけは押さえたい3つのポイント

1. `GetDefinition()` と `ReleaseSelectionAccess` のペア原則
APIでフィーチャーの内部データ(`SheetMetalFeatureData2` や `EdgeFlangeFeatureData`)を取得する際、裏側ではSolidWorksがそのフィーチャーを「編集モード(ロック状態)」にします。
処理が終わったら必ず `ReleaseSelectionAccess` を呼び出してロックを解除してください。これを怠ると、ファイルがロックされたりメモリリークの原因になります。
2. 単位系は常に「メートル法(MKS)」
SolidWorks APIの内部計算は、人間が普段使うミリ(mm)ではなくメートル(m)で行われます。コード内で ` 1000` をしているのはそのためです。この仕様を忘れると、「半径0.001mmの異常なパーツができた!」とパニックになるので注意しましょう。
3. 文字列によるフィーチャー判定(`GetTypeName2`)
`swFeat.GetTypeName2` を使うことで、そのフィーチャーが「穴(Hole)」なのか「押し出し(Extrude)」なのか「エッジフランジ(EdgeFlange)」なのかを判定できます。板金自動化の第一歩は、この文字列による的確なフィルタリングから始まります。

5. おわりに:ここをクリアすれば、基本はバッチリ!

お疲れ様でした!今回は、単なる操作の記録(マクロの記録)では絶対にたどり着けない、「APIを用いたデータの読み取り・検証・条件分岐・外部出力」という一連の流れを解説しました。

ここをマスターすれば、次は「社内の全パーツのKファクターを一括書き換えするバッチ処理」や、「PDMシステムとの連携」へと応用範囲が無限に広がっていきます。

ぜひ手元のSolidWorksでコードを動かし、コンソールにログが出力される感動を味わってみてください。あなたの設計自動化の旅を、これからも応援しています!

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