SolidWorks VBAの真髄:マクロの記録を卒業し、「完全拘束」をコードで操る技術
こんにちは。自動化の深淵へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で不安定なコードに頭を抱えていませんか?
SolidWorksのAPIは、単なる自動化ツールではありません。「3Dモデルの幾何学的定義」を、プログラム言語で記述するアートです。今日は、その第一歩として、最も基礎的かつ重要な「スケッチの完全拘束(Fully Defined)」をマスターしましょう。
なぜこれが重要か? 不完全なスケッチは、後続のフィーチャ生成で「エラーの温床」となるからです。ここをクリアすれば、あなたのマクロは劇的に安定します。
—
1. なぜ `InsertSketch2` なのか?
SolidWorksのAPIには歴史的な経緯もあり、複数のメソッドが混在していますが、`InsertSketch2` は現在でもスケッチ操作の要です。
ここで重要なのは、「スケッチモードに入る」という状態管理です。人間がマウスで「スケッチ」ボタンを押すのと同様、プログラム側でも「今、どの平面でスケッチモードなのか」を正確に把握させる必要があります。
2. 原点中心の長方形を描き、完全拘束するコード
まずは、何も考えずに動かしてみてください。その後で、なぜこのコードが「強い」のかを解説します。
Sub CreateFullyDefinedRectangle()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketchMgr As SldWorks.SketchManager
Dim swSketchSegment As SldWorks.SketchSegment
‘ SolidWorksの接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSketchMgr = swModel.SketchManager
‘ 1. スケッチモード開始(Front Planeを選択)
swModel.Extension.SelectByID2 “Front Plane”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0
swSketchMgr.InsertSketch True
‘ 2. 中心長方形を描画(中心点(0,0,0)と角の点(0.05, 0.05, 0))
‘ ※単位はメートル系です
Dim vRect As Variant
vRect = swSketchMgr.CreateCenterRectangle(0, 0, 0, 0.05, 0.05, 0)
‘ 3. 【重要】スケッチの更新を確定
swModel.ViewZoomtofit2
‘ 4. 完全拘束のコツ:原点への一致(CreateCenterRectangleは自動で拘束される場合が多いですが、
‘ 明示的に中心点を原点に拘束する習慣がトラブルを防ぎます)
‘ ここでは既に中心にあるため、寸法を付与して「完全拘束」にします
swModel.AddDimension2 0.05, 0, 0, 0.1, “D1@Sketch1”
swModel.AddDimension2 0, 0.05, 0, 0.1, “D2@Sketch1”
‘ スケッチ終了
swSketchMgr.InsertSketch True
MsgBox “完全拘束された長方形が作成されました。”
End Sub
—
3. このコードが「プロの作法」である理由
① 座標管理は「メートル」が鉄則
APIの数値入力は、ドキュメントの設定に関わらず「メートル(m)」で行われます。0.05と書けば50mmです。ここをミリメートルで計算してコードを組むと、後で大きな単位エラーを招きます。
② `SelectByID2` での参照
「マクロの記録」では名前が固定されがちですが、実務では `Front Plane` などの標準面を確実に選択する `SelectByID2` を使うのが最も安全です。
③ 完全拘束(Fully Defined)の哲学
スケッチが「青色」の状態(未定義)のままフィーチャを作成するのは、「設計意図を放棄している」のと同じです。
- 幾何拘束: 原点一致、水平・垂直、対称性。
- 寸法拘束: 値の固定。
これらをAPIで明示的に付与することで、モデルの堅牢性が飛躍的に向上します。
—
4. 陥りやすい「罠」
- スケッチが開いたまま: `InsertSketch` を最後に呼ばないと、プログラムが次の工程に進んだ時に「スケッチ編集中です」というエラーで止まります。
- アクティブドキュメントの非存在: `swModel` が `Nothing` になっていないか、常にチェックする癖をつけてください。
- 名前の衝突: `D1@Sketch1` という名前は一意である必要があります。複雑なモデルでは、プログラムで生成した直後に寸法オブジェクトを取得し、そこへ直接値を代入する手法が推奨されます。
—
最後に:先輩からのアドバイス
「マクロの記録」は、あくまでAPIの存在を知るための辞書です。そこに書かれているコードをそのまま使うのではなく、「自分が必要な操作だけを抽出して、整理整頓する」こと。これが自動化エンジニアへの第一歩です。
まずは、このコードを実行して、SolidWorks上で「黒い(完全拘束された)スケッチ」が生成される快感を味わってください。それができれば、次は3D押し出しやパターン機能といった、より高度な領域へ進む準備は万端です。
何か詰まったら、いつでも聞いてください。あなたの自動化の旅を、全力でサポートしますよ。
