SolidWorks VBAの「終了条件」を制する:カットフィーチャの深淵へ
こんにちは。日々、自動化という名の魔法をSolidWorksにかけ続けているエンジニアです。
マクロの記録機能を使っていて、「なぜか思った通りにカットされない」「エラーは出ないのに期待した形状にならない」といった壁にぶつかったことはありませんか?その原因の多くは、フィーチャ作成時の「終了条件」の指定にあります。
特に「サーフェスまで」や「オフセット」といった条件は、単に数値を入力するだけでなく、SolidWorksの内部オブジェクトに対する理解が不可欠です。今日は、これらを自在に操るための「プロの作法」を伝授しましょう。
—
1. なぜ「終了条件」でつまずくのか?
SolidWorksのフィーチャ作成において、`FeatureManager.FeatureCut` メソッドを使うのが定石ですが、ここには落とし穴があります。
多くのユーザーが陥る罠は、「終了条件(EndCondition)に対応するパラメータが、条件ごとに微妙に異なる」という点です。
例えば、「ブラインド」なら深ささえ指定すればいいですが、「オフセット」や「サーフェスまで」を指定する場合、単なる距離の指定だけでなく、「どの面を参照するか(ReferenceObject)」という情報を正確にAPIに渡さなければなりません。
—
2. 終了条件を司る `swEndConditions_e` の極意
APIを扱う際、終了条件は `swEndConditions_e` という列挙体で管理されます。代表的なものは以下の通りです。
- `swEndCondBlind` (0): ブラインド(距離指定)
- `swEndCondThroughAll` (1): 貫通
- `swEndCondOffsetFromSurface` (11): サーフェスからオフセット
- `swEndCondUpToSurface` (5): サーフェスまで
ここでのポイントは、「どの定数を使うか」だけでなく、「その後に続く引数(Distance, Direction, VertexOrSurface 等)」をどう埋めるかです。
—
3. 実践コード:オフセットを指定したカットフィーチャ
それでは、実際に「特定のサーフェスから10mmオフセットしてカットする」コードを見てみましょう。
Sub CreateOffsetCut()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatureMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.Feature
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatureMgr = swModel.FeatureManager
‘ 【重要】選択状態をクリアしてから対象の面を選択する
‘ APIを叩く前に、何に対して(オフセット基準面)処理するかを明示する必要があります
swModel.ClearSelection2 True
‘ ここでは例として、予め選択されている面を基準とします
‘ 実際の実務では swModel.Extension.SelectByID2 等を使用して対象面を特定します
‘ カットフィーチャのパラメータ設定
‘ FeatureCut(深さ, 反転, 終了条件, 終了条件2, 距離1, 距離2, …)
‘ 特に「オフセット」の場合、距離引数にオフセット量を渡します
Set swFeat = swFeatureMgr.FeatureCut( _
True, _ ‘ 反転
False, _ ‘ 貫通
False, _ ‘ 両方向
swEndCondOffsetFromSurface, _ ‘ 終了条件:サーフェスからオフセット
0, _ ‘ 終了条件2
0.01, _ ‘ 距離1(ここで10mmを指定)
0, _ ‘ 距離2
False, _ ‘ ドラフト
False, _ ‘ ドラフト
False, _ ‘ 補正
False, _ ‘ 補正
False, _ ‘ 円形プロファイル
False, _ ‘ フィーチャスコープ
False, _ ‘ 自動選択
True, _ ‘ サーフェスに対して法線方向か?
False, _ ‘ 終了条件の面を考慮
False, _ ‘ ??
False, _ ‘ ??
False) ‘ ??
If swFeat Is Nothing Then
MsgBox “フィーチャの作成に失敗しました。対象面が正しく選択されているか確認してください。”
End If
End Sub
—
4. 現場で生き残るための「鉄則」
コードを見て気づいたかもしれませんが、APIの引数は非常に多く、すべてを完璧に記憶するのは不可能です。しかし、以下の3点を意識するだけで、バグは激減します。
1. 選択状態を管理せよ
`FeatureCut` は現在の「選択セット」に依存します。マクロを走らせる前に、必ず `ClearSelection2` を実行し、必要な面だけを再選択させるのが、伝説的エンジニアへの第一歩です。
2. 定数をハードコーディングしない
`11` などの数字ではなく、`swEndCondOffsetFromSurface` と定数名で記述してください。可読性が段違いになり、後の修正が容易になります。
3. エラーハンドリングを怠るな
`Set swFeat = …` の戻り値が `Nothing` になっていないか、必ず判定してください。APIは「条件を満たさない」とき、例外ではなく単に「空(Nothing)」を返します。
まとめ:ここを越えれば、君はもう初心者じゃない
「サーフェスまで」「オフセット」といった条件は、SolidWorksのジオメトリ計算の根幹に関わる部分です。これをコードで制御できるということは、モデルの変更に追従できる「ロバスト(堅牢)な設計」を自動化できるようになったことを意味します。
最初は難しく感じるかもしれませんが、一度この「終了条件のロジック」を理解してしまえば、他のフィーチャ操作も同じ考え方で応用が効くはずです。
さあ、次はどんな機能を自動化してみますか?応援していますよ。
