【入門編】【中級・実務】カットフィーチャで「すべての面」「オフセット」を指定する際のパラメータの罠と正しい記述 – SolidWorks VBA解析バイブル

スポンサーリンク

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のジオメトリ計算の根幹に関わる部分です。これをコードで制御できるということは、モデルの変更に追従できる「ロバスト(堅牢)な設計」を自動化できるようになったことを意味します。

最初は難しく感じるかもしれませんが、一度この「終了条件のロジック」を理解してしまえば、他のフィーチャ操作も同じ考え方で応用が効くはずです。

さあ、次はどんな機能を自動化してみますか?応援していますよ。

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