【SolidWorks API】板金設計の「聖域」を侵すな:パラメータ一括検証による品質保証の極意
設計現場において、「板金」は最もデリケートな領域だ。展開計算の僅かな誤差が、工場のプレス工程での歩留まりを左右し、最終的には製品の信頼性を根底から揺るがす。
多くのエンジニアが「設計者の勘」に頼るこの工程を、我々アーキテクトはコードで担保しなければならない。今回は、`SheetMetalFeatureData2`オブジェクトを深掘りし、社内標準から逸脱した板金パーツを瞬時に検知・排除する「品質保証マクロ」の設計思想を伝授する。
—
1. `SheetMetalFeatureData2` の深淵:なぜ単なる値の取得では足りないのか
多くの初心者は、`Feature.GetDefinition` を呼び出し、そこからプロパティを垂れ流しで取得する。だが、大規模アセンブリや複雑な履歴を持つパーツにおいて、それはメモリリークとパフォーマンス低下の引き金となる。
真のエンジニアは、「オブジェクトのライフサイクル」を管理する。`SheetMetalFeatureData2` は、フィーチャの定義を保持する一時的なインターフェースだ。これを取得した後は、即座に値を評価し、不要になった瞬間にメモリから掃き出す必要がある。
2. 板金パラメータ一括検証マクロの実装
以下は、アクティブなドキュメントから板金フィーチャを特定し、厚みと曲げ許容差を検証するアーキテクチャである。
Option Explicit
‘ メモリ管理の鉄則:オブジェクトの解放を忘れるな
Public Sub ValidateSheetMetalParameters()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swSheetMetal As SldWorks.SheetMetalFeatureData2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
‘ フィーチャツリーを走査し、板金定義を抽出
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “SheetMetal” Then
Set swSheetMetal = swFeat.GetDefinition
‘ 境界条件の検証ロジック
‘ 規格外のパラメータを検出した場合、即座にフラグを立てる
Call VerifyStandards(swSheetMetal)
‘ メモリ解放:ここを怠ると巨大アセンブリでVBAがフリーズする
Set swSheetMetal = Nothing
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Sub
Private Sub VerifyStandards(ByVal smData As SldWorks.SheetMetalFeatureData2)
Const THICKNESS_LIMIT As Double = 0.003 ‘ 3mmを上限とする
‘ Thicknessはメートル法(m)で返る。単位系の変換に注意せよ
If smData.Thickness > THICKNESS_LIMIT Then
Debug.Print “警告: 規格外の板厚を検知: ” & smData.Thickness 1000 & ” mm”
End If
‘ 曲げ許容差(BendAllowance)の検証
‘ K-Factorの範囲チェックを行い、計算根拠をログに残す
If smData.BendAllowanceType = swBendAllowanceType_e.swBendAllowanceKFactor Then
If smData.KFactor < 0.3 Or smData.KFactor > 0.5 Then
Debug.Print “警告: 不適切なKファクター: ” & smData.KFactor
End If
End If
End Sub
—
3. レガシー環境とWindows API:極限のチューニング
大規模な環境では、VBA単体では力不足になることがある。特に、ネットワークドライブ上のファイルを一括スキャンする場合、`FileSystemObject`の遅延がボトルネックとなる。
- APIによるファイルロック監視: Windows API (`GetFileAttributes` 等) を併用し、他者が編集中ではないかを確認してから検証を走らせるべきだ。
- 遅延バインディングの回避: 開発中は参照設定を行っても良いが、配布時はコンパイルエラーを避けるために型定義を厳密に行い、実行時のオーバーヘッドを最小化する。
4. アーキテクトからの提言:自動化の先にあるもの
このマクロは、単なる「チェッカー」ではない。「標準化の強制」である。
もし、貴社がレガシーなSolidWorks環境を保守しているのであれば、UI上の警告ダイアログだけで満足してはならない。検証結果をJSON形式で書き出し、PDMシステムやGit上の管理リストと突き合わせる。それが、データ駆動型の設計環境を構築する唯一の道だ。
コードは嘘をつかない。だが、設計者の意図を理解しないコードは、ただのゴミだ。このスクリプトが、貴社の設計品質を一段上のステージへ引き上げる一助となることを願う。
—
追記:
もし、`SheetMetalFeatureData2` が正しく取得できない場合は、フィーチャのサスペンド状態を疑え。`swFeat.IsSuppressed` のチェックをループ内に組み込むのが、トラブルを未然に防ぐ「伝説的な」エンジニアの作法だ。
