SolidWorks VBAの神髄:`FeatureExtrusion3`で「オフセット押し出し」を完全制圧する
こんにちは。SolidWorks自動化の深淵へようこそ。
「マクロの記録」ボタンを押して生成されたコードを見て、絶望したことはありませんか? 冗長で、エラーに弱く、何より「なぜ動くのか」が分からない。今日は、そんな泥沼から抜け出し、「参照面からのオフセット押し出し」をプログラムの意志で正確に制御する方法を伝授します。
これは単なるAPIの呼び出しではありません。SolidWorksのジオメトリ演算の核心に触れる、非常に強力な技術です。
—
1. なぜ「オフセット押し出し」なのか?
単純な「ブラインド(数値指定)」押し出しでは、モデルの形状が変わった瞬間に設計意図が崩壊します。しかし、「オフセット(Offset From Surface)」を使えば、「特定の面から常に〇mm浮いた位置で止める」という、堅牢な(Robustな)モデルを構築できます。
これをAPIで叩くのが、`FeatureManager.FeatureExtrusion3` です。
—
2. 実装の極意:コードの構造を理解する
まずは、このメソッドのシグネチャ(引数の並び)を見て腰を抜かさないでください。非常に多くの引数を取りますが、重要なのは「どの引数が何に対応しているか」を見極める力です。
実践コード:オフセット押し出しのテンプレート
Sub CreateOffsetExtrusion()
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
‘ — 重要:押し出しのパラメータ設定 —
‘ 引数の意味を理解すれば、もう怖くありません
Dim bRet As Boolean
bRet = swFeatMgr.FeatureExtrusion3( _
True, ‘ 1. bFlipSideOfSketch: スケッチの外側を押し出すか?
False, ‘ 2. bDir: 方向を反転させるか?
False, ‘ 3. bDiePunch: 抜き勾配の有無
6, ‘ 4. Type: 6は「オフセット」を指す重要定数
0, ‘ 5. dThickFwd: 押し出し距離(オフセット時は無視されることが多いが0推奨)
0, ‘ 6. dThickBack: 反対方向
0, ‘ 7. dDraftAngle: 抜き勾配角度
False, ‘ 8. bDraftFwd: 抜き勾配の方向
False, ‘ 9. bDraftBack: 反対方向
False, ‘ 10. bStartOffset: スケッチ平面からオフセット開始するか
0, ‘ 11. dStartOffset: 開始オフセット値
False, ‘ 12. bReverseOffset: 反対方向へオフセット
False, ‘ 13. bReverseDir: 方向反転
False, ‘ 14. bOptimize: ジオメトリ最適化
False, ‘ 15. bPropagate: 輪郭伝播
0.005, ‘ 16. dEndOffset: 【重要】参照面からのオフセット距離(5mm)
True, ‘ 17. bReverseDir2: 2方向目の反転
False ‘ 18. bMatchSketch: スケッチとの整合性
)
‘ 成功確認
If bRet Then MsgBox “オフセット押し出しに成功しました!”
End Sub
—
3. 初学者が必ずハマる「罠」と対策
罠その1:参照面の選択忘れ
`FeatureExtrusion3`は、「どの面を基準にするか」を自動では判断してくれません。コードを実行する前に、必ず対象となる面をあらかじめ `SelectByID2` メソッドなどで選択状態にしておく必要があります。これができていないと、APIは「参照がありません」とエラーを吐くか、期待しない動作をします。
罠その2:引数の「6」の魔法
APIの引数にいきなり数字を入れるのは行儀が悪いですが、`FeatureExtrusion3`のタイプ指定(第4引数)は、VBAのライブラリ上で `swEndCondOffsetFromSurface` という定数(値は6)で定義されています。コードの可読性を上げるために、定数を使う癖をつけましょう。
—
4. プロの視点:なぜ「オフセット」が最強なのか
実務において、ブラインド押し出しは「静止した形状」しか生み出しません。しかし、オフセットを活用すると、以下のような自動化が可能になります。
- 金型設計: 固定側と可動側のクリアランスを自動計算して押し出す。
- 筐体設計: 内壁を基準面から一定の隙間(リブの高さなど)を持たせて生成する。
「モデルの変化に追従するロジック」こそが、優れた自動化エンジニアの証です。
—
最後に:一歩先のエンジニアへ
今日紹介した `FeatureExtrusion3` をマスターすれば、SolidWorks上の「押し出し」操作の9割はプログラムで制御可能です。
最初は難解に見える引数の羅列も、一つずつ「これは何のためにあるのか?」を分解すれば、ただのデータセットに過ぎません。恐れずにコードを書き換え、ブレークポイントを置いて一行ずつ実行してみてください。
あなたが書いたコードが、SolidWorksの中で「設計の意志」となって動き出す瞬間、きっとエンジニアとしての新しい扉が開かれるはずです。応援しています!
