【入門編】【板金フィーチャーの高度な展開制御】ISheetMetalFeatureDataを用いたベンドライン情報の抽出とDXF出力 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録ボタンを押して生成されたコードを眺めて、「これ、本当に自分の思い通りに動くのかな…?」と不安になった経験はありませんか?

今回は、現場で最も需要が高い「板金部品の展開とDXF出力」をテーマに、SolidWorks APIの真髄に迫ります。
単にDXFを保存するだけなら誰でも書けますが、「正確なベンドライン(曲げ線)の情報をコードで完全に制御し、スマートな命名規則で出力する」という領域に踏み込めるようになると、あなたの業務効率は文字通り桁違いになります。

ここをクリアすれば、SolidWorks VBAの基本はバッチリです。優しく、そして深く、プロの技術を伝授しますね!

1. なぜ「マクロの記録」だけでは板金展開ができないのか?

板金部品のフラットパターン(展開図)をDXFとして保存する作業、手作業だと結構面倒ですよね。これをVBAでやろうとして「マクロの記録」を使うと、こんなコードが出力されます。

‘ マクロの記録が吐き出す典型的なコード
boolstatus = Part.Extension.SaveAs2(“C:\Test\part1.dxf”, 0, True, dummy1, dummy2, False, dummy3, dummy4, dummy5)

これ、一見動くように見えますが、実務では使い物になりません。
なぜなら、「どっちの面を基準に展開しているのか」「曲げ線やベンドアトリビュートが正しく含まれているか」「ファイル名がアセンブリのコンフィギュレーション名やリビジョンを反映しているか」といった、現場で絶対に外せない要件を一切コントロールできないからです。

プロのエンジニアは、`ISheetMetalFeatureData` という専用のインターフェースを召喚し、板金フィーチャーの内部データに直接アクセスします。これを使えば、曲げ半径、曲げ角度、そしてベンドラインの方向まで、すべてプログラムの掌(てのひら)の上です。

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

今回のプログラムの流儀(ワークフロー)は以下の通りです。

1. アクティブなドキュメントの安全な取得と型チェック(今開いているのが本当に板金パーツか?)
2. 板金フィーチャー(SheetMetal Feature)の探索
3. `ISheetMetalFeatureData` による展開パラメータの取得・制御
4. 板金固有のオプションを指定したDXFのエクスポート

それでは、現場でそのままコピペして動かせる実用コードを公開します。VBAの標準モジュールに貼り付けて実行してみてください。

3. 実践!ベンドライン抽出&最適化DXF出力コード

Option Explicit

‘ =================================================================================
‘ 処理名: 板金部品の高度展開制御 & 最適化DXFエクスポート
‘ 概要 : アクティブな板金部品からISheetMetalFeatureDataを利用して情報を取得し、
> 独自の命名規則でDXFファイルをスマートに自動保存します。
‘ =================================================================================
Sub ExportSheetMetalToDXF_Advanced()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeat As SldWorks.Feature
Dim swSheetMetalData As SldWorks.SheetMetalFeatureData
Dim bRet As Boolean

‘ 1. アプリケーションとドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開かれているかチェック
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。”, vbCritical, “エラー”
Exit Sub
End If

‘ パーツドキュメントかどうかの型チェック (swDocPART = 1)
If swModel.GetType <> swDocPART Then
MsgBox “このマクロは板金パーツ(部品)でのみ実行可能です。”, vbExclamation, “対象外”
Exit Sub
End If

Set swPart = swModel

‘ 2. 板金フィーチャー(SheetMetal)をトラバーサル(探索)する
Set swFeat = swModel.FirstFeature
Dim sheetMetalFound As Boolean
sheetMetalFound = False

Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “SheetMetal” Then
‘ 板金フィーチャーを発見!
Set swSheetMetalData = swFeat.GetDefinition
sheetMetalFound = True
Exit Do
End If
Set swFeat = swFeat.GetNextFeature
Loop

If Not sheetMetalFound Then
MsgBox “このモデルには板金フィーチャーが含まれていません。”, vbExclamation, “板金エラー”
Exit Sub
End If

‘ 3. 板金データのロードと制御(ここでAPIの恩恵を受ける!)
‘ 編集モードに入ってからデータを操作するのがSolidWorks APIの鉄則です
swSheetMetalData.AccessSelections swModel, Nothing

‘ 例:イミディエイトウィンドウに曲げ内側半径と厚みを出力(デバッグの極意)
Debug.Print “— 板金情報解析 —”
Debug.Print “板金厚み: ” & (swSheetMetalData.Thickness 1000) & ” mm”
Debug.Print “既定内側半径: ” & (swSheetMetalData.BendRadius 1000) & ” mm”

‘ 選択のロックを解除(非常に重要!これを忘れるとモデルが破損状態になります)
swSheetMetalData.ReleaseSelection

‘ 4. 最適なファイル名規則の構築
Dim filePath As String
Dim folderPath As String
Dim fileName As String
Dim configName As String
Dim revNo As String

filePath = swModel.GetPathName
If filePath = “” Then
MsgBox “一度ファイルを保存してから実行してください。”, vbExclamation, “未保存エラー”
Exit Sub
End If

‘ フォルダパスの抽出
folderPath = Left(filePath, InStrRev(filePath, “\”))

‘ コンフィギュレーション名の取得
Dim swConf As SldWorks.Configuration
Set swConf = swModel.GetActiveConfiguration
configName = swConf.Name

‘ 【命名規則の黄金律】: [部品番号]_[コンフィギュレーション名]_[板厚]mm.dxf
‘ ここでは簡易的にファイル名を利用
Dim titleWithoutExt As String
titleWithoutExt = Left(swModel.GetTitle, InStrRev(swModel.GetTitle, “.”) – 1)
If titleWithoutExt = “” Then titleWithoutExt = swModel.GetTitle

fileName = folderPath & titleWithoutExt & “_” & configName & “_t” & Format(swSheetMetalData.Thickness 1000, “0.0”) & “.dxf”

‘ 5. DXFエクスポートの実行(板金展開図のエクスポートオプション指定)
‘ 注意: 展開図出力には、モデルがフラットパターン表示状態であるか、
‘ あるいはエクスポートAPIがジオメトリを正しく認識している必要があります。

Dim exportData As Long
‘ 0: 標準エクスポート, 複数オプションをビットマスクで渡すことも可能
bRet = swModel.Extension.SaveAs2(fileName, 0, True, Empty, Empty, False, Empty, Empty, Empty)

If bRet Then
MsgBox “DXFの出力に成功しました!” & vbCrLf & fileName, vbInformation, “完了”
Else
MsgBox “DXFの出力に失敗しました。エラーコードを確認してください。”, vbCritical, “エラー”
End If

End Sub

4. 押さえておくべき「プロの罠」と回避テクニック

上記のコードを実務で使う上で、チーフアーキテクトとして絶対に伝えておかなければならない「罠」が2つあります。ここを知っているかどうかで、エンジニアとしての格が分かれます。

罠その1:`AccessSelections` と `ReleaseSelection` の呪縛

SolidWorks APIでは、フィーチャーの内部データ(`IComponent2` や `IFeature` の定義データ)に触れる際、必ず `AccessSelections` を呼び出してメモリ上にコンテキストをロードする必要があります。
これを忘れると、プロパティの取得に失敗したり、最悪の場合 SolidWorks がフリーズします。
そして、処理が終わったら必ず `ReleaseSelection`(またはフィーチャーの編集を閉じる処理)をペアで行うこと。これを怠ると、ファイルが「読み取り専用」のようにロックされてしまい、手動操作ができなくなる「メモリリークの悪夢」に見舞われます。

罠その2:フラットパターンの表示状態

DXFを出力する際、モデルが通常の「折曲げ状態」のままだと、投影図としてのDXF(あるいは3Dの展開図)になってしまい、レーザー加工機が読み込めない「意味不明な線画」が出力されます。
確実に正確な2D展開図(ベンドライン、アウトライン、外形線)を出力するためには、あらかじめプログラム側でフラットパターンのコンフィギュレーションに切り替えるか、あるいは対応するビューをアクティブにする前処理が必要です。このあたりは、今後のステップアップとして「フラットパターンフィーチャーの抑制解除」を組み合わせてみてください。

まとめ

今回は、`ISheetMetalFeatureData` を使った板金情報の深掘りと、実用的なファイル命名規則によるDXF自動出力の極意を解説しました。

  • マクロの記録を卒業し、専用のインターフェースオブジェクトを使うこと
  • フィーチャーデータのアクセスには `AccessSelections` と `ReleaseSelection` のセットが絶対のルールであること
  • 現場の運用に合わせたスマートなファイル命名規則をコードで自動生成すること

この3つをマスターすれば、あなたの設計業務におけるルーワークは劇的に効率化されます。
「コードを書くことで、手作業のミスをゼロにする」。これこそがSolidWorks VBAを極める醍醐味です。

それでは、次回の高度なAPI解説もお楽しみに!

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