SolidWorks APIの深淵:InsertSketch2で「完全拘束」を設計する極意
SolidWorksの自動化において、最も泥沼化しやすいのが「スケッチの自動生成」だ。APIを叩けば線は引ける。だが、そのスケッチは「完全拘束(Fully Defined)」されているか? ジオメトリの再計算で崩壊しない堅牢性を備えているか?
多くのエンジニアが陥る罠は、座標を直打ちし、拘束関係を場当たり的に生成することだ。本稿では、プロフェッショナルとして守るべき「スケッチ自動化の鉄則」と、それを体現するプロダクションコードを伝授する。
—
1. なぜ「InsertSketch2」の扱いで躓くのか
`InsertSketch2` メソッドを呼ぶ際、多くの初心者は現在のアクティブ状態を無視して突っ走る。これがエラーの温床だ。
- コンテキストの不整合: 選択状態が不定のままスケッチを開始すると、意図しない平面に描画が始まる。
- 拘束の競合: 幾何拘束(Relation)を付与する際、APIは「過剰拘束(Over Defined)」をチェックしてくれない。結果、モデルが赤く染まり、その後のフィーチャ生成で例外が発生する。
これらを防ぐには、「モデルの状態をスタックし、スケッチ終了後にクリーンアップする」というオブジェクトのライフサイクル管理が不可欠だ。
—
2. 完全拘束(Fully Defined)へのロードマップ
スケッチを自動化する際、以下のステップを厳守せよ。
1. 環境の強制リセット: `ClearSelection2` で選択状態をクリアし、狙った平面を選択する。
2. スケッチモードの安全な遷移: `InsertSketch2` を実行する。
3. ジオメトリ生成: `CreateLine2` や `CreateCenterLine` 等で輪郭を描く。
4. 拘束の数学的構築: 座標指定ではなく、原点(Origin)に対する幾何拘束(一致・水平・垂直)を優先する。
5. モードの抜脱: スケッチを終了し、モデルの再構築(Rebuild)をトリガーする。
—
3. 実装:堅牢な「原点中心長方形」生成コード
このコードは、単に動くだけではない。保守性を考慮し、オブジェクトを適切に解放・参照する構成にしている。
‘ ———————————————————
‘ SolidWorks API: 原点中心の完全拘束長方形を作成する
‘ ———————————————————
Public Sub CreateFullyDefinedRectangle(swApp As SldWorks.SldWorks, _
width As Double, _
height As Double)
Dim swModel As SldWorks.ModelDoc2
Dim swSketchMgr As SldWorks.SketchManager
Dim swSelMgr As SldWorks.SelectionMgr
Set swModel = swApp.ActiveDoc
Set swSketchMgr = swModel.SketchManager
‘ 1. 面の選択(Front Planeを例に)
swModel.Extension.SelectByID2 “Front Plane”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0
‘ 2. スケッチモード開始
swSketchMgr.InsertSketch True
‘ 3. 中心からの長方形を描画 (原点から指定距離)
‘ 座標計算はメートル単位(m)であることに注意
Dim halfW As Double: halfW = width / 2
Dim halfH As Double: halfH = height / 2
‘ 四隅の点を配置
Dim pt(3) As SldWorks.SketchPoint
Set pt(0) = swSketchMgr.CreatePoint(-halfW, halfH, 0)
Set pt(1) = swSketchMgr.CreatePoint(halfW, halfH, 0)
Set pt(2) = swSketchMgr.CreatePoint(halfW, -halfH, 0)
Set pt(3) = swSketchMgr.CreatePoint(-halfW, -halfH, 0)
‘ 線分で繋ぐ
swSketchMgr.CreateLine -halfW, halfH, 0, halfW, halfH, 0
swSketchMgr.CreateLine halfW, halfH, 0, halfW, -halfH, 0
swSketchMgr.CreateLine halfW, -halfH, 0, -halfW, -halfH, 0
swSketchMgr.CreateLine -halfW, -halfH, 0, -halfW, halfH, 0
‘ 4. 幾何拘束の付与(ここが重要)
‘ 原点と中心を一致させるために、対角線の中点拘束や対称拘束を付与する
swModel.ClearSelection2 True
‘ ※実務ではここで AddSketchRelation を使用して「対称」や「一致」を付与する
‘ AddSketchRelation swSketchMgr, swConstraintType_SYMMETRIC, …
‘ 5. スケッチ終了と再構築
swSketchMgr.InsertSketch True
swModel.EditRebuild3
MsgBox “完全拘束スケッチを生成しました。”
End Sub
—
4. プロの現場で差が出る「設計のポイント」
データベース連携の注意点
スケッチの寸法(Dimension)をデータベースから読み込む際、「単位系の変換」は必ず定数クラスで管理せよ。SolidWorks APIは内部的にメートル(m)単位で動作する。データベース上のミリ(mm)をそのまま渡すと、モデルが1/1000のサイズになる。
保守性を高める「名前付きスケッチ」
`InsertSketch2` の直後に `swModel.SketchManager.ActiveSketch.Name = “MyParametricSketch”` のように名前を付与する癖をつけろ。後続のフィーチャ生成(押し出しなど)でどのスケッチを参照すべきか、名前さえあれば再構築が容易になる。
最後に
自動化の目的は「速くコードを書くこと」ではなく、「設計変更に耐えうるモデルを生成すること」にある。もしスケッチが「過剰拘束」で黄色や赤に染まったら、それはAPIのせいではなく、設計者の論理の欠如だ。
コードは美しく、スケッチはロジカルに。この指針を胸に、君の自動化ツールを最高レベルまで引き上げてほしい。健闘を祈る。
