こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私です。
普段、マクロの記録機能を使って「なんだか動くけれど、コードの中身が呪文のようだ……」と途方に暮れていませんか?大丈夫です。そのモヤモヤ、今日ここで完全にクリアにしましょう。
マクロの記録を卒業し、自分の手で自由自在に3Dモデルを生成できるようになると、SolidWorks VBAの景色が一変します。今回はその第一歩として、「原点に対して左右対称(両方向)にボスを押し出す」という、実務で最も頻繁に使うテクニックを徹底解説します。
ここをクリアすれば、あなたも立派なSolidWorks VBAエンジニアの仲間入りです。さあ、一緒に扉を開けましょう!
—
1. なぜ「マクロの記録」だけでは実務で戦えないのか?
複雑な部品を作るとき、私たちはよく「マクロの記録」ボタンを押して操作をVBAに変換します。しかし、出力されたコードを見てみてください。
‘ マクロの記録が吐き出す呪文のようなコードの一例
Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2(“スケッチ1”, “SKETCH”, 0, 0, 0, False, 0, Nothing, 0)
Dim myFeature As Object
Set myFeature = swModel.FeatureManager.ExtrudeFeature2( _
True, False, False, 0, 0, 0.01, 0.01, False, False, False, False, _
1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, _
True, True, True, 0, 0, False)
……どうでしょう? カンマの羅列と意味不明な数値。これでは、押し出しの寸法を「50mmから80mmに変えたい」と思ったときすら、どこを直していいか分かりませんよね。
この `ExtrudeFeature2` メソッドの中身を完全に支配下置くこと。それが、実務で使えるマクロを書くための最初の関門なのです。
—
2. 魔法のメソッド `ExtrudeFeature2` の正体を暴く
ボス(押し出し)フィーチャを生成する `ExtrudeFeature2` には、たくさんの引数(パラメータ)が存在します。すべてを覚える必要はありません。今回注目するのは、「方向2(Direction 2)」を司るパラメータたちです。
一般的な片側押し出しは「方向1」だけに厚みをつけますが、機械部品の多くは「基準面(原点)から左右対称に広がる」形状をしています。これをコードでスマートに実現するのが、今回のテーマです。
押さえておくべき主要な引数の役割
- DraftWhileExtrude1 / DraftAngle1: 方向1の抜き勾配の有無と角度
- Dir1: 方向1の押し出し深さ(単位はメートル!)
- Dir2: 方向2の押し出し深さ(単位はメートル!)
- FlipSideToCut: カットトフィート(今回はボスなのでFalse)
- IsThinFeature: 薄板フィーチャかどうか(今回はソリッドなのでFalse)
- BothDirections: 両方向(対称など)に押し出すかどうかのフラグ
—
3. 【実践】原点対称のボスを生成するVBAコード
それでは、実務でそのままコピペして使える完全版のコードを公開します。
このコードは、既存の平面(ここでは正面=Front Plane)に長方形のスケッチを描き、「トータルで100mmの厚み(方向1に50mm、方向2に50mm)」のボスを生成するものです。
‘ ==============================================================================
‘ 担当: チーフアーキテクト
‘ 概要: 既存のスケッチまたは平面をベースに、両方向対称の押し出しボスを作成するサンプル
‘ ==============================================================================
Sub CreateSymmetricExtrude()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swSkMgr As SldWorks.SketchManager
Dim boolstatus As Boolean
‘ 1. SolidWorksアプリケーションの取得
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
Set swSkMgr = swModel.SketchManager
Set swFeatMgr = swModel.FeatureManager
‘ 2. スケッチの準備(「正面」平面を選択してスケッチモードに入る)
boolstatus = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
If Not boolstatus Then
MsgBox “「正面」平面が見つかりませんでした。”, vbCritical, “エラー”
Exit Sub
End If
‘ 原点中心の長方形を描画 (幅100mm, 高さ60mm と仮定)
‘ 単位系はSolidWorksの内部単位である「メートル」で指定します!
‘ 100mm = 0.1m, 60mm = 0.06m
swSkMgr.InsertSketch True
‘ 中心長方形を描画(中心座標:0,0 から コーナーへ)
Dim vSkLines As Variant
vSkLines = swSkMgr.CreateCenterRectangle(0, 0, 0, 0.05, 0.03, 0)
‘ スケッチを終了
swSkMgr.InsertSketch True
‘ 3. 押し出しフィーチャの作成(ここが今回の核心!)
‘ 引数を整理して美しく記述します
Dim sd1 As Double, sd2 As Double
sd1 = 0.05 ‘ 方向1の深さ:50mm (0.05m)
sd2 = 0.05 ‘ 方向2の深さ:50mm (0.05m)
Dim myFeature As SldWorks.Feature
‘ ExtrudeFeature2の引数詳細:
‘ 1: 形状作成/カット (True=作成)
‘ 2: 矢印反転 (False)
‘ 3: サーフェス作成 (False)
‘ 4: 終端条件 方向1 (0 = 輪郭から / Blind)
‘ 5: 終端条件 方向2 (0 = なし/無効だが、BothDirectionsが効く)
‘ 6: 深度 方向1 (sd1)
‘ 7: 深度 方向2 (sd2)
‘ 8-11: 抜き勾配関連 (False, False, 0, 0)
‘ 12-13: オフセット関連
‘ 14-17: 薄板フィーチャ関連
‘ 18: ★方向2を有効にするフラグ (True)
‘ 19: ★両方向で対称(あるいは個別設定)にするフラグ
‘ 20: ドラフト外側反転など
Set myFeature = swFeatMgr.ExtrudeFeature2( _
True, _ ‘ 1. 押し出しボス (True)
False, _ ‘ 2. 逆方向 (False)
False, _ ‘ 3. サーフェスからの押し出し (False)
0, _ ‘ 4. 終端条件 方向1 (sdBlind)
0, _ ‘ 5. 終端条件 方向2
sd1, _ ‘ 6. 押し出し深さ 方向1 (50mm)
sd2, _ ‘ 7. 押し出し深さ 方向2 (50mm)
False, _ ‘ 8. 抜き勾配 方向1
False, _ ‘ 9. 抜き勾配 方向2
False, _ ‘ 10. 抜き勾配外側 (DraftWhileExtrude)
False, _ ‘ 11. 勾配角度1
0, _ ‘ 12. 勾配角度2
False, _ ‘ 13. オフセット 方向1
False, _ ‘ 14. オフセット 方向2
False, _ ‘ 15. 薄板フィーチャ
False, _ ‘ 16. 薄板タイプ
True, _ ‘ 17. 方向2有効化 (Direction 2) -> ここがポイント!
True, _ ‘ 18. 両方向対称 (Both Directions) -> ここもポイント!
True, _ ‘ 19. プレビュー等
0, 0, False) ‘ 20-22. その他オプション
‘ 4. 後処理
If Not myFeature Is Nothing Then
MsgBox “原点対称の押し出しフィーチャが正常に作成されました!”, vbInformation, “成功”
Else
MsgBox “フィーチャの作成に失敗しました。”, vbCritical, “エラー”
End If
End Sub
—
4. 初学者が絶対にハマる「3つの罠」と回避策
エンジニアとして現場に出る前に、私が何度も踏み抜いてきた「痛い教訓」を共有しておきます。これを知っていれば、エラーが出ても秒速で解決できますよ。
罠その1:単位の罠(ミリで書いちゃう病)
SolidWorksのAPIは、人間が普段考える「ミリ(mm)」を理解しません。すべて「メートル(m)」で指定するのが鉄則です。
- × `sd1 = 50` (50メートルになり、巨大すぎてエラーか無限の空間になります)
- ○ `sd1 = 0.05` (50ミリ = 0.05メートル)
罠その2:スケッチが選択されていない(見えない選択の罠)
コード内で `InsertSketch` を実行する前に、どの面をベースにするか(`SelectByID2`)が正しく実行されていないと、意図しない場所(あるいは宙ぶらりん)にスケッチが作成され、押し出しでエラーが発生します。
コードを実行する前に、必ず対象のパーツファイルが開かれていることを確認してください。
罠その3:引数の数が多すぎて数え間違える
`ExtrudeFeature2` は引数が20個以上あります。VBAでコードを書くときは、上記のコード例のように アンダースコア(`_`)と改行 を使って、1行ずつ意味をコメントアウトしながら記述する習慣をつけましょう。メンテナンス性が劇的に向上します。
—
まとめ:ここをクリアすれば、自動化の未来は明るい!
今回は、`ExtrudeFeature2` メソッドを使った「両方向対称押し出し」の実装方法を解説しました。
- マクロの記録の呪文から脱却し、引数の意味を理解すること
- APIの世界では単位は「メートル」であること
- 「方向2」と「両方向フラグ」をコントロールして対称形状を自由自在に操ること
この3つをマスターしたあなたなら、もう単なる「記録ボタン押しマニア」ではありません。立派なSolidWorks自動化エンジニアです。
日々のモデリング作業で「あ、ここ面倒くさいな、自動化したいな」と感じたら、ぜひ今回のコードを思い出してください。あなたの設計業務が劇的に効率化されることを、心から応援しています。
それでは、次回の極限知見でお会いしましょう!
