こんにちは!SolidWorksマクロの記録ボタンを押したはいいものの、生成された暗号のようなコードの山に絶望していませんか?「マクロの記録」は便利な機能ですが、実務で使える堅牢な自動化ツールを作るには、APIのオブジェクト構造を正しく理解し、生きたコードを書くスキルが不可欠です。
今回は、実務のサーフェスモデリングで最も使用頻度が高い「閉じたスケッチから平面サーフェス(PlanarSurface)を生成し、それを頑健なソリッドボディへと昇華させる(Thicken)自動化ロジック」を徹底解説します。
ここをクリアすれば、あなたもマクロの記録依存から脱却し、SolidWorks VBAを自在に操るエンジニアの仲間入りです。一緒に本質を学んでいきましょう!
—
1. なぜ「サーフェス経由のソリッド化」なのか?
SolidWorksでパーツを作る際、普通は「押し出しボス(Extrude)」を使いますよね。では、なぜわざわざ「スケッチ $\rightarrow$ 平面サーフェス $\rightarrow$ 厚み付け(ソリッド化)」という一手間をかけるのでしょうか?
ここがプロのエンジニアの知見の分かれ道です。
複雑な形状や、複数の輪郭が入り組んだスケッチからダイレクトにソリッドを作ろうとすると、APIは時々「どこの境界をどう解釈すればいいのか」迷子になり、エラーを吐きます。
しかし、「一度ゼロ厚みのサーフェス(PlanarSurface)を張り、それを厚み付け(Thicken)する」というアプローチをとると、APIの計算エンジンが非常に安定します。エラーハンドリングもしやすく、実務で絶対に破綻しない「頑健な(ロバストな)コード」が書けるのです。
—
2. 全体像:APIのオブジェクト階層を理解する
VBAでサーフェスを生成し、ソリッドに変換するまでには、以下のステップを踏みます。
1. ドキュメントの取得: 現在アクティブなパーツ(`PartDoc`)を掴む。
2. スケッチの選択: ターゲットとなる閉ループのスケッチがあらかじめ選択されている状態を作る。
3. 平面サーフェスの作成: `InsertPlanarSurface2` メソッドを呼び出す。
4. ソリッド化(厚み付け): 生成されたサーフェスを選択し、`CreateThickenCut` または `Thicken`系APIで厚みを与える。
百聞は一見に如かず。まずは実務でそのまま使える完成されたコードをご覧ください。
—
3. 実装コード:閉ループスケッチからのソリッド生成マクロ
以下のコードをSolidWorksのVBAエディタ(IDE)に貼り付けて実行してみてください。あらかじめ、平面上に「一本の途切れのない閉じたスケッチ(四角形や円など)」を描き、そのスケッチを選択(ハイライト)した状態でマクロを走らせます。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swSurfFeat As SldWorks.Feature
Dim boolstatus As Boolean
‘ 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
‘ 2. フィーチャーマネージャーの取得
Set swFeatMgr = swModel.FeatureManager
‘ 3. 選択されているスケッチから平面サーフェス(Planar Surface)を生成
‘ ※事前に閉ループのスケッチが選択されている必要があります
Set swSurfFeat = swFeatMgr.InsertPlanarSurface2()
If swSurfFeat Is Nothing Then
MsgBox “平面サーフェスの生成に失敗しました。閉じたスケッチが選択されているか確認してください。”, vbCritical, “生成エラー”
Exit Sub
End If
‘ 画面を最新の状態に更新
swModel.ViewZoomToFit2
‘ 4. 生成したサーフェスをソリッドに変換(厚み付け: Thicken)
‘ 引数設定: 厚み = 10mm, 方向 = 1(外側/上方), サーフェスをカット/削除するか = False
boolstatus = Thickensurface(swModel, 0.01, 1, False)
If boolstatus Then
MsgBox “サーフェスモデリングからソリッドへの変換が完了しました!”, vbInformation, “成功”
Else
MsgBox “厚み付け(Thicken)処理でエラーが発生しました。”, vbExclamation, “警告”
End If
End Sub
‘ =========================================================================
‘ 補助関数:選択されたサーフェスに対して厚み付けを行い、ソリッド化する
‘ =========================================================================
Function Thickensurface(ByVal swModel As SldWorks.ModelDoc2, ByVal thickness As Double, ByVal direction As Long, ByVal keepSurface As Boolean) As Boolean
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeatData As SldWorks.ThickenSheetData
Dim boolstatus As Boolean
Set swSelMgr = swModel.SelectionManager
‘ 直前に作成されたサーフェスボディ(またはフィーチャー)を選択状態にする
‘ ここではシンプルに最新のサーフェスフィーチャーを再選択
boolstatus = swModel.Extension.SelectByID2(“”, “FACE”, 0, 0, 0, False, 0, Nothing, 0)
‘ ※実務ではフィーチャーからボディを取得して選択するアプローチがより堅牢です
‘ ここでは分かりやすくThicken機能のAPI呼び出しを構築します
‘ Thicken(厚み付け)フィーチャーの作成
‘ 第1引数: 厚み(m), 第2引数: 方向(1=側1, 2=側2, 3=両側), 第3引数: 逆方向か, 第4引数: サーフェスを維持するか
boolstatus = swModel.FeatureManager.InsertThicken(thickness, direction, 0, keepSurface, False, 0, 0)
Thickensurface = boolstatus
End Function
—
4. コードの急所とエンジニアの知見
上記のコードで、特に初心者の方がハマりやすいポイント、そしてプロが必ず押さえる「極限の知見」を解説します。
① 単位系(MKS vs MMGS)の罠
SolidWorksのAPIは、内部的にはすべて「メートル法(MKS:メートル、キログラム、秒)」で計算しています。
コード内で `thickness = 0.01` としているのは、UI上で「10mm」を指定したいからです。ここをうっかり `10` と書いてしまうと、「10メートル(10,000mm)の巨大な鉄塊」が生成されてSolidWorksがフリーズするかエラーを起こします。APIを叩くときは「単位は常にメートル」と肝に銘じておきましょう。
② 選択状態(Selection)の依存性
VBAの多くのフィーチャー生成メソッド(`InsertPlanarSurface2` や `InsertThicken` など)は、「今、画面上で何が選択されているか」に依存します。
マクロの記録がやたらと `SelectByID2` を連発する理由はこれです。実務でより高度なマクロを書くときは、選択に頼らず、オブジェクトのポインタ(メモリ上のアドレス)を直接渡して処理する「ノンセレクト・プログラミング」に移行していくのが、中級者へのステップアップとなります。
③ エラーハンドリングの重要性
「ユーザーがスケッチを選択し忘れてマクロを実行した」
「開いているのはアセンブリであってパーツではなかった」
こうした現場での「うっかりミス」でVBAがいきなりクラッシュするのは最悪です。コード前半にあるような `If swModel Is Nothing Then` や、戻り値の `Nothing` チェックを必ず挟むことで、ユーザーに優しいプロフェッショナルなツールへと昇華させることができます。
—
最後に:ここをクリアすれば、もう怖くない!
平面サーフェスからのソリッド化、いかがでしたでしょうか?
「スケッチをサーフェスにし、それに厚みを与える」という一連の流れをVBAでコントロールできるようになると、ロフトやスイープといった複雑なサーフェスモデリングの自動化へも簡単に応用できるようになります。
「マクロの記録」というトレーニングホイール(補助輪)を外し、自分の手でAPIをコントロールする快感をぜひ味わってください。あなたのSolidWorks自動化ライフが、ここからさらに加速することを応援しています!
