【SolidWorks API極致】SketchManager.CreatePolygonで実現する「一瞬の正多角形」と堅牢な拘束設計
エンジニア諸君。手作業でボルトの頭部をスケッチし、中心と頂点を拘束し、寸法を入れる……その時間は、君のキャリアにおいて最も生産性の低い瞬間だ。
SolidWorks API、特に`SketchManager`を使いこなせば、その作業は0.1秒で終わる。だが、単にAPIを叩くだけのコードは「動く」だけであり、「壊れる」リスクを孕んでいる。今回は、実務レベルで通用する、極めて堅牢で保守性の高い「正多角形自動生成ルーチン」の設計指針を伝授する。
—
1. なぜ「手動スケッチ」から脱却すべきか
多くのエンジニアが犯す過ちは、スケッチの生成と拘束を切り離して考えていることだ。API経由で作成されたジオメトリは、往々にして「浮いた状態」になる。
正多角形を作成する際、`CreatePolygon`メソッドで形状を出すだけでは不十分だ。
- 完全拘束の義務: 寸法が「駆動」していないスケッチは、後工程で形状が崩れるリスクを孕む。
- 名前付き寸法(Name)の活用: パラメータ駆動を行う場合、`Dimension.Name`に命名規則を設けておかないと、後から修正する際にコードがスパゲッティ化する。
これらを解決するための「戦略的設計」をコードに落とし込む。
—
2. 実践:プロダクションコード(VBA)
以下のコードは、単に六角形を描くだけではない。「どの平面に作成するか」「どの点に拘束するか」「寸法名をどう定義するか」を制御可能な形にしている。
‘ ————————————————————-
‘ 堅牢な正多角形生成ルーチン
‘ @param swModel : 現在のモデル
‘ @param radius : 外接円半径(mm)
‘ @param sides : 多角形の頂点数
‘ ————————————————————-
Sub CreateHexagonHead(swModel As SldWorks.ModelDoc2, radius As Double, sides As Integer)
Dim swSketchMgr As SldWorks.SketchManager
Dim swSketchSeg As SldWorks.SketchSegment
Set swSketchMgr = swModel.SketchManager
‘ 1. スケッチの開始 (APIの作法として、事前に平面を選択しておくことが望ましい)
swSketchMgr.InsertSketch True
‘ 2. 正多角形の生成 (中心:0,0,0 / 半径:radius)
‘ CreatePolygon(centerX, centerY, centerZ, xOnCircle, yOnCircle, zOnCircle)
‘ ※外接円上の点を指定することで半径を定義する
swSketchMgr.CreatePolygon 0, 0, 0, 0, radius / 1000, 0, sides, True
‘ 3. 自動寸法拘束の追加
‘ 寸法を命名し、後からパラメトリックに変更可能にする
Dim swDispDim As SldWorks.DisplayDimension
Set swDispDim = swModel.AddDimension2(0, radius / 2000, 0, radius / 1000, 0, 0)
swDispDim.Name = “HeadRadius@Sketch_Auto”
‘ 4. スケッチの終了
swSketchMgr.InsertSketch True
‘ モデルの再構築を忘れずに
swModel.EditRebuild3
End Sub
—
3. 開発リーダーからの「設計上の鉄則」
① 単位系の呪縛を解け
APIは内部的に「メートル法(m)」で処理される。`radius / 1000`という記述は、君がミリメートル単位で設計していることを明示的にコード化するための防御壁だ。ここを怠ると、スケッチが1000倍のサイズで生成される悲劇が起きる。
② データベース連携を見据えた命名規則
もしこのコードをパーツライブラリ化するなら、`swDispDim.Name`には細心の注意を払え。
`”HeadRadius@Sketch_Auto”`のように、`名前@スケッチ名`というSolidWorksの命名規則に則ることで、後から外部ExcelやSQLデータベースからパラメータを書き換える際に、`swModel.Parameter`メソッドで一発でヒットさせることが可能になる。
③ エラーハンドリングの意識
`swModel.SketchManager`を呼ぶ前に、必ず現在のドキュメントが`swDocPART`であることを確認せよ。また、スケッチモードに入っているかを`swModel.GetActiveSketch2`でチェックするロジックを挟むだけで、デバッグの工数は半分になる。
—
結論:自動化は「設計」である
コードを書いて終わりではない。そのコードが「誰がいつ見ても意図が伝わり、将来の仕様変更にも耐えうるか」が重要だ。
正多角形の自動化は、単なる作図の省力化ではない。「形状の標準化」の第一歩だ。六角ボルトの頭部が常に一定の命名規則、一定の拘束順序で作られるようになれば、君のチームの設計資産は格段に価値を増す。
次に書くコードには、君の「意図」を宿せ。それが、最高峰の自動化エンジニアへの唯一の道だ。
