【実務・中級編】【スイープ・ロフト】LoftFeatureData.SetGuideCurvesを用いたガイドカーブ拘束によるねじれのない高精度ロフト生成 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks API】Loftを極める:ガイドカーブ拘束による「ねじれゼロ」の幾何学生成術

SolidWorks APIを用いた自動化において、最もエンジニアの頭を悩ませるのが「Loft(ロフト)」の生成だ。断面プロファイルを選択し、適当にロフトを繋げばモデルはできる。しかし、それは「設計」ではなく「偶然の産物」だ。

特に、異形断面同士を繋ぐ際、APIが自動で割り当てる頂点マッピング(Vertex Mapping)は往々にして意図しないねじれを引き起こす。この混沌を制御し、エンジニアの意図した通りに滑らかな面を生成するための鍵が、`LoftFeatureData.SetGuideCurves` を用いた拘束だ。

本稿では、実務で通用する「ねじれのないロフト生成」の極意を伝授する。

なぜ「自動選択」では破綻するのか

APIで `FeatureManager.InsertLoftRefSurface` や `InsertProtrusionLoft` を実行する際、ガイドカーブを明示的に指定しないと、SolidWorksは断面の頂点同士を最短距離で結ぼうとする。これが「ねじれ」の正体だ。

複雑なモデルを自動化する場合、以下の順序を厳守しなければならない。

1. Selection Managerの管理: 断面とガイドカーブをそれぞれ正しい順序で `Select2` する。
2. FeatureDataオブジェクトの構築: `CreateFeatureData` を介してLoft用のデータ構造をメモリ上に構築する。
3. ガイドカーブの明示的アサイン: `SetGuideCurves` を用いて、断面とカーブの接続関係をハードコード的に拘束する。

プロダクションコード:ロフト自動生成のテンプレート

以下は、保守性を考慮し、オブジェクトの参照リークを防ぐ設計を施したコードだ。

‘ 必要な参照設定: SolidWorks 20xx Type Library
‘ ロフト生成のメインルーチン
Public Sub CreateControlledLoft(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2)
Dim swFeatMgr As SldWorks.FeatureManager
Dim swLoftData As SldWorks.LoftFeatureData
Dim swSelMgr As SldWorks.SelectionMgr

Set swFeatMgr = swModel.FeatureManager

‘ 1. プロファイルとガイドカーブを適切に選択する
‘ 実務ではここを動的な配列やCollectionから取得するように設計する
swModel.ClearSelection2 True

‘ プロファイル1(断面)
swModel.Extension.SelectByID2 “Sketch1”, “SKETCH”, 0, 0, 0, True, 1, Nothing, 0
‘ プロファイル2(断面)
swModel.Extension.SelectByID2 “Sketch2”, “SKETCH”, 0, 0, 0, True, 1, Nothing, 0
‘ ガイドカーブ
swModel.Extension.SelectByID2 “Curve1”, “SKETCH”, 0, 0, 0, True, 2, Nothing, 0

‘ 2. Loftデータオブジェクトの作成
Set swLoftData = swFeatMgr.CreateFeatureData(swFeatureNameID_e.swFeatureNameLoft)

‘ 3. ガイドカーブの適用
‘ ここがねじれを防ぐ最重要ポイント
Dim vGuides As Variant
vGuides = Array(swModel.SelectionManager.GetSelectedObject6(3, -1))

swLoftData.SetGuideCurves vGuides

‘ 4. Loftの構築(パラメータの微調整)
‘ 閉じたループや滑らかさのオプションはここで定義する
swLoftData.CloseLoop = False
swLoftData.MaintainMatchingConnections = True ‘ ここをTrueにすることで頂点の一致を維持

‘ 5. フィーチャ生成
Dim swFeature As SldWorks.Feature
Set swFeature = swFeatMgr.InsertFeature(swLoftData)

If swFeature Is Nothing Then
Err.Raise vbObjectError + 1000, “LoftGen”, “ロフトの生成に失敗しました。幾何学的な不整合を確認してください。”
End If
End Sub

実務設計における「3つの鉄則」

1. 選択順序(Selection Mark)の神聖化

`SelectByID2` メソッドの第6引数 `AppendFlag` と第7引数 `Mark` を軽視してはならない。特に `Mark` は重要だ。断面には `1`、ガイドカーブには `2` を明示的に与えることで、SolidWorksのソルバーに対して「これは断面であり、これは拘束線である」という意図を明確に伝える。

2. オブジェクトの解放とメモリ管理

VBAはガベージコレクションが強力ではない。大量のフィーチャをループで生成する場合、必ず `Set obj = Nothing` を明示的に行うこと。さもなくば、SolidWorksのプロセスが肥大化し、メモリリークにより数時間でクラッシュする。

3. データベース連携時の注意

もしロフトの寸法をExcelやSQLから動的に生成する場合、直接数値を入力するのではなく、一度「数式(Equations)」を介することを推奨する。APIで直接フィーチャをいじり続けると、モデルの履歴が汚染され、再構築(Rebuild)時にエラーが連鎖するリスクがある。

最後に:エンジニアが目指すべき境地

「動くコード」を書くのはジュニアエンジニアの仕事だ。「エラーが起きず、設計変更に強く、後任者が読めるコード」を書くのがアーキテクトの仕事である。

ガイドカーブを用いたロフト生成は、単なる機能の実装ではない。それは、CADという「幾何学の論理空間」に、貴方の意図を正確に投影する行為だ。このAPIの挙動を掌握し、自動化の先にある「真の効率化」を手に入れてほしい。

何か不明点があれば、またいつでも問うがいい。我々の戦場は、常にコードの中にある。

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