【実務・中級編】【ミラー・パターン】FeatureManager.FeatureLinearPattern2で大量のフィーチャを高速複製するコツ – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks API極致】FeatureLinearPattern2を制し、数千のフィーチャを秒速で捌く最適化の流儀

SolidWorksの自動化において、「パターン機能」は最もメモリを食い、最もCPUを浪費する処理の一つだ。特に`FeatureLinearPattern2`を安易なループ内で連発しているエンジニアは、今すぐそのコードを破棄すべきだ。

画面がフリーズし、マウスカーソルが砂時計に変わるのを眺めている時間は、エンジニアにとって最も無益な時間である。今日は、SolidWorks APIの深淵を知る者だけが辿り着く、「パフォーマンスを犠牲にしないパターン操作の極意」を伝授する。

1. なぜ「画面更新」を止めるだけでは不十分なのか

多くの初学者は `Application.Visible = False` や `ModelDoc2.GraphicsRedraw2` の制御だけで満足する。だが、本質的なボトルネックはそこではない。

真の敵は「再構築(Rebuild)のオーバーヘッド」だ。
フィーチャを一つ作成するたびにSolidWorksはジオメトリの整合性をチェックし、ツリーを再計算する。パターン化において、この「都度の再計算」を放置することは、数珠繋ぎの爆弾を抱えるようなものだ。

パフォーマンス向上のための3原則

1. サスペンド(一時停止)の徹底: 処理開始前に `ModelDoc2.FeatureManager.EnableFeatureTree = False` を行い、ツリー更新を止める。
2. 選択セットの最適化: パターンの対象フィーチャをいちいち選択し直すな。`Feature` オブジェクトを直接操作せよ。
3. 再構築は一度だけ: `ModelDoc2.EditRebuild3` をループの外に配置し、全フィーチャの生成後に一括して計算させる。

2. 実務直結:堅牢なフィーチャパターン生成コード

以下のコードは、単に動くだけのコードではない。エラーハンドリングとメモリ効率を考慮した、プロダクション(現場)環境で即戦力となる実装だ。

Option Explicit

‘ 伝説的なチーフアーキテクトによる、高速パターン生成関数
Public Sub CreateOptimizedLinearPattern(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2)
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager

‘ 1. ツリー更新を停止し、再構築負荷を完全に遮断する
swModel.FeatureManager.EnableFeatureTree = False
swModel.EditSuppress2 = True ‘ 再構築を抑制

‘ 2. パターン設定(実務では外部データや構造体からパラメータを渡すこと)
Dim numInstances As Long: numInstances = 100
Dim spacing As Double: spacing = 0.01 ‘ 10mm

‘ 3. パターン対象のフィーチャを明示的に取得(選択の手間を省く)
‘ ※事前に定義したフィーチャ名からオブジェクトを取得するのが最も堅牢
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureByName(“Boss-Extrude1”)

If swFeat Is Nothing Then Exit Sub

‘ 4. パターン実行
‘ 第1〜第4引数は方向、距離、個数。最後のFalseはジオメトリのみパターン化のフラグ
Dim swPatternFeat As SldWorks.Feature
Set swPatternFeat = swFeatMgr.FeatureLinearPattern2( _
numInstances, spacing, _
numInstances, spacing, _
False, False, _
“Edge<1>“, “”, _
False, False, False)

‘ 5. 後処理:再構築の許可
swModel.FeatureManager.EnableFeatureTree = True
swModel.EditRebuild3

Debug.Print “パターン生成完了: ” & swPatternFeat.Name
End Sub

3. 現場で「バグらせない」ための設計思想

コードを書く際、以下の事実に目を背けてはいけない。

データベース連携の注意点

CSVやExcelからパラメータを読み込む際、「単位系」には細心の注意を払え。 SolidWorks内部は常にメートル法(SI)で動作している。Excel上の「mm」をそのまま渡すと、計算結果が1000倍(あるいは1/1000)の誤差を生む。必ず `swApp.GetUserPreferenceDoubleValue` 等で環境設定を吸い上げ、変換ロジックを噛ませるのがプロの作法だ。

保守性のための「名前」管理

`”Boss-Extrude1″` のようにフィーチャ名をハードコードするのは、修正が入った瞬間に崩壊する脆弱な設計だ。

  • 推奨: フィーチャを作成した直後に `Feature.Name` を取得し、それを通し番号や管理IDと紐付けて辞書オブジェクト(`Scripting.Dictionary`)に格納せよ。これにより、パターン化の対象を動的に決定できる。

エラー処理の哲学

`On Error Resume Next` を多用するな。あれは怠慢の象徴だ。
APIの戻り値(`Nothing` かどうか)を必ず確認し、フィーチャの生成が失敗した場合には `Err.Raise` を使ってログファイルに詳細を吐き出せ。何が起きたか不明なまま止まるツールは、現場にとってただの「ノイズ」である。

最後に:エンジニアへ贈る言葉

SolidWorksの自動化は、単なる「操作の記録」ではない。「3D CADという巨大な演算エンジンの挙動を制御する」という高度なエンジニアリングだ。

今回紹介した手法を適用すれば、数秒間凍りついていた画面が嘘のようにスムーズに動くはずだ。この「軽快なレスポンス」こそが、自動化ツールを「使われるツール」にするための絶対条件である。

さあ、退屈な手作業をコードに置き換え、よりクリエイティブな設計業務へ時間を割く準備をしよう。健闘を祈る。

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