【入門編】【スケッチ自動化の実践】SketchManagerとCreateLine2を駆使したパラメトリックな2D輪郭プロファイルの自動生成 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録機能を使って「なんだかよく分からないけれどコードが生成された!」という感動を味わった次は、「自分で計算し、意図した通りの形状をコードで自在に描かせる」という次のステージに進む番です。

今回は、業務効率化の強力な武器となる「スケッチ自動化」、特に`SketchManager`と`CreateLine2`を駆使したパラメトリックな2D輪郭プロファイルの生成手法を徹底解説します。

ここをクリアすれば、あなたも単なる「マクロの記録者」から「SolidWorks APIエンジニア」へと大きくステップアップできます。一緒に優しく、深く、学んでいきましょう!

1. なぜ「マクロの記録」だけでは不十分なのか?

SolidWorksのマクロ記録は素晴らしい機能ですが、出力されるコードは「画面上でマウスがクリックされた絶対座標」をそのまま記録しているに過ぎません。

例えば、「製品の幅(Width)が変わったら、それに追従してスケッチも自動で変わるようなパラメトリックな形状を作りたい」と思ったとき、記録されたコードの数値を一つずつ手動で書き換えるのは悪夢です。

私たちが目指すべきなのは、「変数をベースに座標を動的に計算し、APIへ命令を流し込む」というアルゴリズムの構築です。この根幹を支えるのが、`ModelDoc2` と `SketchManager` です。

2. スケッチ自動化の心臓部:オブジェクトの階層構造を理解する

SolidWorks VBAで図形を描くとき、オブジェクトの「階層(親子関係)」を意識することが極めて重要です。現場でよくあるエラーの多くは、この階層を無視してメソッドを呼び出すことで発生します。

SldWorks.Application (SolidWorks本体)
└─ SldWorks.ModelDoc2 (現在開いているドキュメント:部品やアセンブリ)
└─ SldWorks.SketchManager (スケッチの作成や管理を司るマネージャー)
└─ SldWorks.SketchSegment (実際に描かれた線や円弧のエンティティ)

私たちは、`ModelDoc2` から「今からスケッチを描くモードに入るよ」と宣言し、`SketchManager` を呼び出して「ここに線を一本引いてくれ!」と命令を送る、という流れでコードを組み立てます。

3. 実践:パラメータから矩形(四角形)の輪郭を自動生成するVBAコード

それでは、実務で即座に使えるサンプルコードを見ていきましょう。
今回は、「原点を基準にして、幅と高さを変数で指定するだけで、きれいな四角形のスケッチ輪郭を自動描画するマクロ」を作成します。

以下のコードをSolidWorksのVBAエディタ(VBE)に貼り付けて実行してみてください。

Sub CreateParametricRectangle()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketchMgr As SldWorks.SketchManager
Dim boolstatus As Boolean

‘ 1. アプリケーションとアクティブドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開かれているかチェック
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。部品ファイルを開いてください。”, vbCritical, “エラー”
Exit Sub
End If

‘ 対象が「部品(Part)」であることを確認
If swModel.GetType <> swDocPART Then
MsgBox “このマクロは部品ドキュメントでのみ実行可能です。”, vbExclamation, “確認”
Exit Sub
End If

‘ 2. SketchManagerの取得
Set swSketchMgr = swModel.SketchManager

‘ 3. デフォルトの「前視(Front Plane)」などを選択してスケッチモードに入る
‘ ※ここでは既に平面が選択されている、または正面基準でスケッチを開始すると仮定
swSketchMgr.InsertSketch True

‘ ==========================================
‘ 4. パラメータの定義(単位:メートル法前提の場合は m、mmの場合は要換算)
‘ ※SolidWorksのAPI内部単位は常に「メートル(m)」です!
‘ ==========================================
Dim rectWidth As Double
Dim rectHeight As Double

rectWidth = 100 / 1000 ‘ 100mm をメートルに変換
rectHeight = 50 / 1000 ‘ 50mm をメートルに変換

‘ 5. 4つの頂点座標を計算 (X1, Y1, Z1, X2, Y2, Z2)
‘ 原点(0,0,0)を矩形の左下隅とする
Dim x1 As Double, y1 As Double
Dim x2 As Double, y2 As Double
Dim x3 As Double, y3 As Double
Dim x4 As Double, y4 As Double

x1 = 0: y1 = 0 ‘ 左下
x2 = rectWidth: y2 = 0 ‘ 右下
x3 = rectWidth: y3 = rectHeight ‘ 右上
x4 = 0: y4 = rectHeight ‘ 左上

‘ 6. CreateLine2 を使って線分を順次描画
‘ CreateLine2 (X1, Y1, Z1, X2, Y2, Z2)
Dim seg1 As SldWorks.SketchSegment
Dim seg2 As SldWorks.SketchSegment
Dim seg3 As SldWorks.SketchSegment
Dim seg4 As SldWorks.SketchSegment

Set seg1 = swSketchMgr.CreateLine2(x1, y1, 0#, x2, y2, 0#) ‘ 底辺
Set seg2 = swSketchMgr.CreateLine2(x2, y2, 0#, x3, y3, 0#) ‘ 右辺
Set seg3 = swSketchMgr.CreateLine2(x3, y3, 0#, x4, y4, 0#) ‘ 上辺
Set seg4 = swSketchMgr.CreateLine2(x4, y4, 0#, x1, y1, 0#) ‘ 左辺

‘ 7. スケッチモードを終了する
swSketchMgr.InsertSketch True

‘ 画面を最新の状態に更新
swModel.ViewZoomtoFit2

MsgBox “パラメトリックな矩形スケッチの生成に成功しました!”, vbInformation, “完了”
End Sub

4. 押さえておくべき「APIの急所」と陥りやすい罠

上記のコードには、SolidWorks VBAをマスターする上で絶対に知っておかなければならない極めて重要なポイントが隠されています。初心者が必ずハマる罠をここで先回りしてクリアしておきましょう。

① 単位系の罠:SolidWorks APIは「メートル(m)」の世界

人間は普段、図面を描くときに「mm(ミリメートル)」を使いますよね。「100」と打ち込んだら100mmだと思います。
しかし、SolidWorksのAPI内部(引数に渡す数値)は、単位系に関わらず常に「メートル(m)」で計算されます。

  • `100mm` を渡したいときは `100 / 1000` (または `0.1`)とする必要があります。
  • この変換を忘れると、図形が目に見えないほど小さく描画されたり、エラーの原因になります。

② `CreateLine2` の引数構造

`CreateLine2(X1, Y1, Z1, X2, Y2, Z2)` は、始点と終点の3次元座標を引数にとります。
2Dスケッチであっても、空間的な処理を行っているためZ座標(通常は `0#`)を指定する必要があります。ここを省略すると型不一致などのコンパイルエラーになります。

③ スケッチモードのライフサイクル管理

コード内で `swSketchMgr.InsertSketch True` を実行すると、スケッチの「開始(編集状態への移行)」と「終了(保存して抜ける)」をトグル(切り替え)で行います。
そのため、コードの途中でエラー落ちしてしまうと、SolidWorksが「スケッチ描きっぱなしの状態」でフリーズしたようになります。
実務的なコードを書くときは、エラーハンドリング(`On Error GoTo`)を仕込み、予期せぬエラー時でも確実にスケッチモードを抜けるような堅牢な設計(フェイルセーフ)を意識するとプロフェッショナルです。

5. 次のステップ:3Dフィーチャーへのシームレスな接続

今回作成したスケッチは、そのまま次の工程である「ボス-押し出し(Boss Extrude)」などの3Dフィーチャー作成へ引き渡すことができます。

`ModelDoc2.FeatureManager.FeatureExtrusion2` などのメソッドを組み合わせることで、「数値を入力するだけで、完全に自動で3Dモデルが組み上がるカスタムツール」が完成します。

ここをクリアすれば、定型的な部品のモデリング作業を数秒で終わらせる最強の自動化システムがあなたのものになります。

「ここをもっとこうしたい」「複雑な円弧や拘束(Relation)をコードから付与したい」といった疑問が出てきたら、ぜひ次の扉を開いてみてください。
あなたのSolidWorks自動化の旅を、これからも応援しています!

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