【入門編】【サーフェスモデリング】ModelDocExtension.CreatePlaneFixed2を用いた複雑な3次元傾斜基準面へのスケッチ展開メソッド – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録ボタンを押して生成されるコードを眺める段階はもう卒業しましたか?「自分が思い通りに3次元の空間をコントロールしたい」「複雑な傾斜面の上に、自動でスケッチを配置したい」――そう思っているなら、今回のテーマはまさにあなたのためのものです。

今回は、標準の座標系(正面・上面・右側面)では到底太刀打ちできない、「3次元空間の任意の位置・角度にある傾斜基準面」をVBAで動的に構築し、その上にスケッチを正確に展開する技術を伝授します。

ここをクリアすれば、あなたも立派なSolidWorks VBAのアーキテクトです。一歩ずつ、優しく、そして深く解説していきますよ。

なぜ「任意の傾斜面へのスケッチ展開」で躓くのか?

SolidWorksで自動化を始めると、多くの人が最初に直面する壁がこれです。
「平面(Plane)を新しく作りたいけれど、マクロの記録だと固定された数値や既存面への依存が強すぎて、計算で座標を導き出せない……」

例えば、金型設計や複雑な筐体デザインでよくある、「ある点を通る、特定の法線ベクトルを持った傾斜面」を作りたい場合、通常のGUI操作でもいくつかのステップを踏む必要がありますよね。これをVBAで一発で行うには、SolidWorks APIの隠れた名機能を知る必要があります。

それが今回主役として登場する `ModelDocExtension.CreatePlaneFixed2` です。

鍵を握るAPI:`CreatePlaneFixed2` の正体

通常、基準面を作るには「参照となるサーフェスや面、軸」をあらかじめクリックして選択状態にする必要があります。しかし、VBAの裏側でそれをやろうとすると、選択エラーやコンテキストのズレ(セーフティの罠)に足元をすくわれます。

ここで使う `CreatePlaneFixed2` は、「画面上で何も選択していなくても、原点からの距離や軸の方向(ベクトル)を直接数値で指定して、強制的に基準面を生み出す」という、極めて強力でドライなメソッドです。

幾何計算の基本:どうやって傾斜面を定義するか?

APIに渡すのは、「原点からの距離(あるいは通る点)」と「法線ベクトル(面がどちらを向いているか)」です。
数学的なアプローチが必要になりますが、恐れることはありません。要は「どこに、どの向きの板を置くか」を数字でSolidWorksに教えてあげるだけです。

実践! 3次元傾斜基準面生成&スケッチ展開マクロ

それでは、実際に動くコードを見てみましょう。
今回は、「原点から少し離れた任意の3次元座標を通り、指定した傾斜角を持つ基準面をプログラムで生成し、その上に長方形のスケッチを自動描画する」という完全なプロシージャを用意しました。

ご自身の開発環境(VBAエディタ)の標準モジュールに貼り付けて、そのまま実行してみてください。

Option Explicit

‘ ==============================================================================
‘ 【テーマ】3次元傾斜基準面へのスケッチ自動展開メソッド
‘ 概要: 任意の空間座標と法線ベクトルから基準面を動的生成し、スケッチを描画する
‘ ==============================================================================
Sub CreateTiltedPlaneAndSketch()

Dim swApp As SldWorks.SldWorks
Dim swPart As SldWorks.PartDoc
Dim swModel As SldWorks.ModelDoc2
Dim swModelExt As SldWorks.ModelDocExtension
Dim swPlaneFeature 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 swPart = swModel
Set swModelExt = swModel.Extension

‘ ————————————————————————–
‘ 2. 傾斜基準面の定義(幾何パラメータの設定)
‘ ————————————————————————–
‘ ここでは例として、「X=0.05m, Y=0.05m, Z=0.05m」の点を通る面を定義します。
‘ ※SolidWorksのAPI内部単位は常に「メートル(m)」です!
Dim px As Double, py As Double, pz As Double
px = 0.05: py = 0.05: pz = 0.05

‘ 面の向きを決める法線ベクトル(例: X方向とZ方向に傾いた面)
‘ ベクトルは必ず「単位ベクトル(長さが1)」に正規化しておくのがプロの流儀です。
Dim nx As Double, ny As Double, nz As Double
nx = 0.707: ny = 0.0: nz = 0.707 ‘ 45度傾いたイメージ

‘ ————————————————————————–
‘ 3. CreatePlaneFixed2 を用いた基準面の強制生成
‘ ————————————————————————–
‘ 引数の仕様:
‘ CreatePlaneFixed2(Px, Py, Pz, Nx, Ny, Nz, SecondVectorX, SecondVectorY, SecondVectorZ, Type)
‘ ※今回は第一法線のみで構築するため、第2方向ベクトルは0を指定します。
Dim bRet As Boolean

‘ 選択をクリアしてクリーンな状態を作る(暴走防止の鉄則)
swModel.ClearSelection2 True

‘ 基準面フィーチャの作成実行
Set swPlaneFeature = swModelExt.CreatePlaneFixed2( _
px, py, pz, _
nx, ny, nz, _
0#, 0#, 0#, _
0) ‘ 0 = スタンダードな構築

If swPlaneFeature Is Nothing Then
MsgBox “基準面の生成に失敗しました。ベクトルや位置の値を確認してください。”, vbCritical
Exit Sub
End If

‘ 変更をモデルに反映
swModel.ForceRebuild3 False

‘ ————————————————————————–
‘ 4. 生成した傾斜面を選択し、スケッチモードに突入する
‘ ————————————————————————–
‘ 今作った平面を名前で選択状態にします
bRet = swModel.Extension.SelectByID2(swPlaneFeature.Name, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)

If bRet Then
‘ 選択された平面的に対して新規スケッチを開始
swModel.InsertSketch2 True

‘ ———————————————————————-
‘ 5. スケッチ上にジオメトリ(長方形)を描画する
‘ ———————————————————————-
‘ 傾斜面上のローカル座標系 (U, V) において長方形を描画します
‘ 引数: x1, y1, z1 (対角の始点), x2, y2, z2 (対角の終点)
Dim vRect As Variant
vRect = swModel.SketchManager.CreateCenterRectangle(0, 0, 0, 0.04, 0.02, 0)

‘ スケッチを終了して確定
swModel.InsertSketch2 True

MsgBox “傾斜基準面の生成およびスケッチの展開に成功しました!”, vbInformation, “完了”
Else
MsgBox “作成した基準面の選択に失敗しました。”, vbExclamation
End If

End Sub

ジグザグとした処理に見えるかもしれませんが、コード内のコメントを追えば、SolidWorksの3D空間を自分が支配している実感が湧いてくるはずです。

ここで絶対におさえておきたい「3つの極意」

1. APIの内部単位は「メートル」であることの厳守
画面上では「mm」で設計していても、VBAのコードに渡す数値(`0.05` など)はすべてメートル換算です。ここを間違えると、目に見えないほど巨大な、あるいはミクロすぎる平面が生成されてエラーになります。
2. 法線ベクトルは必ず「正規化(長さが1)」する
ベクトルの長さを1にしておかないと、SolidWorks内部の数学エンジンが計算不能に陥ったり、予期せぬスケール変形を引き起こす原因になります。
3. 処理の前後には `ClearSelection2` を挟む
VBAマクロが暴走する最大の原因は、「前回の選択状態がゴミとして残っていること」です。新しい動作をさせる前には、必ず選択をクリアする習慣をつけましょう。

まとめ:ここをクリアすれば、もう怖くない!

今回扱った `CreatePlaneFixed2` をマスターすれば、もはや人間の手で基準面をポチポチとクリックして選択していく泥臭い作業とはおさらばです。CSVファイルから読み込んだ角度データや、外部計算ソフト(ExcelやPythonなど)からの数値を元に、自由自在に3次元空間へ基準面を配置し、その上で自動作図を行うシステムがあなたの手で構築できるようになります。

「ここをこう変えたらどうなるだろう?」という知的好奇心を大切に、ぜひご自身の環境でもカスタマイズしてみてください。
あなたのSolidWorks自動化ライフが、最高にエキサイティングなものになることを応援しています!

タイトルとURLをコピーしました