【実務・中級編】【サーフェスモデリング】SurfaceTrim2を活用した複雑なトリム面生成と、KnitSurfacesによるソリッド化処理 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの深淵:サーフェスモデリングの自動化を極める

多くのエンジニアがSolidWorks APIの入り口で躓くのが「サーフェスのトリムと縫い合わせ(Knit)」のプロセスだ。手動操作では直感的に行えることも、APIの世界では「トポロジーの整合性」という冷徹な壁が立ちはだかる。

今日は、場当たり的なコードでエラーに泣かされる日々を卒業し、「壊れない」サーフェス生成アルゴリズムの設計思想を伝授しよう。

1. なぜ「SurfaceTrim2」でエラーが頻発するのか

多くの開発者が陥る罠は、`SelectByID2` による選択の不確実性と、フィーチャ生成時の戻り値の評価不足だ。

`SurfaceTrim2` は、トリムツールと対象サーフェスを選択した状態で実行する。しかし、フィーチャツリー上の名前やIDに依存したコードは、モデルの変更に極めて弱い。我々が目指すべきは、「計算されたオブジェクトの参照を保持し、それを確実にAPIへ渡す」という設計だ。

守るべき鉄則:

  • 選択状態のクリア: `swModel.ClearSelection2(True)` を実行の直前に呼び出すのは必須。
  • 名前解決の放棄: フィーチャ名ではなく、`ISurfaceBody` や `IFeature` オブジェクトを直接操作せよ。
  • 精度のマージン: `KnitSurfaces` における許容誤差(Tolerance)は、必ず `swModel.GetTolerance` を活用せよ。決め打ちの数値は、複雑な曲面で必ず破綻する。

2. 堅牢なサーフェス処理の実装コード

以下に、実務でそのまま使える堅牢なテンプレートを示す。このコードは、二つのサーフェスを交差させ、トリムした後にソリッド化するプロセスを抽象化したものだ。

‘ SolidWorks API を使用したサーフェス・トリム&ニットのアーキテクチャ例
Sub AutomateSurfaceModeling()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager

‘ 1. 選択解除の徹底
swModel.ClearSelection2 True

‘ 2. オブジェクトの選択(実際にはここで面を選択)
‘ 注意: 実際の開発ではGetSelectedObject6等で取得したIDを使用する
Dim bSuccess As Boolean
‘ bSuccess = swModel.Extension.SelectByID2(…)

‘ 3. SurfaceTrim2 の実行
‘ オプション: swSurfaceTrimType_Standard, swSurfaceTrimOption_KeepSelection
Dim swTrimFeat As SldWorks.Feature
Set swTrimFeat = swFeatMgr.InsertSurfaceTrim( _
swSurfaceTrimType_Standard, _
True, _
True, _
False, _
False, _
True)

If swTrimFeat Is Nothing Then
Err.Raise vbError, “Modeling”, “トリム処理に失敗しました。幾何学的な整合性を確認してください。”
End If

‘ 4. KnitSurfaces (ソリッド化)
‘ 許容誤差をモデルの精度に合わせるのがプロの流儀
Dim dTol As Double
dTol = swModel.GetTolerance(swTolType_Internal)

Dim swKnitFeat As SldWorks.Feature
Set swKnitFeat = swFeatMgr.InsertKnitSurface2( _
Nothing, 0, 0, dTol, True, True)

If Not swKnitFeat Is Nothing Then
Debug.Print “ソリッド化に成功しました。”
End If
End Sub

3. 保守性を高めるための「設計の勘所」

データベース連携の罠

CSVや外部DBからパラメトリックな数値を読み込んで形状を生成する場合、「再構築(Rebuild)」のタイミングを制御せよ。`swModel.ForceRebuild3` をループ内で多用するのは、パフォーマンスの自殺行為だ。必要なデータ抽出を終えてから、一括で更新処理を走らせるのが鉄則である。

なぜ「KnitSurfaces」で失敗するのか

`InsertKnitSurface2` が失敗する最大の理由は、「微小な隙間(Gaps)」だ。
サーフェス間のエッジが完全に一致していない場合、どれだけ精度の高いコードを書いても弾かれる。この場合、無理にニットさせようとせず、中間ステップで `ExtendSurface` や `OffsetSurface` を噛ませ、エッジを強制的にオーバーラップさせるロジックを挟むのが、真の自動化エンジニアの戦術だ。

結論:コードは「状態」を管理するためにある

SolidWorks APIにおける自動化とは、単にマウス操作を置き換えることではない。「モデルの状態(State)」を、APIが理解できる「幾何学的なルール」に翻訳する作業である。

今回紹介したテンプレートを土台にし、複雑な形状であっても「どのオブジェクトが、どのタイミングで存在しているか」を常に意識してほしい。それが、バグのない堅牢な自動化システムを構築する唯一の道だ。

現場の壁に突き当たったら、まずはフィーチャの「選択状態」を疑え。そして、幾何学的な許容誤差(Tolerance)を見直せ。そこには必ず、答えがあるはずだ。

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