【入門編】【スケッチ自動化】CreateLine2とCreateCircleByRadius2を組み合わせた2次元基本形状のプログラム作図 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して操作を記録してみたものの、「生成されたコードが呪文のようで意味がわからない」「自分の思い通りのサイズで線や円が描けない」と悩んでいませんか?

大丈夫、安心してください。ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ。

今回は、APIの代表的なメソッドである `CreateLine2`(直線描画)`CreateCircleByRadius2`(円描画) を組み合わせ、2次元の基本形状を寸分たがわず自動作図する極意を、優しく紐解いていきましょう。手作業でのスケッチ作図から完全に解放される快感を、一緒に味わいましょう!

1. なぜ「マクロの記録」だけでは実用的な自動化ができないのか?

SolidWorksのマクロの記録機能は素晴らしい機能ですが、出力されるコードは「その時マウスでクリックした絶対座標」に依存しています。
そのため、少しでもモデルのサイズが変わったり、原点位置がズレたりすると、途端に破綻してしまいます。

プログラミングによるスケッチ自動化の本質は、「数学的な座標計算ロジック」と「APIへの正しい命令の順番」を組み合わせることにあります。

スケッチ作図の黄金律(ライフサイクル)

SolidWorksでAPIを使って線を引く場合、以下の手順を必ず守る必要があります。

1. スケッチ平面の選択(または作成):どこに絵を描くのかを指定します。
2. スケッチモードへの突入:`InsertSketch2` を使って「スケッチに入ります」と宣言します。
3. ジオメトリの生成:`CreateLine2` や `CreateCircleByRadius2` を呼び出します。
4. スケッチモードの終了:`InsertSketch2` でスケッチを閉じます。

この手順を飛ばしたり、順番を間違えたりすると、エラー(あるいは沈黙の無視)が起きるので注意してください。

2. 登場する主要APIメソッドの正体

今回使用する2つのメソッドの仕様を、現場のプロ目線で押さえておきましょう。

① 直線を描く:`CreateLine2`

  • 構文: `Set SkLine = Model.SketchManager.CreateLine2(X1, Y1, Z1, X2, Y2, Z2)`
  • 意味: 始点 `(X1, Y1, Z1)` から終点 `(X2, Y2, Z2)` に向かって直線を引き、その線(SketchSegmentオブジェクト)を返します。
  • 注意点: 単位はすべてメートル(m)です。VBA内では「`0.05`(=50mm)」のように換算して渡すのが鉄則です。

② 円を描く:`CreateCircleByRadius2`

  • 構文: `Set SkCircle = Model.SketchManager.CreateCircleByRadius2(XC, YC, ZC, Radius)`
  • 意味: 中心座標 `(XC, YC, ZC)` と、半径 `Radius`(メートル単位)を指定して円を描画します。
  • 注意点: 直径ではなく「半径」であることに注意してください!よくあるバグの原因第1位が、直径をそのまま入れてしまうミスです。

3. 【実践】長方形と中心円を自動生成するVBAコード

それでは、実際にパーツファイルを新規作成し、原点基準で「幅100mm、高さ60mmの長方形」と「その中心に半径20mmの円」を自動作図する完全版マクロコードを公開します。

このままVBAエディタ(IDE)に貼り付けて実行すれば、すぐに動作を確認できます。

Sub CreateBasicSketch2D()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim boolstatus As Boolean

‘ 1. SolidWorksアプリケーションのオブジェクトを取得
Set swApp = Application.SldWorks

‘ 新規パーツドキュメントを作成(単位は自動的にドキュメントテンプレートに依存。ここではMMGSを想定)
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 2023\templates\図面.prtdot”, 0, 0, 0)
‘ ※環境によってテンプレートのパスは書き換えてください。標準テンプレートがない場合は以下でも代用可:
‘ Set swModel = swApp.NewDocument(“”, 0, 0, 0) ‘ (空白の場合はデフォルト)

If swModel Is Nothing Then
MsgBox “パーツの新規作成に失敗しました。”, vbCritical
Exit Sub
End If

‘ 2. 「フロント平面(Front Plane)」をアクティブにしてスケッチ面にする
boolstatus = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)

If Not boolstatus Then
MsgBox “スケッチ平面の選択に失敗しました。”, vbCritical
Exit Sub
End If

‘ 3. スケッチモードを開始 (True = スケッチ挿入)
swModel.SketchManager.InsertSketch True

‘ —————————————————-
‘ 4. 座標計算とジオメトリ生成ロジック
‘ —————————————————-
‘ 単位系をメートル(m)に換算するための係数
‘ 例: 100mm = 0.1m
Dim w As Double, h As Double, r As Double
w = 0.1 # 幅 100mm
h = 0.06 # 高さ 60mm
r = 0.02 # 円の半径 20mm

‘ 原点を基準として、四隅の座標から長方形(4本の線)を描画
‘ 左下(-w/2, -h/2) -> 右下(w/2, -h/2)
swModel.SketchManager.CreateLine2 -w / 2, -h / 2, 0, w / 2, -h / 2, 0

‘ 右下(w/2, -h/2) -> 右上(w/2, h/2)
swModel.SketchManager.CreateLine2 w / 2, -h / 2, 0, w / 2, h / 2, 0

‘ 右上(w/2, h/2) -> 左上(-w/2, h/2)
swModel.SketchManager.CreateLine2 w / 2, h / 2, 0, -w / 2, h / 2, 0

‘ 左上(-w/2, h/2) -> 左下(-w/2, -h/2)
swModel.SketchManager.CreateLine2 -w / 2, h / 2, 0, -w / 2, -h / 2, 0

‘ 5. 原点(0, 0, 0)を中心とした円を描画
‘ ※CreateCircleByRadius2の引数は「半径」であることに注意!
swModel.SketchManager.CreateCircleByRadius2 0, 0, 0, r

‘ —————————————————-

‘ 6. スケッチモードを終了 (False = スケッチを閉じる)
swModel.SketchManager.InsertSketch False

‘ 視点を等角投影(アイソメ図)に整える
swModel.ViewZoomtoFit2

MsgBox “2次元基本形状の自動作図が完了しました!”, vbInformation, “自動化完了”
End Sub

4. 現場でよくある「ハマりポイント」と対策

このコードを実務に応用する際、多くのエンジニアが躓くポイントを先回りして解説します。

ハマりポイント①:図面単位(mm)とAPI(m)の単位の罠

SolidWorksの内部APIは、すべて「メートル(m)」で計算されます。

  • `100mm` を指定したいときは、必ず `0.1` と記述してください。
  • 初学者のうちは「あれ? 画面いっぱいにデカすぎる線ができた!」または「点にしか見えない微小な線ができた!」というミスが多発します。これは大半がミリとメートルの換算ミスです。

ハマりポイント②:スケッチ平面が選択されていないエラー

`SelectByID2` メソッドで平面(”正面” や “Front Plane”)を選択する際、SolidWorksの言語設定(日本語版か英語版か)によって平面の名称が変わります。

  • 日本語版: `”正面”`、`”上面”`、`”右側面”`
  • 英語版: `”Front Plane”`、`”Top Plane”`、`”Right Plane”`

もしエラーが出る場合は、あらかじめモデルツリー上の正しい名前を確認するか、プレーンオブジェクトを直接変数に取得して選択させてください。

ハマりポイント③:拘束(インテリジェント機能)の暴走

手動でスケッチを描くとき、勝手に「水平・垂直拘束」や「一致拘束」がつきますよね。APIで描画する場合も同様に、意図しない自動拘束がついて形状が歪むことがあります。
実務で本格的な自動化を行う場合は、描画後に `AddConstraint` などの幾何拘束・寸法拘束(ディメンション)をAPIで明示的に付与していくのがプロの作法です。

まとめ

今回は、`CreateLine2` と `CreateCircleByRadius2` を駆使した、2次元スケッチの自動作図の基本をマスターしました。

  • APIはすべて「メートル(m)」単位で計算する
  • 「スケッチ開始 ➔ ジオメトリ生成 ➔ スケッチ終了」のライフサイクルを厳守する
  • ハードコーディングされた座標ではなく、変数を用いたロジックを組む

この3つを抑えておけば、あなたももう「マクロの記録の奴隷」ではありません。自分の手足のようにSolidWorksを動かす自動化エンジニアの第一歩を踏み出せましたね。

ここをクリアでき押し出しボス(`FeatureManager.FeatureExtrusion2`)へとつなげることで、3Dモデルの完全自動生成へとステップアップできます。ぜひご自身の環境で動かして、そのスピード感を体感してください!

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