【入門編】【スケッチ自動化】SketchManager.CreateSplineを用いた自由曲面ベースの3次元デザインスケッチ自動作図手法 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks自動化の世界へようこそ。
マクロの記録ボタンを押して、手作業をそのままコードにする時代はもう卒業しました。これからは、あなたの頭の中にある数学的な美しさやデザインのロジックを、VBAを通じて一瞬で3次元の形へと昇華させるのです。

今回は、意匠性パーツの命とも言える「自由曲面(スプライン曲線)」の自動生成に挑戦します。
「マクロの記録ではスプラインの制御点がどう記録されていいか分からない」「滑らかな曲線をプログラムから自在にコントロールしたい」そんな悩みを抱えていませんか?

ここをクリアすれば、あなたもSolidWorks APIの真髄にグッと近づけますよ。さあ、一緒に扉を開きましょう!

1. なぜ「SketchManager.CreateSpline」なのか?

SolidWorksで滑らかな曲面や有機的なデザインを作る時、欠かせないのがスプライン曲線です。
人間がマウスでポチポチと点を打って形を作るのは簡単ですが、「数式に基づいた形状」「他システムからの座標データのインポート」「パラメータを変化させたデザインのバリエーション展開」をしようとすると、手作業では太刀打ちできなくなります。

ここで登場するのが、`ModelDoc2.SketchManager.CreateSpline` メソッドです。
このメソッドに「3次元空間上の制御点の座標配列」を丸ごと渡してやると、SolidWorksが一瞬にして美しい滑らかな曲線を描き上げてくれます。

スプライン自動作図の全体像

1. 部品(Part)ドキュメントの新規作成または既存アクティブドキュメントの取得。
2. スプラインを描くスケッチ平面の選択(または作成)
3. 制御点(X, Y, Z座標)を格納した配列の準備
4. `CreateSpline` メソッドの実行。

言葉で言うのは簡単ですが、API特有の「データの渡し方」にちょっとしたコツがあります。そこを優しく紐解いていきましょう。

2. 実践!スプライン自動生成マクロの全コード

まずは、開発現場でそのままコピペして動かせる実用的なコードをお見せします。
VBAの標準モジュールに貼り付けて実行してみてください。フロントビュー(前向きの平面)上に、優雅な波を描くスプライン曲面が自動生成されます。

Option Explicit

Sub Main()
‘ =========================================================================
‘ 【テーマ】SketchManager.CreateSplineを用いた3次元デザインスケッチ自動作図
‘ 概要: 制御点の座標配列をVBAから渡し、滑らかなスプライン曲線を自動生成する
‘ =========================================================================

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketchMgr As SldWorks.SketchManager
Dim boolstatus As Boolean

‘ 1. SolidWorks アプリケーションの取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If

‘ 2. アクティブなドキュメントを取得(なければ新規パーツ作成)
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
‘ ドキュメントがない場合は新規パーツを作成
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 202X\templates\パート.prt”, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “パーツドキュメントを作成できませんでした。”, vbCritical
Exit Sub
End If
End If

‘ 3. スケッチマネージャーの取得
Set swSketchMgr = swModel.SketchManager

‘ 4. 描き始めたい平面(例: “前視” = Front Plane)を選択してスケッチモードに入る
boolstatus = swModel.Extension.SelectByID2(“前視”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
If Not boolstatus Then
MsgBox “基準平面が見つかりませんでした。”, vbCritical
Exit Sub
End If

‘ スケッチの開始
swSketchMgr.InsertSketch True

‘ 5. スプラインの制御点(コントロールポイント)の座標配列を作成する
‘ APIに渡すため、データを「1次元のDouble型配列(Variant型)」で準備します。
‘ 座標系はメートル法(MKS)が基本です。ここでは分かりやすくミリメートルから変換します。
Dim vPoints As Variant
vPoints = CreateSplinePointsData()

‘ 6. スプライン曲線の生成 (CreateSplineの使い方)
‘ 引数に配列をそのまま渡します。
Dim swCurve As SldWorks.SketchSegment
Set swCurve = swSketchMgr.CreateSpline(vPoints)

‘ 7. スケッチの終了
swSketchMgr.InsertSketch True

‘ 完了メッセージ
If Not swCurve Is Nothing Then
MsgBox “スプライン曲線の自動作図に成功しました!”, vbInformation, “SolidWorks VBA 成功”
Else
MsgBox “スプラインの生成に失敗しました。”, vbExclamation, “エラー”
End If

End Sub

‘ =========================================================================
‘ ヘルパー関数: スプラインの制御点座標データを生成する
‘ =========================================================================
Private Function CreateSplinePointsData() As Variant
Dim points() As Double
Dim numPoints As Integer
Dim i As Integer

‘ 制御点の数(今回は5つのコントロールポイントで波を描きます)
numPoints = 5

‘ SolidWorks API(CreateSpline)に渡す配列は、
‘ 配列の要素数が (3 制御点数 – 1) の1次元 Double型配列にする必要があります。
‘ 順番は [X1, Y1, Z1, X2, Y2, Z2, … ] です。
ReDim points(0 To (3 numPoints) – 1)

‘ 座標データを代入(単位はメートル [m])
‘ ポイント1
points(0) = 0.0: points(1) = 0.0: points(2) = 0.0
‘ ポイント2
points(3) = 0.05: points(4) = 0.08: points(5) = 0.0
‘ ポイント3
points(6) = 0.10: points(7) = 0.02: points(8) = 0.0
‘ ポイント4
points(9) = 0.15: points(10) = 0.12: points(11) = 0.0
‘ ポイント5
points(12) = 0.20: points(13) = 0.0: points(14) = 0.0

CreateSplinePointsData = points
End Function

3. ここが重要!コードの核心とAPIの作法

上記のコードの中で、初心者が一番ハマりやすいポイント、そしてSolidWorks VBAを極める上で絶対に知っておかなければならない「核心」を解説します。

① 座標配列の形は「1次元のDouble型」が鉄則

VBAで座標を扱うとき、つい `Dim pt(4, 2) As Double` のような2次元配列や、XYZをまとめたユーザー定義型(Type)を作りたくなりますよね。
しかし、SolidWorks APIの多くは、「平坦化された1次元のDouble型配列(`[X1, Y1, Z1, X2, Y2, Z2…]`)」を要求します。

今回のヘルパー関数 `CreateSplinePointsData` では、まさにこのルールに従って `ReDim points(0 To (3 制御点数) – 1)` という形でメモリを確保し、順番にデータを詰め込んでいます。ここを間違えると、型ミスマッチエラーになるか、変な図形が描画されてしまいます。

② 単位系は常に「メートル(m)」

SolidWorksのドキュメント設定が「ミリメートル(mm)」になっていたとしても、APIの内部世界では常に「メートル(m)」で計算・処理されています。
コード内で `0.05` と書いているのは、つまり `50mm` を意味しています。この単位系の罠を忘れると、「描画されたはずなのに、ミクロすぎて見えない!」というパニックに陥るので注意してください。

③ スケッチコンテキストのライフサイクル

`swSketchMgr.InsertSketch True` は、スケッチの開始と終了を切り替えるスイッチです。

  • 開始前: どの平面にスケッチを描くか(`SelectByID2`)が選ばれている必要があります。
  • 作図中: スケッチモードに入っている間だけ、`CreateSpline` などのジオメトリ生成メソッドが有効になります。
  • 終了時: 必ず `InsertSketch` をもう一度呼んで、スケッチを「閉じ」てください。閉じ忘れると、SolidWorksがスケッチモードのままフリーズしたような状態になり、次の操作を受け付けなくなります。

4. 陥りやすいエラーとスマートな回避策

エラーパターン A: 「オブジェクト変数または With ブロック変数が設定されていません。」 (Run-time error ’91’)

  • 原因: `ActiveDoc` が取得できていない状態で、モデル操作メソッドを呼び出しています。
  • 対策: コードの序盤にあるように、開いているドキュメントがない場合は新規作成するフォールバック処理を必ず組み込みましょう。

エラーパターン B: スプラインがゆがむ、あるいは線が描かれない

  • 原因: 座標の配列のサイズと中身が一致していない、またはすべて同じ座標を指定してしまっている。
  • 対策: デバッグモード(F8キー)で `points` 配列の中身をローカルウィンドウで1つずつ確認し、意図した通りの3次元座標が格納されているかチェックする癖をつけましょう。

5. おわりに:ここから広がる自動化の未来

お疲れ様でした!今回は `SketchManager.CreateSpline` を使って、VBAから滑らかな自由曲面の土台を描き出す手法をマスターしました。

ここをクリアできれば、次は:

  • 複数のスプラインを並べて、`LoftSurfaces`(ロフトサーフェス)で滑らかな3Dボディを構築する
  • 外部のCSVファイルやExcelの数表から座標を読み込んで、完全に自動で意匠面を生成する

といった、プロフェッショナルなジェネレーティブ・デザイン(生成デザイン)の領域へ進むことができます。

基本をしっかり押さえたあなたなら、もうマクロの記録に頼る必要はありません。ご自身のアイデアをコードで形にする爽快感を、ぜひ次の開発でも味わってくださいね。それでは、また次回の知見でお会いしましょう!

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