SolidWorks APIの真髄:大量パターン化を「爆速」で処理する究極のチューニング術
こんにちは。SOLIDWORKS自動化の深淵へようこそ。
「マクロの記録」から卒業し、自力でコードを書こうとするあなた。素晴らしい挑戦です。しかし、いざ数千個のフィーチャを生成しようとすると、SOLIDWORKSが重くなり、挙動が極端に遅くなる……そんな壁にぶつかっていませんか?
今日は、`FeatureLinearPattern2` を使いこなし、「描画負荷を極限まで減らして、処理時間を秒単位で短縮する」ための極意を伝授します。
—
1. なぜ、あなたのマクロは「重い」のか?
初学者が陥る最大の罠。それは、「APIが呼ばれるたびに、GUIが律儀に画面を更新していること」です。
SOLIDWORKSは高性能な3D CADですが、APIから「このフィーチャを作れ!」と命令が飛ぶたびに、画面上のグラフィックスを再描画し、フィーチャーツリーを再構築しようとします。10回なら無視できますが、100回、1000回と重なれば、PCは悲鳴を上げます。
これを防ぐための「黄金の鉄則」がこれです。
> 「更新を止め、一気に書き込み、最後にドカンと再描画する」
—
2. 爆速化のための「3つの秘伝」
① `FeatureManagerSuppressEditMode` を活用せよ
処理中は再構築を一時停止させます。これにより、SOLIDWORKSは計算リソースを「描画」から「計算」へ全振りします。
② `ModelDocExtension.Rebuild` の回数を最小限に
ループの中で何度も再構築(Rebuild)を呼ぶのは厳禁です。全てのフィーチャを生成し終えてから、一括で再構築するのがプロの作法です。
③ `FeatureLinearPattern2` の引数を正しく理解する
この関数は強力ですが、引数が多いのが難点です。一つでも間違えるとエラーになります。特に「フィーチャの選択」と「方向指定」は慎重に。
—
3. 実践!高速パターン生成のサンプルコード
それでは、実際に動作するコードを見ていきましょう。このコードは、あらかじめ作成した「カット押し出し」などを直線状にパターン化する際のテンプレートです。
Sub FastLinearPattern()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager
‘ 1. 処理速度向上のための最適化
‘ 画面更新を停止させることで、描画負荷を排除
swModel.FeatureManager.EnableFeatureTree = False
swModel.EditSuppress2 ‘ 処理中は再構築をオフにする
‘ 直線パターン化の引数定義
‘ FeatureLinearPattern2(NoOfInstances1, Spacing1, NoOfInstances2, Spacing2, …)
‘ ここではX方向に5個、間隔10mmで配置する例
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.FeatureLinearPattern2( _
5, 0.01, _ ‘ 1つ目の方向:個数, 間隔
1, 0.01, _ ‘ 2つ目の方向:個数, 間隔
False, False, _ ‘ パターン方向の反転設定
Nothing, _ ‘ パターン方向の参照(Nothingならエッジ選択)
False, _ ‘ ジオメトリパターン
False) ‘ インスタンスのスキップ
‘ 2. 処理終了後に更新を許可して一気に再構築
swModel.FeatureManager.EnableFeatureTree = True
swModel.EditUnsuppress2
swModel.ForceRebuild3 False ‘ 一括再構築で最新状態へ
MsgBox “パターン生成完了!”
End Sub
—
4. 陥りやすいエラーと回避策
「引数が多すぎてエラーになる」
`FeatureLinearPattern2` は非常に引数が多いメソッドです。特に「方向指定」に使うエッジや面が正しく選択されていないと失敗します。
コツ: 実行前に、まずは手動でパターン化を試し、必要な選択要素が何なのかを明確にしましょう。
「フィーチャが見つからない」
APIで操作するフィーチャには、あらかじめ `Name` を設定しておくか、生成直後にオブジェクトを取得しておくのが安全です。`swFeatMgr.SelectByID2` で名前を指定して選択してからパターンをかけると、エラー率が劇的に下がります。
—
最後に:エンジニアとしての心構え
SOLIDWORKS APIを扱うことは、CADの内部構造と「対話」することです。
最初から完璧なコードは書けなくて当然です。しかし、「どうすれば描画負荷を減らせるか?」「どうすれば最短ルートで計算を終わらせられるか?」という視点を持つだけで、あなたの書くマクロは、単なる自動化ツールから、現場を救う「最強のエンジン」へと進化します。
このコードをベースに、ぜひあなたの業務に合わせてカスタマイズしてみてください。
もし壁にぶつかったら、それはあなたがプロのエンジニアに近づいている証拠です。またいつでも聞きに来てくださいね。応援しています!
