こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して生成されたコードを眺めて、「なんだか呪文みたいで、数字を変えても意図通りに動かない……」と頭を抱えていませんか?
大丈夫です。その壁は、誰もが最初に通る道です。
今回は、実務の現場で最も頻繁に登場する「軸対称(Mid Plane)を使った押し出しカット(CutExtrusion)」をテーマに取り上げます。
単にコードを動かすだけでなく、「なぜそのAPIを叩く必要があるのか」「SolidWorksの頭の中はどうなっているのか」という本質を、優しく紐解いていきましょう。ここをクリアすれば、あなたのVBAスキルは確実に一段上のステージへ駆け上がりますよ!
—
1. なぜ「軸対称(Mid Plane)」カットが実務で重宝されるのか?
パーツの設計において、溝やポケット(凹み)を彫るとき、どちらか片側だけの方向(Blind等)で寸法を入れると、パーツ全体が伸縮したときに「中心がズレる」という致命的な不具合を生みます。
これを防ぐのが「軸対称(Mid Plane)」です。
中心面を基準にして、「表と裏」「右と左」に等しく、かつ一括で切り欠きを生成するこの手法は、アセンブリの整合性を保つための必須テクニックです。
これをVBAで完全自動化できれば、パラメータ(幅や深さ)を変更しても、モデルが美しく対称性を保ったまま追従する、極めてロバスト(堅牢)なプログラムが完成します。
—
2. マクロの記録の限界と、APIの「本当の姿」
まず知っておいてほしいのは、SolidWorksのマクロの記録機能が吐き出すコードは、いわば「その時マウスでクリックした軌跡の履歴」に過ぎないということです。
実際の開発では、以下の要素をコード内で完全にコントロールする必要があります。
1. スケッチ平面の選択と開閉
2. エンティティの変換・スケッチ描画
3. 正確なフィーチャ作成パラメータ(押し出し深さ、終了条件)の設定
特に「軸対称」をコードで指示する際、終了条件の定数や、方向1・方向2のパラメータを間違えると、エラー(戻り値が `Nothing` になる等)で容赦なくマクロが停止します。
—
3. 実装コード:軸対称カットを自在に操るプロの作法
それでは、実際に実務でそのまま使えるVBAコードを見ていきましょう。
今回は、アクティブなパーツに対して、あらかじめ選択した面(または中心面)を基準に、指定した厚みの溝を両方向へ一気に切り込むシナリオを想定しています。
Option Explicit
Sub CreateMidPlaneCutExtrusion()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swCutFeat 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 “このマクロはパーツドキュメントでのみ実行可能です。”, vbExclamation, “警告”
Exit Sub
End If
‘ 2. スケッチの作成(ここでは分かりやすく原点付近に四角形を描画したと仮定)
‘ ※実務では既存のスケッチや面を選択状態からスタートすることが多いです
swModel.ClearSelection2 True
‘ 3. 押し出しカット(軸対称)のパラメータ実行
‘ InsertCutExtrusion2の引数の意味を完全に理解することが勝利への鍵です!
‘
‘ 引数1: 貫通するかどうか (True = 貫通, False = 寸法指定)
‘ 引数2: 終了条件 (Direction 1) -> 1 = 貫通, 3 = 押し出し方向指定(Blind), 6 = 軸対称(MidPlane)
‘ 引数3: 反転するかどうか (Flip)
‘ 引数4: ドラフトをつけるか (Draft)
‘ 引数5: ドラフトを外側にするか
‘ 引数6: 方向1の深さ(メートル単位! 例: 10mmなら 0.01)
‘ 引数7: 方向2の深さ(方向1と連動する場合は無視されることが多いですが指定が必要)
‘ 引数8: オフセットを使うか
‘ 引数9: 逆方向オフセット
‘ 引数10: 方向1のドラフト角度
‘ 引数11: 方向2のドラフト角度
‘ 引数12: 方向1をキャップするか
‘ 引数13: 方向2をキャップするか
‘ 引数14: 薄肉フィーチャにするか
‘ 引数15: 薄肉の厚み1
‘ 引数16: 薄肉の厚み2
‘ 引数17: 薄肉の方向
‘ 引数18: 自動選択フィーチャ
‘ 引数19: すべてのボディと連動するか
Dim depth As Double
depth = 0.02 ‘ 切り込み深さ 20mm (SolidWorksの内部単位は「メートル」です!)
‘ 軸対称(Mid Plane)を指定する場合のAPI呼び出し
‘ 終了条件に 6 (swEndCondMidPlane) を指定します。
Set swCutFeat = swModel.FeatureManager.InsertCutExtrusion3( _
False, _ ‘ 貫通ではない
6, _ ‘ 終了条件: 6 = 軸対称 (Mid Plane)
False, _ ‘ 反転なし
False, _ ‘ ドラフトなし
False, _ ‘ ドラフト外側
depth, _ ‘ 方向1の深さ(全幅の半分、またはトータル深さの解釈に注意)
depth, _ ‘ 方向2の深さ
False, _ ‘ オフセットなし
False, _ ‘ 逆方向オフセット
0, 0, _ ‘ ドラフト角度
False, False, _ ‘ キャップ
False, _ ‘ 薄肉フィーチャなし
0, 0, 0, _ ‘ 薄肉パラメータ
True, _ ‘ 自動選択
False, _ ‘ すべてのボディ
False, _ ‘ 複数方向
False) ‘ 形状最適化
‘ 4. 結果の判定
If Not swCutFeat Is Nothing Then
MsgBox “軸対称カットフィーチャの生成に成功しました!”, vbInformation, “完了”
Else
MsgBox “フィーチャの生成に失敗しました。スケッチや選択状態を確認してください。”, vbCritical, “エラー”
End If
End Sub
—
4. ここでつまずく!現場でよくあるエラーと対策
トラップその1:単位系は「メートル(m)」という絶対の掟
コード内で `depth = 0.02` と記述しているのにお気づきでしょうか?
SolidWorksのAPIは、画面上の表示単位(mmやinch)に関わらず、内部的には常に「メートル(m)」で計算します。
「20mmのつもりで `20` と入力したら、パーツが巨大な化け物になった!」というのは、初心者が必ず通るお約束の洗礼です。必ず `0.02` のようにメートル換算して渡してください。
トラップその2:軸対称(Mid Plane)の「深さ」の解釈
「軸対称(Mid Plane)」を指定したとき、パラメータで渡す深さは「中心面から片側への距離」なのか、それとも「トータルの幅」なのか、APIのバージョンやフィーチャの種類によって混乱しがちです。
基本的には「中心面からのオフセット距離(片側分)」として処理されますので、トータルで20mmの溝を彫りたい場合は、その半分の `10mm (0.01m)` を指定するのが正解です。ここを間違えると、設計意図の2倍の深さになって慌てることになります。
—
まとめ:あなたのマクロはもう「記録」を超えた
お疲れ様でした!今回は `InsertCutExtrusion3` を用いて、軸対称による高度な切り欠きをVBAで制御する方法を解説しました。
マクロの記録を貼り付けるだけだった状態から脱却し、引数の意味を理解してコードをコントロールできるようになると、SolidWorksを使った自動化の可能性は無限に広がります。
「ここをこう変えたらどう動くだろう?」という知的好奇心を大切に、ぜひご自身の業務環境でも試してみてくださいね。あなたのVBAライフが、より快適で知的で満ち足りたものになりますように!
