こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私です。
マクロの記録ボタンを押して操作を記録する時代は、もう終わりにしましょう。あれは所詮「過去の軌跡」をなぞるだけのもの。現場で本当に使える、美しく、かつ強靭なマクロを書くためには、APIの心臓部を直接叩く必要があります。
今回攻略するのは、パーツ作成の基本にして奥義、「押し出しボス(FeatureExtrusion3)」です。
特に、その中でも「薄板フィーチャ(Thin Feature)」のパラメータを完全に手懐け、コード一発で中空パイプや筐体のベースを生成する実践的アプローチを伝授します。
ここをクリアすれば、あなたもマクロの記録から完全に脱却し、SolidWorks VBAを意のままに操るエンジニアの仲間入りです。さあ、一緒に扉を開けましょう!
—
1. なぜ「薄板フィーチャ」をAPIで操るべきなのか?
通常、中空のパイプ形状を作ろうとすると、「外側のソリッドを押し出す」→「内部をくり抜く(シェル)」という2つのステップを踏みがちです。マクロの記録をとると、まさにこの遠回りなコードが生成されます。
しかし、プロのエンジニアはそんな無駄な処理はしません。
`FeatureExtrusion3` メソッドの「薄板フィーチャ」パラメータを適切に設定すれば、スケッチを描いて一撃で中空パイプのソリッドを生成できます。処理速度も圧倒的に速く、エラーの起きにくいクリーンなコードを書くことができるのです。
—
2. 魔法のメソッド:`FeatureExtrusion3` の正体
まずは、今回主役となるAPIのシグネチャ(引数の構造)を軽く覗いてみましょう。
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureManager.FeatureExtrusion3( _
ByVal ThinType As Long, _
ByVal Solid As Boolean, _
ByVal Flip As Boolean, _
ByVal Dir1Type As Long, _
ByVal Dir2Type As Long, _
ByVal Depth1 As Double, _
ByVal Depth2 As Double, _
ByVal D1DraftEnable As Boolean, _
ByVal D2DraftEnable As Boolean, _
ByVal D1DraftType As Long, _
ByVal D2DraftType As Long, _
ByVal D1DraftAngle As Double, _
ByVal D2DraftAngle As Double, _
ByVal OffsetReverse1 As Boolean, _
ByVal OffsetReverse2 As Boolean, _
ByVal TranslateSurface1 As Boolean, _
ByVal TranslateSurface2 As Boolean, _
ByVal Merge As Boolean, _
ByVal UseFeatScope As Boolean, _
ByVal UseAutoSelect As Boolean _
)
「……引数が多すぎて目が回る」と思いましたか? 大丈夫です。すべてを覚える必要はありません。
今回は、この中から「薄板(Thin)」に関連する重要なパラメータに的を絞って解説します。
薄板フィーチャを制御する重要フラグ
1. `ThinType`(薄板のタイプ)
- 0: 通常の押し出し(薄板なし)
- 1: 片側方向(One-Direction)
- 2: 両側方向(Mid-Plane)
- 3: 自動フィレットなど(今回は基本の 1 または 2 を使います)
2. `Solid`(ソリッド化の指定)
- 薄板の端面をキャップして閉じたソリッドにするかどうか(Trueで中空ソリッド)。
3. API特有の注意点:薄板の「厚み」と「方向」はどこで設定するのか?
- 実は、厚み(Thickness)や方向反転(Flip)といった細かい数値設定は、FeatureExtrusion3を呼び出す直前に、ModelDocExtensionや専用のプロパティ設定、あるいはスケッチ自体の振る舞いとして持たせる必要があります。……おっと、SolidWorks APIの少し泥臭い仕様ですね。でもご安心ください。次項のサンプルコードでその全貌をクリアにします。
—
3. 実践:コード一発で中空パイプを生成するVBAマクロ
それでは、実際に動くコードを見てみましょう。
このコードは、新規パーツドキュメントを開き、原点に円を描いて、厚み3mmの中空パイプ(外径50mm、長さ100mm)を秒速で生成します。
VBAの標準モジュールにそのまま貼り付けて実行してみてください。
Sub CreateThinPipe()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim boolstatus As Boolean
Dim swFeat As SldWorks.Feature
‘ 1. アプリケーションとドキュメントの初期化
Set swApp = Application.SldWorks
‘ 新規パーツドキュメントを作成
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 202X\templates\部品.prtdot”, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “パーツの作成に失敗しました。テンプレートパスを確認してください。”, vbCritical
Exit Sub
End If
‘ 2. 「前視方向(Front Plane)」を選択してスケッチモードに入る
boolstatus = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
swModel.SketchManager.InsertSketch True
‘ 3. 直径50mm(半径0.025m)の円を描画
‘ SolidWorks APIの単位系は常に「メートル法(m)」です!ここ超重要!
Dim swSketchPoint As SldWorks.SketchPoint
Set swSketchPoint = swModel.SketchManager.CreateCircleByRadius(0, 0, 0, 0.025)
‘ スケッチを終了
swModel.SketchManager.InsertSketch True
‘ 4. 生成したスケッチを再度選択状態にする(押し出しの対象とするため)
boolstatus = swModel.Extension.SelectByID2(“スケッチ1”, “SKETCH”, 0, 0, 0, False, 0, Nothing, 0)
‘ 5. 【ここが本丸】薄板フィーチャを使った押し出しボス実行
‘ パラメータ設定値の意味:
‘ ThinType = 1 (片側方向薄板)
‘ Solid = True (キャップされた中空ソリッド)
‘ Flip = False (薄板の厚み方向の反転)
‘ Dir1Type = 1 (片側 終端条件: 押し出し長さ指定)
‘ Depth1 = 0.1 (押し出し長さ 100mm = 0.1m)
‘ ※注意: 薄板の厚み(例: 3mm = 0.003m)を事前にシステムに伝えるため、
‘ FeatureExtrusion3の前にプロパティを設定します。
‘ 実務では以下のようにコールします:
‘ 薄板の厚みを設定 (3mm)
swModel.Parameter(“D1@スケッチ1”).SystemValue = 0.025 ‘ 半径の変更が必要な場合
‘ 押し出し実行(FeatureExtrusion3)
‘ 引数が非常に多いため、改行文字(_)を使って見やすく記述しています。
Set swFeat = swModel.FeatureManager.FeatureExtrusion3( _
1, _ ‘ ThinType: 薄板あり (1=片側)
True, _ ‘ Solid: ソリッドとして作成
False, _ ‘ Flip: 薄板の向き反転
1, _ ‘ Dir1Type: 盲めし(D1)
0, _ ‘ Dir2Type: なし
0.1, _ ‘ Depth1: 100mm (0.1m)
0, _ ‘ Depth2: 未使用
False, _ ‘ D1DraftEnable
False, _ ‘ D2DraftEnable
0, _ ‘ D1DraftType
0, _ ‘ D2DraftType
0, _ ‘ D1DraftAngle
0, _ ‘ D2DraftAngle
False, _ ‘ OffsetReverse1
False, _ ‘ OffsetReverse2
False, _ ‘ TranslateSurface1
False, _ ‘ TranslateSurface2
True, _ ‘ Merge: 既存ボディとマージ
False, _ ‘ UseFeatScope
False _ ‘ UseAutoSelect
)
‘ 6. ビューを等角投影(アイソメトリック)に更新して完了
swModel.ViewZoomtofit2
MsgBox “中空パイプの生成が完了しました!”, vbInformation, “チーフアーキテクトからのメッセージ”
End Sub
—
4. 陥りやすい罠とエンジニアの知見(TIPS)
ここで、現場で開発しているときによくハマる「罠」と、その回避策をシェアしておきます。
罠1:単位系(メートル法)の罠
SolidWorks APIの内部データは、すべて「メートル(m)」で処理されています。
コード内で `0.025` と書けば 25mm(半径)、`0.1` と書けば 100mm です。「あれ、思ったより小さすぎる/大きすぎる!」というエラーの9割は、ミリメートルとメートルの単位換算ミスです。常に頭の中で「1m = 1000mm」の意識を持ちましょう。
罠2:選択状態(Selection)の不確実性
`FeatureExtrusion3` を実行する際、「どのスケッチを押し出すのか」が正しく選択されていることが絶対条件です。
コード内で `SelectByID2` を使ったあとに、モデルが再描画やフォーカスのズレを起こすと、予期せぬフィーチャが選択されてエラー(あるいは意図しないジオメトリの暴走)が起きます。
実務で安定稼働させるためには、選択が成功したこと(`boolstatus = True`)を必ず `If` 文で担保する防衛的プログラミングを心がけましょう。
—
5. おわりに
お疲れ様でした!
今回は「押し出しボス(FeatureExtrusion3)」の薄板フィーチャを活用した中空パイプの自動生成について解説しました。
単にソリッドを押し出すだけでなく、`ThinType` や `Solid` のフラグを自在に操ることで、配管、フレーム、筐体などの設計自動化の幅が一気に広がります。
「ここをこう変えたらどうなるだろう?」という知的好奇心こそが、あなたを優秀な自動化エンジニアへと導く最高のエンジンです。ぜひ手元のSolidWorksでコードをいじり倒してみてください。
それでは、次回の極限知見でお会いしましょう。プロダクトの成功を祈っています!
