【入門編】【押し出しボス徹底攻略】FeatureManager.FeatureExtrusion3メソッドのパラメータ解析と、ドラフト角度付きブラインド押し出しの実装 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksマクロの世界へようこそ。
「マクロの記録」ボタンを押して図形を作り、生成されたコードを見て「なんじゃこりゃ…呪文のようだ」と絶望した経験はありませんか?

特に、3次元CADの命とも言える「押し出しフィーチャ」の生成メソッド、その最たるものが今回攻略する `FeatureExtrusion3` です。引数がずらりと並び、一見すると近寄りがたい雰囲気を醸し出していますが、ここを完全に自分の手足として使いこなせるようになると、あなたがつくる自動化ツールの戦闘力は文字通り跳ね上がります。

今回は、実務で死ぬほど使う「ドラフト(抜き勾配)付きのブラインド押し出し(指定値押し出し)」をテーマに、このメソッドの全パラメータを丸裸にしていきましょう。ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!

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

まず敵を知るために、SolidWorksの「マクロの記録」が吐き出すコードの闇を覗いてみましょう。

マクロの記録をしながら、適当なスケッチを押し出して勾配をつけたとします。すると、VBAエディタには以下のようなコードが生成されます(※イメージです)。

‘ マクロの記録が生成するコードの断片(一例)
Dim myFeature As Object
Set myFeature = swModel.FeatureManager.FeatureExtrusion3( _
True, False, False, 0, 0, 0.05, 0.01, _
False, False, False, False, 1.74532925199433E-02, _
1.74532925199433E-02, False, False, False, False, _
True, True, True, 0, 0, False)

……意味不明ですよね。
`0.05` は高さなのだろうと推測できますが、`1.745329…` って何?円周率?呪呪文?
これでは、パラメータの数値を動的に変更して「高さや勾配角度をユーザー入力値に変える」といった実務的なプログラムが組めません。

この `FeatureExtrusion3` というメソッドの引数を一つずつ分解し、完全なコントロールを手に入れましょう。

2. FeatureExtrusion3 メソッドの完全解剖

`FeatureExtrusion3` は、FeatureManagerが持つ「押し出しフィーチャ作成」のための強力な関数です。引数の数はなんと22個もあります。

すべてを暗記する必要はありません。実務で「何を指定すべきか」のパターンを把握すれば怖くありません。主要な引数をピックアップして解説します。

| 引数名(位置) | 型 | 解説(魂の解説) |
| :— | :— | :— |
| Sd (第1引数) | Boolean | 深さ方向(方向1)の反転。`True` にすると、スケッチ面から見て逆方向に押し出します。 |
| Flip (第2引数) | Boolean | キャップ(端面)の有無。通常は `False`。 |
| Dir (第3引数) | Boolean | ドラフト(勾配)の方向。外側に広げるか、内側にすぼめるか。`True` で外側、`False` で内側。 |
| T1 (第4引数) | Long | 終了条件(方向1)。`0` = ブラインド(指定値), `1` = 貫通, `2` = 頂点まで, etc. |
| T2 (第5引数) | Long | 終了条件(方向2)。両側押し出しをしないなら `0` でOK。 |
| D1 (第6引数) | Double | 方向1の押し出し深さ(メートル単位)。例:50mmなら `0.05`。 |
| D2 (第7引数) | Double | 方向2の押し出し深さ。 |
| DRAFT_AG1 (第12引数) | Double | 方向1のドラフト角度※ここが最大の罠!角度ではなく「ラジアン」で指定します。 |
| DRAFT_AG2 (第13引数) | Double | 方向2のドラフト角度(ラジアン)。 |

⚠️ 最大の注意点:角度は「ラジアン」で渡せ!

実務で一番ハマるのが 「角度(Degree)」ではなく「ラジアン(Radian)」で渡す必要がある点 です。
例えば、「抜き勾配 5度」をつけたい場合、`5` とそのままコードに書いてはいけません。
VBAにはラジアン変換関数がないため、ご自身で計算する必要があります。
> 変換式:`ラジアン = 角度 (3.14159265358979 / 180)`
> または `DegToRad = angle Atn(1) / 45` のような自作関数を用意します。

3. 実践!ドラフト付きブラインド押し出しを自動化するVBAコード

それでは、実際に動くコードを見ていきましょう。
このコードは、あらかじめ平面上に描かれた「四角形のスケッチ」を選択している状態からスタートし、それを高さ 50mm、抜き勾配 3度(内側へすぼまる形)で立体化するマクロです。

Sub CreateDraftExtrusion()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.Feature

‘ 1. SolidWorksアプリケーションの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開いていない、またはパーツではない場合は離脱
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical
Exit Sub
End If
If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイルでのみ実行可能です。”, vbCritical
Exit Sub
End If

Set swFeatMgr = swModel.FeatureManager

‘ — パラメータの設定 —
Dim depth As Double
Dim draftAngleDeg As Double
Dim draftAngleRad As Double

depth = 0.05 ‘ 押し出し深さ:50mm (0.05m)
draftAngleDeg = 3# ‘ 抜き勾配:3度

‘ 3度をラジアンに変換 ( 3 π / 180 )
draftAngleRad = draftAngleDeg (3.14159265358979 / 180#)

‘ 2. FeatureExtrusion3 の実行
‘ 引数が非常に多いため、改行文字(_)を使って見やすく整理しています
Set swFeat = swFeatMgr.FeatureExtrusion3( _
True, _ ‘ Sd: 逆方向に押し出し (True)
False, _ ‘ Flip: キャップなし
False, _ ‘ Dir: ドラフト方向 (False = 内側へすぼまる)
0, _ ‘ T1: 終了条件 (0 = ブラインド / 指定値)
0, _ ‘ T2: 終了条件2 (未使用)
depth, _ ‘ D1: 押し出し深さ (50mm)
0#, _ ‘ D2: 押し出し深さ2 (未使用)
False, _ ‘ DRAFT_OUTWARD1: ドラフトを外向きにするか (False = 内向き)
False, _ ‘ DRAFT_OUTWARD2: ドラフトを外向きにするか2 (未使用)
False, _ ‘ DispFrom: オフセット元 (False = スケッチ平面から)
False, _ ‘ OffsetReverse: オフセット方向反転
draftAngleRad, _ ‘ DRAFT_AG1: 方向1のドラフト角度 (ラジアン)
draftAngleRad, _ ‘ DRAFT_AG2: 方向2のドラフト角度 (未使用)
False, _ ‘ TranslateSurface: サーフェス移動
False, _ ‘ ジオメトリパターン
False, _ ‘ 薄壁フィーチャ: 方向1
False, _ ‘ 薄壁フィーチャ: 方向2
0, _ ‘ 薄壁フィーチャのタイプ
0#, _ ‘ 薄壁の厚み1
0#, _ ‘ 薄壁の厚み2
False, _ ‘ オートフィレット
False) ‘ マージ結果 (True = 既存ボディと結合)

‘ 3. 成否の判定
If Not swFeat Is Nothing Then
MsgBox “ブラインド押し出し(抜き勾配付き)の生成に成功しました!”, vbInformation
Else
MsgBox “生成に失敗しました。スケッチが選択されているか確認してください。”, vbExclamation
End If

End Sub

4. 現場でありがちなエラーと回避の知恵

このコードを実務で運用する際、エンジニアが必ずハマる「罠」がいくつかあります。先輩からのアドバイスとして受け取ってください。

トラブルシューティング1:「なぜかエラー 91 (オブジェクト変数または With ブロック変数が設定されていません) が出る」

  • 原因: スケッチが選択されていない状態でマクロを実行しています。
  • 対策: `FeatureExtrusion3` を実行する前に、対象となるスケッチ(あるいはスケッチの輪郭)が確実に選択されている(Selected)状態を作るか、コード内で事前にスケッチエンティティを指定して選択状態にする処理を挟む必要があります。

トラブルシューティング2:「勾配の向きが逆になってしまい、エラーで弾かれる」

  • 原因: 形状や抜き勾配の角度(プラス/マイナス、内側/外側)の組み合わせにより、ソリッドが自ら交差してしまう「ゼロ厚みエラー」が発生しています。
  • 対策: 特に金型部品などで抜き勾配をつける際、「どちら側に抜けるテーパーなのか(Dir / DRAFT_OUTWARD1)」を正確に制御する必要があります。まずは手動でマクロの記録をとり、意図した向きの真のブール値の組み合わせを逆算するのが確実です。

おわりに

お疲れ様でした!今回は `FeatureExtrusion3` という、SolidWorks APIの中でも一筋縄ではいかないボス級のメソッドを攻略しました。

「マクロの記録」という乳母車から卒業し、自分で引数を意のままに操り、ラジアン計算を挟み込んで寸法や勾配を動的にコントロールする――。これこそが、業務自動化エンジニアとしての第一歩です。

ここをクリアしたあなたなら、もう恐れるものはありません。日々の退屈なモデリング作業をプログラムに叩き落とし、より創造的な設計業務に時間を使い倒してください。それでは、次回の極限の知見でお会いしましょう!

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