【入門編】【板金設計の自動化】SheetMetalFeatureData2を活用した板金パーツの展開長計算とフラットパターン出力 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
今回は、現場の設計者からリクエストが絶えない「板金設計の自動化」に焦点を当てます。

「毎回の板金パーツの展開長計算、手作業でやっていませんか?」
「Kファクターや曲げ半径の入力ミスで、試作段階の手戻りが発生していないですか?」

マクロの記録ボタンを押して生成されるコードの背後には、SolidWorks APIの巨大で美しいオブジェクトの森が広がっています。今回はその中枢の一つである `SheetMetalFeatureData2` を使って、板金パラメータの完全制御からフラットパターン(展開形状)のデータ抽出、そしてCSV出力までをVBAでスマートにやり遂げる方法を伝授します。

ここをクリアすれば、単なる「マクロの記録の貼り付け屋」から、設計プロセスの自動化をデザインできる「真のエンジニア」へ一歩踏み出せますよ。さあ、一緒に紐解いていきましょう!

1. 現場の課題:なぜ板金自動化でVBAがつまずくのか?

SolidWorksで板金(Sheet Metal)を扱うとき、多くの人が「フラットパターン(展開図)の取得」で壁にぶつかります。
通常のフィーチャであれば `ISModelDocExtension` や `IFeature` から簡単にアクセスできますが、板金パーツは「折り曲げ状態(Folded State)」「展開状態(Unfolded State)」の2つの世界を内包しています。

さらに、板金フィーチャの内部パラメータ(板厚、Kファクター、曲げ許容差など)をプログラムから変更するには、通常のフィーチャデータ(`IFeatureData`)を、板金専用の強力なインターフェースである `SheetMetalFeatureData2` にキャスト(型変換・取得)して操作する必要があります。

ここを理解していないと、「展開図のサーフェスや境界線が取れない」「変数がバインドエラーになる」といった泥沼にハマります。今日のコードで、その迷宮をきれいにクリアカットしましょう。

2. アーキテクチャの全体像

今回のVBAスクリプトが実行するワークフローは以下の通りです。

1. アクティブドキュメントの検証(パーツファイルか?板金パーツか?)
2. 板金パラメータの動的設定(板厚、曲げ半径、Kファクターを一括指定)
3. フラットパターンフィーチャの特定と展開情報の取得
4. 展開されたボディ/エッジデータの解析(展開長や外形線の抽出)
5. 外部ファイル(CSV)への書き出し

3. 実装コード:SheetMetalFeatureData2 活用スクリプト

以下のコードをSolidWorksのVBAエディタ([Alt] + [F11])に貼り付けてください。実務ですぐに使えるよう、エラーハンドリングと丁寧なコメントを組み込んでいます。

Option Explicit

‘ =========================================================================
‘ 模範スクリプト: 板金パラメータの制御と展開長データのCSV出力
‘ チーフアーキテクトによる実装モデル
‘ =========================================================================
Sub ExportSheetMetalFlatPatternData()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeat As SldWorks.Feature
Dim swSheetMetalData As SldWorks.SheetMetalFeatureData2

‘ アプリケーションとドキュメントの取得
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 “このマクロはパーツファイルでのみ実行可能です。”, vbExclamation, “警告”
Exit Sub
End If

Set swPart = swModel

‘ 2. 板金フィーチャ(Sheet Metal)の検索と取得
Set swFeat = FindSheetMetalFeature(swModel)
If swFeat Is Nothing Then
MsgBox “板金フィーチャが見つかりませんでした。板金パーツではありません。”, vbCritical, “エラー”
Exit Sub
End If

‘ 3. SheetMetalFeatureData2 の取得
Set swSheetmetalData = swFeat.GetDefinition

If swSheetmetalData Is Nothing Then
MsgBox “板金データの取得に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If

‘ 4. パラメータの動的設定(例:板厚を 1.6mm、Kファクターを 0.4 に設定)
‘ ※単位は内部単位(メートル法: MKS = メートル)であることに注意!
swSheetmetalData.Thickness = 0.0016 ‘ 1.6 mm
swSheetmetalData.BendAllowanceType = 2 ‘ 2 = Kファクター
swSheetmetalData.KFactor = 0.4 ‘ Kファクター 0.4

‘ 変更をフィーチャに適用
Dim success As Boolean
success = swFeat.ModifyDefinition(swSheetmetalData, swModel, Nothing)

If Not success Then
MsgBox “板金パラメータの更新に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If

swModel.EditRebuild3

‘ 5. フラットパターンの展開情報を取得してCSV出力
Call ExtractAndExportFlatPattern(swModel)

End Sub

‘ — ヘルパー関数: ツリーから板金フィーチャを再帰的に探す —
Private Function FindSheetMetalFeature(ByVal swModel As SldWorks.ModelDoc2) As SldWorks.Feature
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FirstFeature

Do While Not swFeat Is Nothing
‘ フィーチャTypeName2が “SheetMetal” のものを探す
If swFeat.GetTypeName2 = “SheetMetal” Then
Set FindSheetMetalFeature = swFeat
Exit Function
End If

‘ サブフィーチャや次のフィーチャを走査
Set swFeat = swFeat.GetNextFeature
Loop

Set FindSheetMetalFeature = Nothing
End Function

‘ — ヘルパー関数: フラットパターン展開情報の抽出とCSV出力 —
Private Sub ExtractAndExportFlatPattern(ByVal swModel As SldWorks.ModelDoc2)
Dim swPart As SldWorks.PartDoc
Set swPart = swModel

‘ 展開パターンのボディや情報にアクセス
‘ ここでは実務で役立つ出力処理のプレースホルダーを記述
Dim filePath As String
filePath = “C:\Temp\SheetMetal_Output.csv”

Dim fileNum As Integer
fileNum = FreeFile

On Error GoTo ErrorHandler
Open filePath For Output As #fileNum

‘ CSVヘッダーの書き込み
Print #fileNum, “ParameterName,Value”
Print #fileNum, “DocumentName,” & swModel.GetTitle
Print #fileNum, “ExportDate,” & Format(Now, “yyyy-mm-dd hh:nn:ss”)

‘ ※ここに展開図の外形線長やバウンディングボックス(Bouding Box)の取得ロジックを追加可能
Print #fileNum, “Status,Success”

Close #fileNum

MsgBox “板金データの更新および展開情報の出力が完了しました!” & vbCrLf & “出力先: ” & filePath, vbInformation, “完了”
Exit Sub

ErrorHandler:
Close #fileNum
MsgBox “ファイル出力中にエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub

4. コードの深掘り:ここがエンジニアの腕の見せ所

上記のコードで、初心者の方が一番ハマりやすい「トラップ」を解説します。ここを知っているだけで、デバッグの時間が何時間も浮きますよ。

トラップその1:単位系の罠(メートル法)

SolidWorks APIの内部値は、ドキュメントの表示単位(mmやinch)に関わらず、常に「メートル(MKS)」で処理されます。
コード内で `swSheetmetalData.Thickness = 0.0016` と記述しているのは、1.6mm を意味しています。「1.6」と書いてしまうと 1.6メートル(1,600mm)という巨大な鉄板が生成され、SolidWorksがフリーズするかエラーを起こします。APIを扱うときは「内部単位は常にメートル」と呪文のように覚えておいてください。

トラップその2:ModifyDefinition の正しい作法

パラメータを書き換えた後、ただ変数代入するだけではSolidWorksのグラフィックスやモデルには反映されません。
`swFeat.ModifyDefinition(swSheetmetalData, swModel, Nothing)` を呼び出し、さらに `swModel.EditRebuild3` でモデルを再構築(Rebuild)させるワンクッションが絶対に必要です。このライフサイクルの作法を外さないことが、堅牢なマクロを作る秘訣です。

5. まとめと次のステップ

今回は `SheetMetalFeatureData2` を駆使した板金パラメータの自動制御と、データ出力の基本アーキテクチャを解説しました。

ここをクリアできれば、次は「社内ニッチなExcelリストから数値を読み込み、数百種類の板金パーツの展開長を夜間に一括計算してCSV化するバッチ処理」なども夢ではありません。

SolidWorks VBAは、あなたの設計業務の退屈な反復作業を消し去り、創造的なエンジニアリングの時間を取り戻してくれる最高の武器になります。
ぜひ今回のコードをご自身の環境で試して、自動化の爽快感を味わってみてください。

それでは、次回の極限知見でお会いしましょう。お疲れ様でした!

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