【SolidWorks APIの極意】「カットフィーチャ」終了条件の罠を突破せよ:堅牢なコードを構築する実務の作法
SolidWorksの自動化において、「押し出しカット」は最も頻繁に呼び出される操作の一つだ。しかし、多くのエンジニアが「フィーチャの作成」までは辿り着けても、「サーフェスまで」「オフセット」といった動的な終了条件の制御で躓き、保守性の低いスパゲッティコードに陥っている。
本稿では、APIの深い仕様を理解し、環境変化に強い堅牢なカットフィーチャ生成の極意を伝授する。
—
1. なぜ「終了条件」の指定でバグが多発するのか
SolidWorks APIの `FeatureManager.FeatureCut3` メソッドは非常に強力だが、引数が多すぎて「何をどこまで設定すべきか」が見えにくくなる。
特に `swEndConditions_e` を用いた終了条件の指定において、以下の罠が存在する。
1. オフセット値の無視: `EndConditions` だけを指定し、オフセット値(`OffsetDistance`)を明示的に渡さないと、前回の設定やデフォルト値が混入し、意図しない深さでカットされる。
2. サーフェス参照の欠落: 「サーフェスまで」を指定する場合、ターゲットとなる `Face` や `Surface` オブジェクトを事前に `Select` しておく必要がある。しかし、選択状態(SelectionManager)に依存したコードは極めて脆弱だ。
3. Enumの誤解: `swEndConditions_e` の定数を渡す際、APIは「どの引数が有効か」を自動で判定してくれない。間違った組合せでも実行時にエラーを吐かず、無言でデフォルト値にフォールバックすることがある。
—
2. 堅牢なコード設計のための「3つの鉄則」
実務で生き残るコードを書くためには、以下の設計思想を徹底せよ。
- 鉄則1:選択状態のクリアと明示化
APIを叩く直前に `swModel.ClearSelection2(True)` を実行するのは基本中の基本だ。不要な選択状態はフィーチャ生成の最大の敵である。
- 鉄則2:Objectの型を厳密に定義する
`Object` 型ではなく、`ISurface` や `IFace2` といったインターフェースを明示的に扱うことで、メモリリークと型不一致のリスクを劇的に下げられる。
- 鉄則3:フィーチャ生成後の「再評価」
生成したフィーチャが意図通りか確認するため、`IModelDocExtension::Rebuild` を適切に配置し、スタックを更新する。
—
3. 実践コード:オフセット付き「サーフェスまで」カット
以下は、ターゲットサーフェスを指定し、オフセットを伴うカットを行う実務レベルのテンプレートだ。
‘ —————————————————————————
‘ @brief 特定サーフェスまでオフセットカットを行う堅牢なメソッド
‘ @param swModel SolidWorks ModelDoc2オブジェクト
‘ @param targetFace ターゲットとなる面オブジェクト
‘ @param offsetVal オフセット距離(mm単位)
‘ —————————————————————————
Public Sub CreateOffsetCut(swModel As SldWorks.ModelDoc2, targetFace As SldWorks.Face2, offsetVal As Double)
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager
‘ 1. セレクションのクリーンアップ
swModel.ClearSelection2 True
‘ 2. ターゲット面の選択
‘ FeatureManagerに操作対象を教えるため、必ず選択状態にする
targetFace.Select4 False, Nothing
‘ 3. カットフィーチャの実行
‘ 引数:深さ1, 深さ2, 条件1, 条件2, 反転, 貫通, …
‘ 重要なのは swEndConditions_e.swEndCondOffsetFromSurface を使用すること
Dim myFeature As SldWorks.Feature
Set myFeature = swFeatMgr.FeatureCut3( _
offsetVal, _ ‘ 距離
0, _ ‘ 方向2(今回は未使用)
swEndCondOffsetFromSurface, _ ‘ 終了条件: サーフェスからのオフセット
0, _ ‘ 条件2
False, _ ‘ 左右対称
False, _ ‘ 貫通
False, _ ‘ 反転
False, _ ‘ ドラフト
0, _ ‘ ドラフト角度
False, _ ‘ オフセット有効か
False, _ ‘ 逆方向オフセット
0, _ ‘ テーパ角度
0, _ ‘ テーパ角度2
False, _ ‘ 貫通(薄板)
False, _ ‘ マージ
False, _ ‘ ジオメトリパターン
False, _ ‘ フィーチャスコープ
False, _ ‘ 自動選択
0, _ ‘ 参照距離
0, _ ‘ 参照距離2
False) ‘ 参照オフセット
‘ 4. エラーハンドリング
If myFeature Is Nothing Then
Err.Raise vbObjectError + 1001, “SolidWorks Automation”, “カットフィーチャの生成に失敗しました。”
End If
swModel.Rebuild swRebuildAll
End Sub
—
4. プロフェッショナルへのアドバイス:データ連携の注意点
もしあなたがデータベース(SQL ServerやAccessなど)からパラメータを読み込んで自動生成を行っているなら、「単位系の罠」に注意してほしい。SolidWorks APIは内部的に常にメートル法(SI単位系)で動作する。データベース上の数値が「mm」であっても、APIに渡す際は「メートル」に変換(1/1000)する処理を必ず挟むこと。
また、フィーチャの作成失敗を検知した際、`OnIdle` イベント等で後処理を行う設計にしておかないと、SolidWorksがハングアップした際にプロセスが残存し、メモリを食いつぶす原因となる。
まとめ
1. 選択状態は常にクリアしてから開始する。
2. 終了条件はEnumを厳格に指定し、引数の意味を混同させない。
3. 最後に必ずRebuildを呼び出し、モデルの整合性を保つ。
この作法を守れば、あなたの書くコードは「動く」レベルを超え、「保守され、チームの資産となる」レベルへと昇華されるはずだ。エンジニア諸君、コードで魔法をかけろ。
