こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して、カチカチと手作業を記録させるだけのステージは、もう卒業しましょう。
今回は、工業デザインや複雑な流線型ボディの設計で欠かせない「ロフトフィーチャ(Loft)」、その中でもプログラマブルに最も美しさをコントロールできる`LoftFeatureData.SetStartAndEndDraft`を使った、なめらかな接線連続性(G1/G2連続)の制御術を伝授します。
「コードから複雑な曲面を制御するなんて難しそう…」と思うかもしれませんが、ご安心ください。ここをクリアすれば、あなたのモデリング自動化スキルは一気にプロの領域へ到達します。さあ、一緒に極限の曲面コントロールの世界を覗いてみましょう!
—
1. なぜ「ロフトの接線コントロール」をコードでやるのか?
工業製品や流体デザイン(インテークマニホールド、自動車の外装、流線型の筐体など)において、面と面が接続する部分の「なめらかさ」は命です。
手動でロフトを作成する場合、スタート面やエンド面の「方向ベクトル」「ドラフト角度」「接線拘束(Tangent to Face)」をマウスでポチポチ設定しますが、これをVBAで完全再現・自動化しようとすると、通常のコマンド実行(`InsertLoft2`など)ではパラメータが足りず、意図しない「ねじれ」や「折れ線」が発生してしまいます。
そこで登場するのが、`LoftFeatureData`オブジェクトです。
これを使えば、ロフトの定義を細部までオブジェクト指向で組み立て、最後に一気にフィーチャとして爆誕させることができます。
—
2. 魔法のメソッド:`SetStartAndEndDraft` の正体
今回主役となる `SetStartAndEndDraft` メソッドは、ロフトの「開始プロファイル」と「終了プロファイル」における、抜き勾配(ドラフト)や接線方向の振る舞いを精密に指定するためのものです。
主な引数のイメージ
- 開始/終了のドラフト角 (Draft Angle): プロファイル面に対して何度傾けるか。
- 開始/終了のドラフト長さ (Draft Length): その傾きをどれくらいの距離維持するか。
- 拘束タイプ (Constraint Type): なし(None)、接線(Tangent)、面に対して垂直(Normal to Profile)など。
これらをコードから明示的に与えることで、CAD内部のソルバーが迷うことなく、数学的に美しい滑らかなスプライン曲面を計算してくれるのです。
—
3. 実践!なめらかなロフトボディを生成するVBAコード
それでは、実際に動かせるコードを見ていきましょう。
このスクリプトは、あらかじめ平行に配置された2つのスケッチ(プロファイル)が存在するパーツファイルを実行環境として想定しています。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swLoftData As SldWorks.LoftFeatureData
Dim swFeat As SldWorks.Feature
‘ 1. アプリケーションとドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “パーツファイルが開かれていません。”, vbCritical
Exit Sub
End If
If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイルでのみ実行可能です。”, vbCritical
Exit Sub
End If
Set swFeatMgr = swModel.FeatureManager
‘ 2. ロフトフィーチャデータの作成
‘ 第1引数がTrueの場合、ソリッドボディを生成(Falseならサーフェス)
Set swLoftData = swFeatMgr.CreateDefinition(swCreateLoftBody)
If swLoftData Is Nothing Then
MsgBox “ロフトデータの初期化に失敗しました。”, vbCritical
Exit Sub
End If
‘ — 【重要】 ここからロフトの詳細設定 —
‘ 3. スタート面とエンド面の接線・ドラフト設定
‘ 引数の意味:
‘ 1. 開始プロファイルのドラフト有効/無効
‘ 2. 開始ドラフト角度 (ラジアンではなく度数! 例: 15度)
‘ 3. 開始ドラフト長さ
‘ 4. 終了プロファイルのドラフト有効/無効
‘ 5. 終了ドラフト角度
‘ 6. 終了ドラフト長さ
‘ 7. すべてのプロファイルに逆向きドラフトを適用するかどうか
swLoftData.SetStartAndEndDraft True, 15#, 0.05, True, 15#, 0.05, False
‘ 4. 始まりと終わりの拘束条件を設定 (2 = 傾き/ドラフト指定 の例)
‘ ※実際のモデル構造に合わせて、定数(swLoftEndConstraint_e)を調整してください
swLoftData.StartConstraint = 2 ‘ 1:なし, 2:方向ベクトル/ドラフト
swLoftData.EndConstraint = 2
‘ 5. プロファイル(スケッチ)の追加
‘ あらかじめ作成されている「Sketch1」「Sketch2」をエンティティとして取得して渡します
Dim vProfiles(1) As Object
Set vProfiles(0) = GetSketchEntity(swModel, “Sketch1”)
Set vProfiles(1) = GetSketchEntity(swModel, “Sketch2”)
If vProfiles(0) Is Nothing Or vProfiles(1) Is Nothing Then
MsgBox “対象となるスケッチが見つかりません。「Sketch1」と「Sketch2」を用意してください。”, vbCritical
Exit Sub
End If
swLoftData.TabbedProfiles = vProfiles
‘ 6. 閉じたロフトや中心線(センターライン)の有無などの基本設定
swLoftData.Close = False
swLoftData.MaintainTangency = True ‘ 接線方向の維持を強制
‘ 7. フィーチャの生成を実行!
Set swFeat = swFeatMgr.CreateFeature(swLoftData)
If Not swFeat Is Nothing Then
MsgBox “なめらかな流線型ロフトボディの生成に成功しました!”, vbInformation
Else
MsgBox “ロフトの生成に失敗しました。プロファイルや拘束条件を確認してください。”, vbExclamation
End If
End Sub
‘ — ヘルパー関数: スケッチ名からFeatureオブジェクトを取得する —
Private Function GetSketchEntity(ByVal swModel As ModelDoc2, ByVal sketchName As String) As Object
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureByName(sketchName)
Set GetSketchEntity = swFeat
End Function
—
4. 陥りやすい罠と、プロが教える回避テクニック
このコードを使って実務の複雑な形状に挑むとき、いくつかの「ハマりどころ」に遭遇します。先輩エンジニアからのアドバイスとして、事前に共有しておきますね。
罠その1:「ねじれ(Twist)」が発生する
- 症状: 綺麗なパイプを作ろうとしたのに、途中で雑巾を絞ったようにねじれてしまう。
- 原因: 2つのプロファイル(スケッチ)の「原点の位置」や「輪郭の頂点インデックス」が噛み合っていないため、CADが結び目を誤認しています。
- 解決策: スケッチを作成する際、対応する頂点同士がしっかり向き合うようにコントロールポイントを意識するか、ガイドカーブ(Guide Curves)を明示的に追加してねじれの自由度を縛りましょう。
罠その2:ドラフト角度の単位は「度(Degree)」か「ラジアン(Radian)」か?
- 症状: 意図しない爆発的な角度になってエラーが出る。
- 解決策: SolidWorks APIの多くはラジアンを要求しますが、この `SetStartAndEndDraft` の引数における角度は「度(Degrees)」で渡します。ここをラジアン換算して渡してしまうと、変形しすぎてエラーになるので注意してください。
—
5. まとめ
今回は `LoftFeatureData.SetStartAndEndDraft` を用いた、なめらかな接線連続性コントロールについて解説しました。
「マクロの記録」では絶対に吐き出されない、こうした高度なAPIのデータ構造(Definitionパターン)を使いこなせるようになると、あなたがつくる自動化ツールは「おもちゃ」から「本物のエンジニアリング・システム」へと進化します。
ここをクリアできれば、SolidWorks VBAの基本はもうバッチリです!
自信を持って、次の自動化の扉を開いていきましょう。それでは、また次回の極限知見でお会いしましょう!
