SolidWorks VBAで「自由曲面」を操る:SurfaceTrim2とKnitSurfacesによるソリッド化の極意
こんにちは。現場で日々、数万行のAPIコードと格闘しているエンジニアです。
「マクロの記録」ボタンを押して生成された、冗長で不安定なコードに絶望したことはありませんか? SolidWorks VBAの真髄は、「面(サーフェス)を自在に切り刻み、それを強固な塊(ソリッド)へと昇華させる」という一連のプロセスを、いかに数学的かつ安定的に実装できるかにあります。
今回は、最も難解で、かつ最もパワフルな「SurfaceTrim2」と「KnitSurfaces」を用いたサーフェスモデリング自動化の深淵へあなたを招待します。
—
1. なぜ「SurfaceTrim2」なのか?
SolidWorksのAPIには、歴史的経緯から似たような名前のメソッドが複数存在します。`SurfaceTrim`ではなく、なぜ`SurfaceTrim2`なのか。それは、処理の安定性と「保持・除去」の論理的制御において、現時点で最も堅牢だからです。
サーフェスモデリングの自動化において、最も多いエラーは「トリムする境界線が見つからない」あるいは「交差していない面を選択している」ことです。これらを防ぐための黄金律を解説します。
—
2. 実装コード:複雑なサーフェスをソリッドへ昇華させる
以下のコードは、既存の2つのサーフェスを交差トリムし、それを縫い合わせてひとつのソリッドに変換するプロセスです。
Sub CreateTrimmedSolid()
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. トリム対象の選択(本来は名前指定などで動的に取得する)
‘ ここでは「Surface-Extrude1」と「Surface-Extrude2」を対象とする
Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2(“Surface-Extrude1”, “BODYFEATURE”, 0, 0, 0, True, 0, Nothing, 0)
boolstatus = swModel.Extension.SelectByID2(“Surface-Extrude2”, “BODYFEATURE”, 0, 0, 0, True, 0, Nothing, 0)
‘ 3. SurfaceTrim2の実行
‘ オプション引数の意味:1(除去), 0(標準)
‘ 最後の引数は、トリムのオプション(交差線を表示するか等)
swFeatMgr.SurfaceTrim2 1, 0, False, True, False, False, 0, 0, 0, 0, 0
‘ 4. KnitSurfaces(縫合)によるソリッド化
‘ トリムされたサーフェスを選択し、縫い合わせて「ソリッド化」のフラグを立てる
swModel.ClearSelection2 True
swModel.Extension.SelectByID2(“Surface-Trim1”, “BODYFEATURE”, 0, 0, 0, False, 0, Nothing, 0)
‘ KnitSurfacesメソッド: 許容誤差(1e-6程度が安定)、作成オプション(1=ソリッド化)
swFeatMgr.KnitSurfaces 1e-06, 0, 1, 0, 0
MsgBox “トリムとソリッド化が完了しました。”
End Sub
—
3. 陥りやすいエラーとその克服法
① 「選択のゴミ」を残さないこと
コードの冒頭に `swModel.ClearSelection2 True` を入れています。APIは直前の選択状態を強く引きずります。これを怠ると、意図しないフィーチャが選択されたままトリムが実行され、エラーで停止します。
② 縫合誤差(Tolerance)の魔法
`KnitSurfaces`の引数にある許容誤差(Tolerance)。これを小さくしすぎると、わずかな隙間で縫合に失敗します。逆に大きくしすぎると、ジオメトリが歪みます。
- 推奨値: `1e-06` (1ミクロン) から始め、失敗する場合は `1e-05` 程度まで緩めるのが現場の常識です。
③ サーフェスが「水密(Watertight)」であるか
KnitSurfacesでソリッド化が成功する条件は、「すべてのエッジが他のエッジと完全にペアになっていること」です。もしソリッド化が失敗する場合は、トリムの交差線が正しく計算されていないか、端部がわずかに開いています。まずは `KnitSurfaces` の最後の引数を `0` にして、サーフェスのまま正しく縫合できるかを確認するデバッグ手法が有効です。
—
4. 先輩エンジニアからのアドバイス
VBAでの自動化は、単なる「操作の記録」ではなく、「形状を論理的に定義する作業」です。
最初から完璧なコードを書こうと思わず、まずは「手作業で成功する手順」を1ステップずつAPIに置き換えていってください。エラーが出るなら、それはSolidWorksが「その形状は数学的にありえないよ」と教えてくれているサインです。
ここをマスターすれば、あなたの設計業務は劇的に効率化し、これまで手作業では数時間かかっていた複雑な曲面処理が、一瞬で終わるようになります。
さあ、次はあなたの番です。コードを書いて、SolidWorksを自由自在に操りましょう!何か詰まったら、いつでも戻ってきてくださいね。
