【実務・中級編】【板金設計の自動化】SheetMetalFeatureData2.GetThicknessとBendAllowanceを用いた板金パラメータの一括検証マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

【板金設計の自動化】SolidWorks APIで挑む、規格違反を許さない「品質保証ゲートキーパー」の構築

エンジニア諸君、日々SolidWorksのAPIと格闘していることと思う。
特に「板金(Sheet Metal)」領域の自動化は、設計の初期段階でミスを潰せるかどうかが、後の製造工程での手戻りを左右する極めて重要な防波堤だ。

今回は、単に「値を取得する」だけのスクリプトではない。「設計の品質を担保し、規格外のパーツを自動で弾く」という、実務レベルの堅牢性を備えたコードを伝授する。

1. なぜ「力技の探索」が失敗するのか

多くの者が陥る罠は、`FeatureManager`を先頭からループさせ、力技でフィーチャを探そうとすることだ。これは、アセンブリや複雑な履歴を持つパーツにおいて、処理速度を著しく低下させる。

我々が狙うべきは、`SheetMetalFolder`に直接アクセスするか、`ISheetMetalFeatureData2`オブジェクトを正確にハンドリングすることだ。ここで重要なのは、「フィーチャの定義(Definition)を正しくロードし、処理後にメモリを解放する」というオブジェクトのライフサイクル管理である。

2. 規格違反を検知するエンジニアリングの要諦

板金パラメータの検証において、以下の3点を意識せよ。

  • 単一のフィーチャに依存しない: `SheetMetal`フィーチャは複数存在しうる。ベースとなるフィーチャからパラメータを抽出するロジックを組むこと。
  • 単位の罠(Unit Consistency): SolidWorks APIは内部的にメートル法(メートル・ラジアン)で値を返す。定数との比較時は、必ず単位換算を噛ませるか、`ISldWorks::FormatDouble`等を活用して規格値と合わせること。
  • 例外処理: `GetThickness`が失敗するケース(フィーチャが抑制されている、あるいは無効な状態)を想定し、エラーハンドリングを怠らないこと。

3. 実践:規格検証ツール(プロダクションコード)

以下は、アクティブなパーツから板金パラメータを抽出し、社内規定値と比較する堅牢な実装サンプルだ。

Option Explicit

‘ 規格定義(定数化して一元管理せよ)
Private Const TARGET_THICKNESS As Double = 0.0016 ‘ 1.6mm
Private Const TOLERANCE As Double = 0.00001 ‘ 誤差許容範囲

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 Or swModel.GetType <> swDocPART Then
MsgBox “パーツファイルを開いてください。”, vbCritical
Exit Sub
End If

‘ フィーチャツリーからSheetMetalFolderを探索
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “SheetMetal” Then
Set swSheetMetal = swFeat.GetDefinition

‘ メモリ安全のために定義をロード
If swSheetMetal.AccessSelections(swModel, Nothing) Then

‘ 検証ロジック
Dim currentThickness As Double
currentThickness = swSheetMetal.Thickness

If Abs(currentThickness – TARGET_THICKNESS) > TOLERANCE Then
Debug.Print “警告: 厚みが規格外です。現在の厚み: ” & (currentThickness 1000) & “mm”
‘ ここで色を変える、あるいはログを吐き出す処理を実装する
End If

‘ 変更を加えていないためReleaseして閉じる
swSheetMetal.ReleaseSelectionAccess
End If
End If
Set swFeat = swFeat.GetNextFeature
Loop

MsgBox “検証完了:ログを確認してください。”
End Sub

4. 運用のためのアーキテクチャ設計

このコードを「ツール」として完成させるために、以下の拡張を推奨する。

1. データベース連携: `TARGET_THICKNESS`をハードコーディングせず、JSONや設定ファイル、あるいは社内のPDM上の設定ファイルから読み込むようにせよ。これにより、設計規格変更時にコードを再コンパイルする必要がなくなる。
2. 自動検知機能: ユーザーがマクロを手動実行するのではなく、`PartDoc`の`FileSavePostNotify`イベントをフックし、保存時に強制的にチェックを走らせる設計にすれば、ヒューマンエラーは限りなくゼロに近づく。
3. UI/UX: 検証に失敗した場合、単にポップアップを出すのではなく、該当のフィーチャを色付け(`SetSelectionColor`)して強調表示させることが、設計者のストレスを軽減する。

最後に:エンジニアとしての誇りを持て

「動けばいい」コードは、半年後に負債となる。
今回示したコードは、オブジェクトのライフサイクルを意識し、メモリを適切に解放する「プロの作法」に基づいている。これをベースに、貴殿の現場のルールを組み込んでほしい。

自動化の本質は、ルーチンワークを消し去ることではない。「ミスが発生しえないシステムを構築し、設計者が本質的な創造性に集中できる環境を作ること」にある。

次回の記事では、このデータを基にした「図面自動作成の自動バリデーション」について深掘りしよう。健闘を祈る。

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