【SolidWorks VBA】大規模パーツの生成を「爆速」にする魔法の呪文
こんにちは。現場でSolidWorksの自動化と格闘している皆さん、お疲れ様です。
マクロの記録で生成されたコードをそのまま実行して、「処理が遅いな…」「画面がチラついてイライラする」と感じたことはありませんか?実は、SolidWorksのAPIは「何も言わなければ、すべての命令を忠実に、そして律儀に描画・再構築しようとする」という性質を持っています。
10個の穴を開けるとき、SolidWorksは毎回「穴を開けたぞ!画面を更新するぞ!再計算するぞ!」を10回繰り返しているのです。これでは時間がかかるのも当然ですよね。
今回は、「処理を止めずに、裏側で一気に計算させる」という、プロのエンジニアが必ず仕込む「爆速化の極意」を伝授します。
—
1. なぜマクロは遅くなるのか?
SolidWorksのフィーチャ生成は、以下のサイクルを繰り返します。
1. フィーチャ追加
2. モデル再構築(Rebuild)
3. 画面描画(Graphics Update)
この「再構築」と「描画」こそが、処理時間を食いつぶす最大の要因です。これを制御するのが、今回紹介する2つのメソッドです。
—
2. 爆速化の二大巨頭:魔法のメソッド
以下の2つをコードの冒頭と末尾に仕込むだけで、世界が変わります。
① `ModelDoc2.EnableRebuild`
「フィーチャを追加しても、すぐに再計算するな」と命令します。これを `False` にすることで、無駄な再計算をスキップします。
② `FeatureManager.EnableFeatureUpdate`
「画面の更新を一時停止しろ」と命令します。これを `False` にすることで、完成するまで画面描画をフリーズさせ、CPUのリソースを計算だけに集中させます。
—
3. 実践コード:こう書けば速くなる!
以下は、パーツに連続してフィーチャを追加する際の標準的なテンプレートです。これをそのままコピペして、自分のコードに組み込んでみてください。
Sub FastFeatureGeneration()
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager
‘ — 爆速化の儀式:開始 —
‘ 再構築を無効化
swModel.EnableRebuild = False
‘ フィーチャ更新(描画)を無効化
swFeatMgr.EnableFeatureUpdate = False
‘ 【ここにフィーチャ追加のループ処理などを記述】
‘ 例:100個の穴を開ける、スケッチを連続生成するなど
Call CreateMyFeatures(swModel)
‘ — 爆速化の儀式:終了 —
‘ 再構築を有効化
swModel.EnableRebuild = True
‘ 描画を有効化
swFeatMgr.EnableFeatureUpdate = True
‘ 最後に1回だけ強制再構築して整合性をとる
swModel.ForceRebuild3 False
End Sub
—
4. 陥りやすい罠:ここだけは注意!
この手法は非常に強力ですが、以下の点に注意してください。
- エラー処理(On Error GoTo)を必ず入れる
もし途中でエラーが発生してプログラムが止まると、`EnableRebuild = False` のままの状態(=再構築されない状態)でSolidWorksが放置されてしまいます。必ず `On Error GoTo` を使い、エラー発生時にも設定を `True` に戻す処理を書いてください。
- 途中の座標取得は慎重に
`EnableFeatureUpdate = False` にしている間は、画面上の座標やフィーチャの状態が更新されません。「フィーチャを追加した直後の面を選択して次の処理をする」といったコードは、更新が止まっているため失敗することがあります。「計算のみ」の処理と「図形選択」の処理は分けるのがプロの流儀です。
—
まとめ:ここをクリアすれば、あなたはもう中級者
今回紹介した「再構築と描画の制御」は、自動化エンジニアにとっての「基本のキ」です。これができるだけで、マクロの実行時間は数分から数秒へと短縮されることも珍しくありません。
「コードを書く」だけでなく、「SolidWorksにどう働いてもらうのが最も効率的か」を考える。この視点を持つことが、マクロの記録から卒業する第一歩です。
まずは、今書いているマクロにこの「魔法の呪文」を書き加えてみてください。驚くほどの速さを体験できるはずですよ。
それでは、良い自動化ライフを!
