【入門編】【フィーチャー操作の自動化】ExtrudeBoss2を使ったボス・押し出しフィーチャーのプログラム制御 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録ボタンを押して「生成されたコードを見たけれど、なんだか呪文のようで意味がわからない…」と途方に暮れていませんか?

大丈夫、安心してください。今日は、SolidWorks VBAの醍醐味である「3D形状の動的生成」、その中でも最も基本にして最重要である`ExtrudeBoss2`(ボス・押し出しフィーチャー)の制御を、私と一緒に完全マスターしましょう。

ここをクリアすれば、あなたも単なる「マクロの記録係」から、設計プロセスを自在に操る「オートメーション・エンジニア」への第一歩を踏み出せます。さあ、一緒に扉を開けましょう!

1. なぜ「マクロの記録」だけでは実務で使えないのか?

SolidWorksのマクロの記録機能は素晴らしいですが、出力されるコードは「その時クリックした絶対座標」や「内部的なID(IDやセレクションのコンテキスト)」に依存しています。

例えば、モデルの寸法が変わったり、参照面が少しでもズレたりすると、記録されたマクロは途端にエラーを吐いて止まってしまいます。
私たちが目指すのは、「人間の設計意図(ロジック)をプログラムに翻訳し、どんな状況でも意図通りに形状をスポーンさせる」こと。そのための最強の武器が、APIオブジェクトモデルを直接叩くVBAコードです。

2. 押し出しフィーチャー生成の全体像とオブジェクトの流儀

SolidWorks APIでボス・押し出しを行うには、以下の「黄金のステップ」を踏みます。

1. ドキュメントの取得: 今操作しているモデル(`ModelDoc2`)を掴む。
2. スケッチの準備: 押し出しのベースとなる2Dスケッチがあらかじめ存在している状態を作る(今回は既存のスケッチ面と輪郭を利用する前提で進めます)。
3. 面・スケッチの選択: 「どのスケッチを使って押し出すか」をプログラム上で明確に指し示す(`Extension.SelectByID2`)。
4. パラメータの実行: `FeatureManager.FeatureExtrusion2`(または最新の `ExtrudeBoss2` に相当するメソッド群)を叩き、押し出し距離やドラフト角度を命令する。

特に3番目の「選択(Selection)」は、SolidWorks VBAにおいて最もエラーが起きやすく、かつ最も重要な作法です。ここを制することが、バグらないマクロを作る最大の秘訣です。

3. 実践! `ExtrudeBoss2` を使ったボス・押し出しマクロ

それでは、実務でそのまま使えるサンプルコードをお見せします。
今回は、あらかじめ用意されたスケッチを選択し、深さ50mmのボスを生成するコードです。VBAエディタ(Alt + F11)を開き、標準モジュールに貼り付けてみてください。

Option Explicit

Sub CreateExtrudeBossSample()

‘ — 1. オブジェクト変数の宣言 —
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim boolstatus As Boolean

‘ — パラメータ設定 —
Dim p_Depth As Double
p_Depth = 0.05 ‘ 押し出し深さ(単位:メートル) -> 50mmの意味です!

‘ — 2. アプリケーションとモデルの取得 —
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ モデルが開いていない場合のガード節
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。部品ファイルを開いて実行してください。”, vbCritical, “エラー”
Exit Sub
VB_Exit:
End If

‘ — 3. スケッチ(または面)の選択 —
‘ ※注意: あらかじめモデル上に「Sketch1」という名前のスケッチが存在している前提です。
‘ ClearSelection2(True) で既存の選択をクリアし、確実にターゲットだけを選択状態にします。
swModel.ClearSelection2 True

boolstatus = swModel.Extension.SelectByID2(“Sketch1”, “SKETCH”, 0, 0, 0, False, 0, Nothing, 0)

If Not boolstatus Then
MsgBox “対象のスケッチ ‘Sketch1’ が見つかりませんでした。”, vbExclamation, “警告”
Exit Sub
End If

‘ — 4. フィーチャーマネージャーの取得と押し出し実行 —
Set swFeatMgr = swModel.FeatureManager

‘ 【超重要】FeatureExtrusion2 の引数パラメータの解説
‘ 引数が非常に多いため、一つ一つの意味を理解することがプログラミングの醍醐味です。

‘ 構文のイメージ:
‘ FeatureExtrusion2 (
‘ ByVal 貫通・方向反転などのフラグ,
‘ ByVal 終了条件(1:Blind, 2:ThroughAllなど),
‘ ByVal ドラフト有効化,
‘ ByVal 逆方向ドラフト,
‘ ByVal 自動切断,
‘ ByVal 深度1(メートル),
‘ ByVal 深度2(メートル),
‘ ByVal ドラフト角度1,
‘ ByVal ドラフト角度2,
‘ ByVal 終了条件反転,
‘ ByVal オフセット反転1, ByVal オフセット反転2,
‘ ByVal 薄板フィーチャー有効化,
‘ ByVal 薄板タイプ,
‘ ByVal 薄板厚さ1, ByVal 薄板厚さ2,
‘ ByVal 薄板キャップ反転, ByVal 薄板エンドキャップ
‘ )

Dim myFeature As SldWorks.Feature

‘ ここでは「盲目(Blind)」で指定した深度(p_Depth)だけ押し出す最もシンプルな設定を行います。
Set myFeature = swFeatMgr.FeatureExtrusion2( _
True, _ ‘ 0:方向1 順方向 / True:方向反転などの制御フラグ文脈に依存
1, _ ‘ 終端条件 (1 = swEndCondBlind / 盲目)
False, _ ‘ フリップ(方向反転)
False, _ ‘ ドラフト有効
False, _ ‘ 逆方向ドラフト
p_Depth, _ ‘ 押し出し深さ 深度1 (メートル単位!ここ重要!)
0, _ ‘ 深度2(両側押し出しの場合に使用)
0, _ ‘ ドラフト角度1
0, _ ‘ ドラフト角度2
False, _ ‘ 終了条件のオフセット反転
False, _ ‘ 最初のオフセット方向
False, _ ‘ 2番目のオフセット方向
False, _ ‘ 薄板フィーチャー (Thin Feature) 有効化
False, _ ‘ 薄板のタイプ
0, 0, _ ‘ 薄板の厚さ
False, False, _ ‘ 薄板キャップ関連
False, False, False _
)

‘ — 5. 処理結果の判定と画面更新 —
If Not myFeature Is Nothing Then
MsgBox “ボス・押し出しフィーチャーの生成に成功しました!”, vbInformation, “完了”
Else
MsgBox “フィーチャーの生成に失敗しました。スケッチの閉じたループを確認してください。”, vbCritical, “エラー”
End If

‘ 画面を最新の状態に再描画
swModel.WindowRedraw

End Sub

4. ここで絶対に覚えておくべき「3つの罠」とエンジニアの知見

初心者がこのコードを実務で使おうとしたとき、必ずと言っていいほどハマるポイントが3つあります。先輩エンジニアからのアドバイスとして受け取ってください。

罠1:単位系は「メートル(m)」であることの呪縛

SolidWorksのAPI内部では、長さの単位はすべてメートル(m)で処理されます。
私たちが普段図面やUI上で見ている「50mm」は、APIに渡すときは必ず `0.05` に変換しなければなりません。これを忘れて `50` と指定すると、突如としてバケモノのように巨大な(50メートルもある)ブロックが生成され、SolidWorksがフリーズしたような錯覚に陥ります。必ず単位の換算を意識してください。

罠2:選択(Selection)は水物である

`SelectByID2` で名前を指定して選択していますが、もしモデルツリーの名前が変更されていたり、コンテキスト(どの部品のなかのスケッチか)が曖昧だったりすると、選択が外れてエラーになります。
確実な自動化を目指すなら、スケッチ作成直後にオブジェクト変数として直接キャプチャし、セレクションをバイパスしてメソッドに渡す設計(アタッチメントパターンの応用)が理想です。

罠3:薄板(Thin Feature)やドラフトの初期値

`FeatureExtrusion2` は引数が非常に多いため、一つでも引数の型や順番がズレると、VBAのコンパイルエラーまたは実行時エラー(型が一致しません)を引き起こします。
マクロの記録で似たような操作を一度行い、生成されたコードの引数の並びをコピーしてベースにするのが、実務における最も確実な近道です。

まとめ:自動化の主導権を握ろう

お疲れ様でした!今回は `ExtrudeBoss2`(コード上では `FeatureExtrusion2`)を用いたボス・押し出しのプログラム制御について解説しました。

最初は引数の多さに圧倒されたかもしれませんが、一度仕組みを理解してしまえば、エクセル(Excel VBA)から読み込んだ寸法リストを元に、何百通りものバリエーションを持つ3Dモデルを数秒で自動生成するような「夢のようなシステム」を構築できるようになります。

ここをクリアしたあなたなら、もうSolidWorks VBAの基礎はバッチリです。
ぜひ、ご自身の環境でコードを動かし、自分の手で3Dをコントロールする快感味わってみてください。それでは、次回の高度な自動化の世界でお会いしましょう!

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