【SolidWorks VBA極限活用】FeatureExtrusion3完全制覇:薄板フィーチャによる中空パイプ自動生成の極意
業務自動化エンジニアの皆さん、日々のCAD作業の自動化でお疲れ様である。
特に配管、ダクト、筐体設計などの現場において、「ソリッドを抜いてパイプ形状を作る」というアプローチでコードを書いていないだろうか?
スケッチを描いて、ソリッドのボスを押し出し、さらに内部をくり抜くためにシェル(Shell)をかける、あるいは同心円のスケッチを書いて押し出す……。
もしそのような冗長なコードを書いているとしたら、今すぐその手を止めてほしい。それはAPIのパフォーマンスとメンテナンス性を著しく下げる「素人設計」の典型例だ。
SolidWorks VBAで真に効率的なジオメトリ生成を目指すなら、`FeatureManager.FeatureExtrusion3` の「薄板フィーチャ(Thin Feature)パラメータ」を完全に掌握しなければならない。
今回は、この強力なAPIメソッドの深部を抉り出し、一撃で中空パイプ形状を生成するプロダクションコードとその設計思想を授けよう。
—
1. なぜ「薄板フィーチャ(Thin Feature)」を使うべきなのか?
実務の現場でパイプや角形ダクトを生成する際、以下の2つのアプローチが考えられる。
- アンチパターン:ソリッド押し出し + シェル(または内部カット)
- フィーチャ数が倍増するため、リビルド時間が長大化する。
- モデルのトポロジー変更時に参照エラー(Ref-Error)が起きやすい。
- コードの行数が増え、エラーハンドリングが複雑化する。
- プロの選択:薄板フィーチャ(Thin Feature)を伴う押し出し
- 1回のAPIコール(`FeatureExtrusion3`)でソリッドの中空化まで完結する。
- フィーチャツリーが汚染されず、軽量で堅牢なモデルが維持される。
- 板厚方向(外側、内側、両側、等)の制御がパラメータ一つで可能。
APIの負荷を最小限に抑え、幾何学的な破綻を防ぐ。これがチーフアーキテクトである私が薄板フィーチャを強く推奨する理由だ。
—
2. `FeatureExtrusion3` の罠と正しいパラメータ設計
`FeatureExtrusion3` は非常に多くの引数を持つモンスターメソッドである。特に「薄板フィーチャ」に関わる引数は、型や単位系の理解が曖昧だと、意図しない巨大なソリッドが生成されたり、エラーで弾かれたりする。
特に重要な薄板関連の引数を以下に定義する。
- `ThinType`(薄板タイプ):
- `1`: 片側(外側)
- `2`: 片側(内側)
- `3`: 両側(等厚)
- `4`: 面取り(※今回は割愛)
- `ThinWall1` / `ThinWall2`(板厚):
- SolidWorksの内部単位は常にメートル(m)である。ミリメートルで渡したい場合は必ず `0.001` を乗算すること。
—
3. 【実戦】中空パイプを1発生成する堅牢なVBAコード
それでは、実務の現場でそのままコピペして使えるプロダクションコードを公開する。
このコードは、新規パーツドキュメントをバックグラウンド(またはアクティブ)で作成し、任意の径と肉厚を持つ円形パイプを瞬時に生成するものである。
Option Explicit
‘ ==============================================================================
‘ 業務自動化スクリプト: 薄板フィーチャを活用した中空パイプ自動生成
‘ 開発者: チーフアーキテクト
‘ 依存関係: SolidWorks 202X Type Library
‘ ==============================================================================
Sub CreateThinPipeSample()
‘ 1. SolidWorks アプリケーションの取得
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If
‘ 2. 新規パーツドキュメントの作成 (ユーザー定義テンプレートを使用する場合はパスを指定)
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 2023\templates\Part.prtdot”, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “パーツドキュメントの作成に失敗しました。”, vbCritical
Exit Sub
End If
‘ 3. フロント平面(Front Plane)を選択し、スケッチモードへ移行
Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2(“フロント”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
If Not boolstatus Then
MsgBox “参照平面の選択に失敗しました。”, vbCritical
Exit Sub
End If
swModel.SketchManager.InsertSketch True
‘ 4. パイプの外径を定義する円スケッチを描画 (直径: 50mm = 0.05m)
‘ ※SolidWorks APIの単位系はメートル法が基本
Dim outerDiameter As Double
outerDiameter = 0.05 ‘ 50mm
Dim swSkCircle As SldWorks.SketchSegment
Set swSkCircle = swModel.SketchManager.CreateCircleByRadius(0, 0, 0, outerDiameter / 2#)
‘ スケッチを終了
swModel.SketchManager.InsertSketch False
‘ 5. 【核心】FeatureExtrusion3 による薄板フィーチャ付き押し出し
‘ パラメータ設計のポイント:
‘ – 押し出し長さ: 200mm (0.2m)
‘ – 薄板タイプ: 片側(内側) = 2
‘ – 板厚(ThinWall1): 3mm = 0.003m
Dim reverseDir As Boolean
reverseDir = False
Dim dirType As Long
dirType = 1 ‘ 終端条件: 創成 (Blind)
Dim depth As Double
depth = 0.2 ‘ 200mm
Dim draftAngle As Double
draftAngle = 0#
Dim flipDraft As Boolean
flipDraft = False
Dim meAsExtrude As Boolean
meAsExtrude = False
Dim reverseOffset As Boolean
reverseOffset = False
Dim offsetReverseDir As Boolean
offsetReverseDir = False
Dim useOffset As Boolean
useOffset = False
Dim tDir1 As Long
tDir1 = 0
Dim tDir2 As Long
tDir2 = 0
Dim thinType As Long
thinType = 2 ‘ 2: 内側に向かって板厚を付与
Dim thinWall1 As Double
thinWall1 = 0.003 ‘ 板厚 3mm
Dim thinWall2 As Double
thinWall2 = 0#
Dim binDir1 As Long
binDir1 = 0
Dim binDir2 As Long
binDir2 = 0
Dim skMerge As Boolean
skMerge = True
Dim useFeatScope As Boolean
useFeatScope = False
Dim useAutoSelect As Boolean
useAutoSelect = False
‘ フィーチャマネージャーを介した押し出し実行
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureManager.FeatureExtrusion3( _
reverseDir, _
dirType, _
depth, _
draftAngle, _
flipDraft, _
meAsExtrude, _
reverseOffset, _
offsetReverseDir, _
useOffset, _
tDir1, _
tDir2, _
thinType, _
thinWall1, _
thinWall2, _
binDir1, _
binDir2, _
skMerge, _
useFeatScope, _
useAutoSelect, _
0#, 0#, False) ‘ 最後の引数はボス/カットの方向等
If swFeat Is Nothing Then
MsgBox “薄板押し出しフィーチャの生成に失敗しました。”, vbCritical
Exit Sub
End If
‘ 6. ビューの再描画とアイソメトリック表示への切り替え
swModel.ViewZoomtoFit2
swApp.RunCommand swCommands_ViewIsometric, “”
MsgBox “中空パイプの自動生成が完了しました。”, vbInformation
End Sub
—
4. プロジェクト運用上の重要な注意点とデータベース連携の知見
このコードを実際の業務システム(Excelマクロ、外部DB連携ツール、PLM連携アドインなど)に組み込む際、以下のアーキテクチャ上の注意点を守ってほしい。
1. 単位系の厳密な管理
コード内でも触れた通り、SolidWorks APIはメートル(m)で値を解釈する。現場の設計者が「外径50mm、板厚3mm」と入力した際、そのまま `50` や `3` を渡すと、モンスター級の鉄塊(50mのパイプ)が生成されてSolidWorksがフリーズする。必ずUI層とAPI層の間でスケーリング(` 0.001`)を行うバリデーション層を設けること。
2. エラーハンドリングとフィーチャの成否判定
`FeatureExtrusion3` は、スケッチが完全拘束されていない場合や、板厚が外径に対して大きすぎる場合(例:外径50mmに対して板厚30mmを指定するなど、幾何学的に破綻するケース)に `Nothing` を返すか、SolidWorksのエラーダイアログを引き起こす。
データベースから動的にパラメータを取得して一括生成するバッチ処理を組む場合は、必ず事前の数値バリデーション(`板厚 < 外径 / 2`)をコード内に実装しておくべきだ。
3. テンプレートのパス依存性の排除
実務では、社内標準の図面枠やプロパティが設定されたパーツテンプレートを使用するはずだ。コード内にハードコードされたテンプレートパスは環境依存のバグを生む原因になるため、レジストリやINIファイル、あるいはExcelのコンフィグシートから動的に読み込ませる設計にすること。
—
総括
今回解説した `FeatureExtrusion3` の薄板フィーチャ活用術は、単なる「コードの小技」ではない。CAD自動化における「処理の軽量化・モデルの堅牢性・保守性の向上」という、エンジニアリングの核心を突くアプローチだ。
無駄なフィーチャを排し、APIの能力を極限まで引き出すコードを書くこと。それこそが、現場のエンジニアを救う真の自動化エンジニアの仕事である。
ぜひ自身のプロジェクトにこの知見を取り入れ、圧倒的なパフォーマンスの自動化ツールを構築してほしい。健闘を祈る。
