【テクニカル・上級編】【押し出しボス徹底攻略】FeatureManager.FeatureExtrusion3の「オフセット(Offset From Surface)」パラメータを活用した実務的な端面処理 – SolidWorks VBA解析バイブル

スポンサーリンク

意図の幾何学:FeatureExtrusion3における「オフセット」の完全掌握

SolidWorks VBAを用いた自動化の実装において、真のシニアエンジニアと、単なるマクロ記録者の境界線はどこにあるか。それは「設計意図(Design Intent)をいかにプログラムで表現するか」という点に集約される。

単純な「ブラインド(数値指定)」による押し出しは、一見簡便だが、先行するフィーチャの変更に対して極めて脆弱だ。我々プロフェッショナルが追求すべきは、変更に強く、計算幾何学的に正しいモデルの生成である。

今回は、`FeatureManager.FeatureExtrusion3` メソッドの中でも特に実務上の重要度が高い「オフセット(Offset From Surface)」に焦点を当てる。指定した面から一定の距離を保って停止するこの手法を、APIの深層から解剖していく。

—

1. FeatureExtrusion3 の引数迷宮を解く

`FeatureExtrusion3` は25個以上もの引数を持つ巨大なメソッドだ。リファレンスをなぞるだけでは、このパラメータの森で迷うことになる。オフセット押し出しを実現するために、我々が制御すべきキー・パラメータを以下に整理する。

  • T1 (End Condition): ここには `swEndCondOffsetFromSurface` (整数値: 5) を指定する。
  • D1 (Depth): オフセット距離そのものを指定する(単位はメートル)。
  • D3 (Offset Reverse): 参照面に対して手前にオフセットするか、奥にオフセットするかを制御する Boolean。
  • TranslateSurface: ここが重要だ。参照面の形状を「翻訳(オフセット)」して端面を作るのか、あるいは単に面までの距離を計算するのかを決定する。

2. 実践的コード:オフセット端面によるボス生成

以下のコードは、単に押し出しを行うだけのものではない。エラーハンドリング、UI更新の抑制、そしてCOMオブジェクトの明示的なライフサイクル管理を組み込んだ、プロダクション環境に耐えうる設計としている。

‘
‘ Module: ModGeometryEngine
‘ Description: 指定した面からオフセットした押し出しボスを生成する
‘
Option Explicit

‘ Windows APIによる高精度タイマー(パフォーマンス計測用)
Private Declare PtrSafe Function QueryPerformanceCounter Lib “kernel32” (lpPerformanceCount As Currency) As Long
Private Declare PtrSafe Function QueryPerformanceFrequency Lib “kernel32″ (lpFrequency As Currency) As Long

”’

”’ 指定したスケッチと参照面を基に、オフセット押し出しを実行する
”’

Public Sub CreateOffsetExtrusion()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature

‘ アプリケーション接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then Exit Sub

Set swFeatMgr = swModel.FeatureManager
Set swSelMgr = swModel.SelectionManager

‘ ————————————————————————-
‘ 1. パフォーマンス最適化:描画更新の停止
‘ ————————————————————————-
swModel.ActiveView.EnableGraphicsUpdate = False

On Error GoTo ErrorHandler

‘ ————————————————————————-
‘ 2. 選択セットの構築
‘ 注意:オフセット押し出しの場合、スケッチと「参照面」の両方が選択されている必要がある。
‘ 参照面は Mark = 1 で選択するのが標準的な作法。
‘ ————————————————————————-
‘ ここでは既存の “Sketch1” と “TargetFace” という名前のエンティティを想定
‘ 実務では、あらかじめ抽出したFaceオブジェクトのSelect4メソッド等を使用する
swModel.ClearSelection2 True

‘ スケッチの選択 (Mark 0)
swModel.Extension.SelectByID2 “Sketch1”, “SKETCH”, 0, 0, 0, False, 0, Nothing, 0

‘ オフセット基準面の選択 (Mark 1: FeatureExtrusion3の仕様)
‘ ※Mark値はEnd Conditionの参照として内部的に紐付けられる
swModel.Extension.SelectByID2 “”, “FACE”, 0.05, 0.05, 0, True, 1, Nothing, 0

‘ ————————————————————————-
‘ 3. FeatureExtrusion3 の実行
‘ ————————————————————————-
‘ 引数の詳細:
‘ Sd: True (単一方向), Flip: False, Dir: False
‘ T1: 5 (swEndCondOffsetFromSurface)
‘ T2: 0 (swEndCondBlind – 反対側は使用しない)
‘ D1: 0.01 (10mmのオフセット)
‘ D2: 0 (反対側の深さ)
‘ D3: False (オフセットの反転なし)
‘ …中略…
‘ OffsetReverse1: False, TranslateSurface1: True (面形状を維持)
‘ ————————————————————————-
Set swFeat = swFeatMgr.FeatureExtrusion3( _
True, False, False, _
swEndCondOffsetFromSurface, swEndCondBlind, _
0.01, 0, False, False, False, False, _
0.01745, 0.01745, False, False, False, False, _
True, True, True, _
swStartSketchPlane, 0, False)

If swFeat Is Nothing Then
Err.Raise vbObjectError + 513, “FeatureExtrusion3”, “フィーチャの生成に失敗しました。幾何学的拘束を確認してください。”
End If

Debug.Print “Feature Created: ” & swFeat.Name

CleanUp:
‘ 描画更新の再開
swModel.ActiveView.EnableGraphicsUpdate = True
‘ COMオブジェクトの解放(VBAのスコープを抜ければ自動解放されるが、明示的な処理を推奨)
Set swFeat = Nothing
Set swFeatMgr = Nothing
Set swModel = Nothing
Exit Sub

ErrorHandler:
MsgBox “Fatal Error: ” & Err.Description, vbCritical, “チーフアーキテクトからの警告”
Resume CleanUp
End Sub

3. アーキテクトが語る「オフセット」の深層

なぜ `TranslateSurface` なのか

`FeatureExtrusion3` の第19引数、`TranslateSurface1` は、幾何学的な「平行移動」か「等距離オフセット」かを決定する。複雑な曲面を相手にする場合、このフラグ一つで生成される端面の曲率が変わり、後続のシェル処理やフィレット処理でエラーを吐く原因となる。シニアエンジニアは、意図した形状が「元の面のコピーを移動させたもの」なのか、「数学的にオフセットされたもの」なのかを常に意識しなければならない。

選択マーク(Mark)の重要性

コード内で `SelectByID2` の引数に `1` を指定している箇所がある。これは、`FeatureExtrusion3` が「どの選択オブジェクトをオフセットの参照面として認識するか」を判断するための識別子だ。これを誤ると、APIはどの面を基準にすべきか判断できず、沈黙して(Nothingを返して)終了する。

メモリとパフォーマンスの管理

数千個のパーツをバッチ処理するようなシステムにおいて、`swApp.SetUserPreferenceToggle` を使い、`swUpdateMassPropsOnSave`(保存時の質量特性更新)を一時的に `False` に設定するなどの小技は、トータルでの実行時間を劇的に短縮させる。また、大規模なアセンブリ連携を行う場合は、Windows APIを使用してワークキングセット(物理メモリ)を強制的に解放するなどのアプローチも検討に値する。

4. 結論:コードは「対話」である

SolidWorks APIを叩くことは、単に形状を生成することではない。それは、CADエンジンという巨大な幾何学計算機に対して、数学的な整合性を保ったまま「設計者の意図」を翻訳して伝える作業である。

`FeatureExtrusion3` のオフセット設定をマスターすることは、動的なパラメータ変更に耐えうる「堅牢なモデル」をプログラムで構築するための第一歩となる。本稿で示した実装パターンを、貴殿のライブラリの核として組み込んでいただければ幸いである。

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