【入門編】【板金設計の自動化】SheetMetalFeatureData2.GetEdgeFlangeDataを用いた、板金フランジの折り曲げ角度・長さ・リリーフタイプの自動一括最適化 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
今回は、筐体設計の現場で最も頭を悩ませる「板金パーツのパラメータ一括最適化」について、私と一緒に深く掘り下げていきましょう。

「マクロの記録」ボタンを押して操作を記録したものの、生成されたコードの嵐に圧倒され、「どこをどう触ればいいのか分からない…」と立ち止まっていませんか?
大丈夫。ここをクリアすれば、あなたのSolidWorks VBAスキルは一気に実務レベルへ引き上げられます。今日は、板金フィーチャの心臓部である `SheetMetalFeatureData2` と `GetEdgeFlangeData` を手懐け、設計工数を劇的に削減する魔法のコードを一緒に作っていきましょう。

なぜ「エッジフランジの一括最適化」が必要なのか?

筐体設計では、何十箇所ものエッジフランジ(折り曲げ)に対して、以下のような変更を頻繁に行います。

  • 「すべてのフランジの角度を 90度 から 88度(スプリングバック考慮)に変更したい」
  • 「フランジ長さを一括で 15mm から 20mm に修正したい」
  • 「リリーフタイプを統一したい」

これを手作業で1つずつクリックして変更していたら、何時間かかるかわかりません。さらに、設計変更のたびにヒューマンエラーのリスクも高まります。
だからこそ、VBAで一気に走査し、プログラムに正確に処理させる必要があるのです。

押さえておくべきSolidWorks板金APIの構造

エッジフランジをVBAで操作する場合、通常のフィーチャとは少し異なる「APIの階層構造」を理解する必要があります。ここが今日の最重要ポイントです。

[Partドキュメント]
└─ [Feat (Feature)] : エッジフランジのフィーチャ
└─ [GetDefinition()]
└─ [SheetMetalFeatureData2 (または EdgeFlangeFeatureData)]
├─ 角度 (Angle) の取得・設定
├─ 長さ (Length) の取得・設定
└─ リリーフ (Relief) の取得・設定

フィーチャ(Feature)そのものには、実は「長さ」や「角度」といった詳細なデータはありません。フィーチャから `GetDefinition()` というメソッドを使って「中身のデータ(定義オブジェクト)」を取り出し、そのデータを書き換えてから `ModifyDefinition()` でフィーチャに戻す。
これが、SolidWorks APIにおける「お作法」であり、鉄則です。

実践!エッジフランジ一括最適化マクロ

それでは、実際に動く実用コードを見てみましょう。
このコードは、アクティブな板金パーツ内のすべての「エッジフランジ」を自動で探し出し、角度を `88.5度`、長さを `20.0mm` に一括で書き換えるプログラムです。

Sub OptimizeEdgeFlanges()
‘ — 1. オブジェクトの宣言 —
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 swEdgeFlangeData As SldWorks.EdgeFlangeFeatureData
Dim success As Boolean

‘ — 2. アプリケーションとドキュメントの取得 —
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

‘ — 3. フィーチャツリーの走査(トラバーサル) —
Set swFeat = swModel.FirstFeature

Do While Not swFeat Is Nothing
‘ フィーチャのタイプ名が “EdgeFlange”(エッジフランジ)であるかを判定
If swFeat.GetTypeName2 = “EdgeFlange” Then

‘ エッジフランジの定義データ(中身)を取得
Set swEdgeFlangeData = swFeat.GetDefinition

If Not swEdgeFlangeData Is Nothing : Then
‘ データの編集モードを開始(これが必須のお作法!)
success = swEdgeFlangeData.AccessSelections(swModel, Nothing)

If success Then
‘ — 4. パラメータの書き換え —
‘ 角度をラジアンで設定(例:88.5度をラジアンに変換)
‘ ※APIは基本的にラジアン(Radian)で処理します
swEdgeFlangeData.Angle = 88.5 (3.14159265358979 / 180#)

‘ 長さを設定(単位:メートル法なので、20mmなら 0.02)
swEdgeFlangeData.FlangeLength = 0.02

‘ — 5. フィーチャの更新を適用 —
‘ 変更をフィーチャに書き戻す
success = swFeat.ModifyDefinition(swEdgeFlangeData, swModel, Nothing)

If Not success Then
Debug.Print “警告: フィランジの更新に失敗しました -> ” & swFeat.Name
End If
End If

‘ 選択状態を必ず解放する(メモリリークやフリーズ防止)
swEdgeFlangeData.ReleaseSelectionAccess
End If

End If

‘ 次のフィーチャへ移動
Set swFeat = swFeat.GetNextFeature
Loop

‘ — 6. 完了報告とモデルの再構築 —
swModel.ForceRebuild3 True
MsgBox “すべてのエッジフランジの最適化が完了しました!”, vbInformation

End Sub

コードの重要ポイントと「初心者がハマりやすい罠」

ここで、エンジニアとして絶対に知っておくべきポイントをいくつか解説します。

1. 単位は「メートル法(SI単位系)」

SolidWorksのAPIは、画面上の単位(mmやinch)に関わらず、内部的には常に「メートル(m)」と「ラジアン(rad)」で計算しています。

  • `20mm` を指定したいときは `0.02` と入力する。
  • 角度を `88.5度` にしたいときは、数学の公式通り `(角度 π / 180)` でラジアンに変換する。

ここを忘れると、「フランジが画面から消えた!?」という恐怖の現象(巨大化・極小化)が起きるので注意してください。

2. `AccessSelections` と `ReleaseSelectionAccess` のペア

APIでフィーチャの定義を変更する際は、必ず `AccessSelections` で編集権限をロックし、処理が終わったら `ReleaseSelectionAccess` で解放しなければなりません。
これをサボると、SolidWorksが不安定になったり、メモリリークを引き起こしたりします。「開けたら閉める(LockしたらReleaseする)」はプログラミングの鉄則です。

3. `ForceRebuild3 True` で確実に再構築

プログラム側でデータを書き換えた後、画面上の見た目が追いつかないことがあります。最後にモデルの強制再構築(Rebuild)を入れることで、展開図(フラットパターン)の整合性も含めて完全に最新の状態に同期させることができます。

さあ、実務の自動化へ踏み出そう!

今回は、`SheetMetalFeatureData2` を用いたエッジフランジの一括最適化の基本と、実用的なコードをご紹介しました。

「ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!」

フィーチャツリーをプログラムで自在に散策し、データを書き換え、再構築する。この一連の流れがマスターできれば、板金設計だけでなく、カットリストの自動生成や、穴wizardの一括変更など、あらゆる設計自動化の扉が開きます。

ぜひ、お手元のSolidWorksとVBAエディタを開いて、このコードを試してみてください。あなたの設計業務が、もっとクリエイティブで楽しいものになることを応援しています!

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