SolidWorks APIの真髄:地獄の再描画を封印し、フィーチャ生成を「秒速」へ昇華させる技術
SolidWorksのマクロを組んでいて、こんな経験はないだろうか。
「100個の穴を開けるだけのマクロなのに、実行中に画面がチカチカと点滅し、完了までカップ麺が伸びるほど時間がかかる」
もしあなたがそう感じているなら、それはSolidWorks APIを「操作」しているのではなく、「振り回されている」証拠だ。
世界最高峰の自動化を志すなら、まずは「グラフィックス更新の制御」と「ビュー管理の哲学」を叩き込まねばならない。本記事では、プロフェッショナルな現場で採用される、実行速度を劇的に改善するコーディングの極意を伝授する。
—
1. なぜ「画面の更新」がパフォーマンスを殺すのか
SolidWorks APIが重い最大の要因は、実はAPIの処理速度そのものではない。「フィーチャを一つ生成するたびに、裏側で走る画面の再描画(リペイント)とズーム計算」である。
デフォルトの設定では、APIがフィーチャを追加するたびにSolidWorksは「ユーザーに見せるための描画」を試みる。これに費やされるCPUリソースは膨大だ。自動化の目的は「ユーザーが納得する過程を見せること」ではなく「一瞬で結果を出すこと」にある。
これを解決するための鍵が `ModelDocExtension.EnableGraphicsUpdate` と `ModelDoc2.ViewZoomtofit2` の正しい制御だ。
—
2. 禁断のパフォーマンス最適化:プロダクションコード
以下に、実務レベルで必ず実装すべき「処理の封印・解凍」のテンプレートを提示する。これをフレームワークとして活用してほしい。
Option Explicit
‘ SolidWorks APIを利用した高速化テンプレート
Public Sub ExecuteHighSpeedFeatureGeneration()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swExt = swModel.Extension
‘ 1. 【最重要】画面更新を凍結する
‘ これにより、フィーチャ生成中の無駄なリペイントを完全に遮断する
swExt.EnableGraphicsUpdate = False
‘ 2. 処理開始前の状態を保存(必要であれば)
‘ 3. メイン処理(フィーチャ生成など)
Call GenerateComplexFeatures(swModel)
‘ 4. 処理完了後の後処理
‘ 再描画を許可する前に、一度全体を表示させるのが「堅牢な設計」
swModel.ViewZoomtofit2
‘ 5. 【最重要】グラフィックス更新を再開する
swExt.EnableGraphicsUpdate = True
‘ 6. 明示的に画面を更新し、最終結果を反映させる
swModel.GraphicsRedraw2
End Sub
Private Sub GenerateComplexFeatures(swModel As SldWorks.ModelDoc2)
‘ ここに重いフィーチャ生成処理を記述
‘ 例: ループ処理での押し出し、カットなど
End Sub
このコードの「設計思想」
- EnableGraphicsUpdateのトグル: 処理の開始と終了で確実にフラグを切り替える必要がある。もし処理中にエラーが発生して中断されると、画面がフリーズしたままになるリスクがある。実務では必ず `On Error GoTo` でエラーハンドラを作成し、エラー時にも `EnableGraphicsUpdate = True` が実行されるように設計すること。
- ViewZoomtofit2のタイミング: これをループ内で呼ぶのは「自殺行為」だ。必ずすべてのフィーチャ生成が終わった「後」に一度だけ実行する。
—
3. 現場で生き残るための「鉄則」
データベース連携の罠
CSVやデータベースから寸法データを読み込み、フィーチャを生成する場合、「読み込み」と「生成」を完全に分離せよ。
APIを叩きながらデータベースにクエリを投げるのは、通信遅延とAPI負荷の二重苦になる。配列(Array)やコレクションに全てのデータを格納してから、一気にフィーチャ生成のループを回す。これが鉄則だ。
ジオメトリ再構築(Rebuild)の抑制
`swModel.ForceRebuild3` をループ内で叩いていないか?
複雑なアセンブリであれば、フィーチャの追加ごとに再構築するのは非効率極まりない。可能な限りフィーチャをまとめてから、最後に一度だけリビルドを実行する設計を目指すべきだ。
—
4. 総括:エンジニアの誇りとして
「動けばいい」コードは素人でも書ける。しかし、数千のフィーチャを生成する際に、画面を一切揺らさず、バックグラウンドで静かに、かつ弾丸のような速度で完遂させるコードこそが、プロの技術だ。
今回紹介した `EnableGraphicsUpdate` の制御は、単なる小手先のテクニックではない。「システムのリソースをいかに効率的に支配するか」というアーキテクトの思想そのものである。
次にマクロを書くときは、画面を「見せない」勇気を持ってほしい。その先にあるのは、かつてないほどの快適な自動化の世界だ。
—
追伸:もしこのコードを適用してもなお重い場合は、フィーチャの作成順序や、不要な干渉チェックの有効化を見直せ。APIの仕様だけでなく、SolidWorksの「計算の論理」を理解することが、真の解決への近道となる。
