こんにちは!SolidWorks自動化の現場で泥臭くも美しいコードを書き続けている、君の先輩エンジニアだ。
「マクロの記録」ボタンを押して、マウスでカチカチとスケッチを描いて……気づいたら何百行もの冗長なコードが出来上がっていて頭を抱えた、なんて経験はないかい?
そう、マクロの記録は素晴らしい機能だけど、「正確な座標と半径を指定して、意図通りの円弧(フィレット含む)をプログラムから自在に描く」となると、途端に壁にぶぶつかるんだよね。
今回は、直線と円弧が入り組んだ複雑な輪郭をVBAで完全にコントロールするための最強メソッド――`SketchManager.CreateArcByRadius`の使い方を徹底解説するよ。
ここをクリアすれば、君のSolidWorks VBAスキルは「初学者」の領域を確実に抜け出し、現場で重宝される自動化エンジニアの仲間入りだ。さあ、一緒に本質に迫っていこう!
—
1. なぜ「マクロの記録」だけでは円弧の自動化ができないのか?
まず、敵を知ることから始めよう。
マクロの記録をオンにして円弧を描くと、VBAのコードにはこんな感じのメソッドが出力される。
‘ マクロの記録が吐き出す典型例(非推奨)
boolstatus = swModel.Extension.SelectByID2(“Line1”, “EDGE”, …
swModel.SketchManager.CreateTangentArc …
これの何が問題か分かるかい?
そう、「選択(SelectByID2)に依存している」点だ。画面上のグラフィックスやエンティティの名前(Line1など)が変わったり、モデルの形状が少しでも変わると、コードは一瞬で迷子になり、エラーを吐いて止まってしまう。これが「動かないマクロ」の典型的な原因さ。
私たちが目指すべきプロフェッショナルなコードは、「画面上の選択に一切頼らず、計算された数学的座標(X, Y)から一発でジオメトリを生成する」ことだ。これを実現するのが `CreateArcByRadius` なんだよ。
—
2. `CreateArcByRadius` の仕様を丸裸にする
`SketchManager.CreateArcByRadius` は、円弧の中心座標、半径、そして描画の始点・終点を指定して円弧を生成するメソッドだ。
押さえておくべき座標系の罠
SolidWorksのAPIを扱う上で絶対に忘れてはいけない鉄則がある。
「APIの引数はすべてメートル法(MKS単位系: メートル、ラジアン)で渡す必要がある」ということだ。
普段、私たちは図面を書くときに「ミリメートル(mm)」を使っているよね。でも、VBAからAPIに渡すときは `100mm` なら `0.1` というように、メートルに換算しなければならない。これを忘れると、宇宙規模の巨大な円弧が描かれてSolidWorksがフリーズしたように見える(実際には数キロ先の空間に描かれている)という、初心者が必ず通るホラー現象に見舞われることになる。
—
3. 【実践】正確な円弧を描くVBAコード
百聞は一見に如かず。実際に、原点を基準にして「直線から滑らかに繋がる円弧(フィレット形状)」をプログラムで正確に描画するコードを見せよう。
このコードをSolidWorksのVBAエディタ(VBE)に貼り付けて実行するだけで、アクティブなパーツの「前面(Front)平面」にスケッチと円弧が自動生成される。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSkMgr 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
Set swSkMgr = swModel.SketchManager
‘ 2. スケッチモードに入る(Front平面を指定)
boolstatus = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
swSkMgr.InsertSketch 2 ‘ 2 = 2次元スケッチ開始
‘ — 単位変換の準備(mm から m へ変換する係数) —
Const Conv As Double = 0.001 ‘ 1mm = 0.001m
‘ 3. パラメータの定義(すべてミリメートル単位で直感的に記述)
‘ 【円弧の中心座標】 X = 50mm, Y = 50mm
Dim centerX As Double: centerX = 50# Conv
Dim centerY As Double: centerY = 50# Conv
Dim centerZ As Double: centerZ = 0#
‘ 【半径】 R = 20mm
Dim radius As Double: radius = 20# Conv
‘ 【始点の座標】 (X=50, Y=30) -> 中心から真下方向
Dim startX As Double: startX = 50# Conv
Dim startY As Double: startY = 30# Conv
Dim startZ As Double: startZ = 0#
‘ 【終点の座標】 (X=30, Y=50) -> 中心から真左方向
Dim endX As Double: endX = 30# Conv
Dim endY As Double: endY = 50# Conv
Dim endZ As Double: endZ = 0#
‘ 【回転方向の指定】
‘ 1 = 時計回り (Clockwise), -1 = 反時計回り (Counter-clockwise)
Dim dir As Long
dir = -1 ‘ 反時計回り
‘ 4. CreateArcByRadius の実行
‘ 引数の順番: 中心X, Y, Z, 始点X, Y, Z, 終点X, Y, Z, 方向
Dim swArc As SldWorks.SketchSegment
Set swArc = swSkMgr.CreateArcByRadius( _
centerX, centerY, centerZ, _
startX, startY, startZ, _
endX, endY, endZ, _
dir)
‘ 5. スケッチを終了して確定
swSkMgr.InsertSketch True
‘ ビューを等角投影(イソメトリック)に更新
swModel.ShowNamedView2 “Isometric”, 7
swModel.ViewZoomToFit2
If Not swArc Is Nothing Then
MsgBox “円弧の作図に成功しました!”, vbInformation, “完了”
Else
MsgBox “円弧の作図に失敗しました。座標や半径の関係性を見直してください。”, vbExclamation, “警告”
End If
End Sub
—
4. 現場で陥りやすいエラーと「知的な回避策」
このコードを動かすとき、あるいは自分のオリジナルプログラムに応用するときに、エンジニアたちがよくハマる「落とし穴」が2つある。ここを伝授しておこう。
落とし穴その1:数学的な矛盾(半径と始点・終点の不一致)
`CreateArcByRadius` は非常に正直なメソッドだ。
もしあなたが指定した「中心座標から半径」の距離と、「中心から始点・終点までの距離」にズレがある場合、SolidWorksは機嫌を損ねて円弧を描いてくれない(`swArc` が `Nothing` を返す)。
- 対策:
プログラム内で座標を動的に計算(例えば三角関数などを使用)する場合、浮動小数点の誤差が生じやすい。描画前イミディエイトウィンドウなどで `Sqr((startX – centerX)^2 + (startY – centerY)^2)` が `radius` と一致しているか、厳密には許容誤差(Tolerace)の範囲内かを確認するロジックを挟むと、プロとしてワンランク上の堅牢性が手に入るよ。
落とし穴その2:スケッチ平面のコンテキスト
「あれ、コードはエラーにならないのに何も描画されないぞ?」という場合、大体はスケッチモードの開閉(`InsertSketch`)のタイミングが狂っている。
SolidWorksのAPIは、「今どの平面がアクティブか」「スケッチの中にいるか」というコンテキスト(文脈)を非常に厳しく見る。
他のマクロの残骸でスケッチが開いたままの状態でこれを実行すると、予期せぬ挙動をする。コードの最初と最後で、ドキュメントの状態をクリーンに保つ配慮を忘れないようにしよう。
—
まとめ
今回は `SketchManager.CreateArcByRadius` を使った正確な円弧作図の極意を解説した。
1. マクロの記録(選択依存)から卒業し、座標指定(数学的アプローチ)へ移行する。
2. SolidWorks APIの基本単位は「メートル(m)」であることを忘れない。
3. 中心座標、半径、始点・終点・方向の整合性を保つ。
ここさえクリアしてしまえば、君はもう単なる「マクロの記録係」じゃない。複雑な板金展開図、専用のフランジ形状、あるいは数式から自動生成されるアートのようなカム曲線まで、あらゆる2次元輪郭をVBAの掌(手のひら)の上で踊らせることができるはずだ。
ここをクリアすれば、SolidWorks VBAの基本はバッチリだよ!
次の現場でも、ぜひこの知見をいかしてスマートな自動化を実現してくれ。健闘を祈る!
