境界サーフェスを制する者はSolidWorksを制す ― VBAで描く「曲面の極致」
こんにちは。SolidWorks APIの深淵へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で非効率なコードに別れを告げる準備はできましたか?
今回は、多くのユーザーがGUI操作で四苦八苦する「複雑な曲面生成」を、VBAを用いてコードベースで完全制御する方法を伝授します。ソリッドモデルでは表現できない有機的な形状を、`FeatureManager`を介して構築し、最後には堅牢なソリッドへと昇華させる。その一連のアーキテクチャを紐解きましょう。
—
1. なぜ「APIによるサーフェス生成」なのか?
GUIでの操作は直感的ですが、「形状変更への追従性」においては限界があります。APIを使えば、数式のパラメータを書き換えるだけで、何千通りもの曲面バリエーションを瞬時に生成可能です。
特に「境界サーフェス(Boundary Surface)」や「フィルサーフェス(Filled Surface)」は、計算負荷が高く、手動操作ではしばしば「形状の破綻」を招きます。これをVBAで記述する際の肝は、「連続性(G1/G2)の定義」を明確に引数に落とし込むことです。
—
2. 境界サーフェス生成のアーキテクチャ
境界サーフェスを創るには、以下のステップが不可欠です。
1. プロファイルの取得: 境界となるエッジやスケッチを選択する。
2. 選択セットの構築: `Select2` メソッドを駆使し、APIに「どの線と面を繋ぐか」を教える。
3. 定義のパラメータ化: `FeatureManager.InsertBoundarySurface` を実行する。
実践コード:境界サーフェスの生成
‘ 複雑な曲面を構築するためのテンプレート
Sub CreateBoundarySurface()
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. 境界サーフェスのパラメータ設定
‘ ここでは既にスケッチ等が選択されている前提
‘ 引数: 方向1, 方向2, 接線条件(0=なし, 1=接線, 2=曲率)
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.InsertBoundarySurface( _
True, False, _
1, 0, _ ‘ 方向1の接線条件
1, 0, _ ‘ 方向2の接線条件
False, False, False)
If swFeat Is Nothing Then
MsgBox “曲面の生成に失敗しました。選択セットを確認してください。”
End If
End Sub
—
3. 「サーフェスからソリッドへ」の最終関門
どれほど美しい曲面を生成しても、それが閉じられていなければ「ただの薄い布」です。これを厚みのあるソリッドに変えるのが `CreateSolidFromSurfaces` の役割です。
陥りやすい罠:隙間(ギャップ)問題
多くの初心者がここで挫折します。「なぜソリッドにならないのか?」その答えの9割は、曲面間に微細な隙間があるからです。
- 解決策: サーフェスを生成する際、必ず「縫い合わせ(Knit Surface)」の工程を挟んでください。許容誤差(Tolerance)を適切に設定することが、成功の鍵です。
‘ 生成したサーフェスを縫い合わせてソリッド化する関数
Sub KnitAndSolidify()
Dim swModel As SldWorks.ModelDoc2
Set swModel = Application.SldWorks.ActiveDoc
‘ サーフェスのエッジを選択して縫い合わせる
‘ 許容誤差は 1e-6 (1ミクロン) 程度が安全圏
swModel.FeatureManager.InsertSewSurface swModel.SelectionManager.GetSelectedObject6(1, -1), _
Nothing, Nothing, 1, 0.000001, True
‘ ソリッド化の判定
‘ この後、必要に応じて「厚み付け(Thicken)」を行うのが定石です
End Sub
—
4. プロの視点:コードを「止まらない」ものにするために
読者の皆さんが現場でコードを書く際、以下の3点を意識してください。
1. `ClearSelection2` を過剰なほど呼ぶ: APIは「直前の選択状態」を引きずります。予期せぬエラーの8割はここから生まれます。
2. `SelectionManager` の解釈: 選択されたオブジェクトが「エッジ」なのか「スケッチ」なのか、常に型をチェックする癖をつけましょう。
3. エラーハンドリング: `If swFeat Is Nothing Then` を入れないコードは、未定義の動作を許容する「時限爆弾」です。
—
最後に:世界を設計する力を
SolidWorks VBAは、単なる自動化ツールではありません。あなたの頭の中にある「まだ見ぬ形状」を、数式と論理の力で具現化するための、魔法の杖です。
まずは、単純なロフトサーフェスから始めてみてください。それができれば、境界サーフェスも、フィルサーフェスも、すべて同じ文法で制御できることに気づくはずです。
もしコードが動かなくても、落ち込まないでください。それは、APIがあなたに「もう少しだけ、形状の境界条件を整理して教えてくれ」と語りかけている証拠ですから。
また次の技術でお会いしましょう。あなたの設計が、コードと共に羽ばたくことを願っています。
