SolidWorks APIの深淵:ボス・スイープ(BossSwept2)を「壊れない」コードで制圧する
SolidWorks APIを触り始め、`FeatureManager.InsertProtrusionSwept2`に挑んで挫折した経験はないだろうか?
「なぜか選択順序でエラーになる」「モデルのトポロジーが変わると、途端にクラッシュする」。これらはVBA初心者が必ず通る道だが、プロの現場では「運が悪かった」で済ませることは許されない。
今日は、ボス・スイープを堅牢に操るための「オブジェクト参照の哲学」と、実務でそのまま使えるプロダクション・コードを伝授する。
—
1. なぜ「選択順序」でエラーが起きるのか?
スイープ操作の最大の罠は、「画面上の選択」に依存するコードを書くことだ。
多くのチュートリアルでは `swDoc.Extension.SelectByID2` を並べているが、これはUI操作の模倣に過ぎない。モデルの再構築(Rebuild)やフィーチャの削除・修正によってIDが変われば、プログラムは即座に路頭に迷う。
プロが守る「鉄則」
1. SelectionManagerに頼らない: `SelectByID2`は最終手段。可能であれば、インターフェースを直接渡す設計にする。
2. キャッシュされた参照を信じない: フィーチャ作成後は必ず `IModelDoc2.ClearSelection2` を実行し、参照状態をクリーンに保つ。
3. 戻り値の検証: `InsertProtrusionSwept2` の戻り値である `IFeature` オブジェクトが `Nothing` でないかを必ずチェックする。
—
2. 堅牢なボス・スイープ実装コード
以下は、輪郭(Profile)とパス(Path)のスケッチを事前に取得し、確実にスイープを実行するための実装例だ。このコードは、エラーハンドリングを内包しており、実務環境でもそのまま利用できる。
‘ ———————————————————
‘ 堅牢なスイープフィーチャ生成の実装
‘ ———————————————————
Public Function CreateSweptBoss(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, _
swProfileSketch As SldWorks.Sketch, _
swPathSketch As SldWorks.Sketch) As SldWorks.Feature
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager
‘ 1. キャッシュのクリア(重要:前回の選択状態が残ると予期せぬエラーになる)
swModel.ClearSelection2 True
‘ 2. スケッチの選択 (Select4メソッドで確実に取得)
‘ AppendパラメータをTrueにして、順序正しく保持する
Dim swEntProfile As SldWorks.Entity
Set swEntProfile = swProfileSketch
swEntProfile.Select4 True, Nothing
Dim swEntPath As SldWorks.Entity
Set swEntPath = swPathSketch
swEntPath.Select4 True, Nothing
‘ 3. スイープの実行
‘ パラメータは必要最低限に絞り、詳細設定は後から変更するのが保守のコツ
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.InsertProtrusionSwept2(False, True, 0, False, False, 0, 0, False, 0, 0, 0, 0, True, True, True)
‘ 4. 結果の検証
If swFeat Is Nothing Then
Err.Raise vbObjectError + 1001, “CreateSweptBoss”, “スイープフィーチャの作成に失敗しました。”
End If
Set CreateSweptBoss = swFeat
swModel.ClearSelection2 True
End Function
—
3. 実務での注意点:データベース連携とトポロジー
もしあなたがこのツールを、CSVやDBからパラメータを読み込んで自動生成するシステムに組み込もうとしているなら、以下のリスクを考慮しておく必要がある。
① 「スケッチ名」の固定化を避けよ
名前でスケッチを取得するのは危険だ。設計変更で名前が変わればシステムは止まる。
- 解決策: カスタムプロパティや、スケッチ内の特定のジオメトリ(点や線)に「属性」を持たせ、`Attribute` オブジェクト経由でスケッチを探索する手法を検討せよ。
② 再構築(Rebuild)のタイミング
`InsertProtrusionSwept2` を実行する前に、`swModel.EditRebuild3` を挟むべきケースがある。特に複雑な外部参照を持つパーツの場合、ジオメトリの計算が追いつかないうちにフィーチャを追加しようとすると、SolidWorksは沈黙する。
③ ログとロールバック
自動化ツールが失敗した際、作成途中のフィーチャが残ると、次回実行時に名前衝突が起きる。必ず `On Error GoTo` ハンドラ内で、失敗したフィーチャを削除する処理を記述しておくこと。
—
まとめ:エンジニアとしての一歩先へ
「とりあえず動くコード」と「保守可能なコード」の境界線は、「いかに予期せぬ状態を排除するか」に集約される。
今回紹介した `ClearSelection2` を挟む手法や、`Entity` オブジェクトを直接選択するアプローチは、APIを使いこなす上での作法だ。これらを身体に染み込ませれば、あなたの作成するツールは、プロジェクトメンバーから「なぜか落ちないツール」として絶大な信頼を得るはずだ。
次は、スイープの「ガイドカーブ」や「ひねり」を加えた高度な制御について解説する。APIの深淵を覗きたい者は、またこの場所で会おう。
