【テクニカル・上級編】【スケッチ自動化】SketchManager.CreatePolygonを用いた六角ボルト頭部などの正多角形2次元作図と自動寸法拘束 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA】スケッチ自動化の深淵:`CreatePolygon`で描く幾何学と、メモリを支配するエンジニアリング

自動化の黎明期からSolidWorks APIに触れてきた者として言わせてもらえば、多くのエンジニアは「APIを呼び出すこと」に満足しすぎている。真の業務自動化とは、単にマウス操作を代替することではない。SolidWorksの内部メモリ構造を理解し、一筆書きの如く無駄のないジオメトリを生成する「計算機としての最適化」こそが、シニアエンジニアの矜持だ。

今回は、六角ボルトの頭部生成を例に、`SketchManager.CreatePolygon`を用いた正多角形の自動生成と、その後の拘束という「一連のライフサイクル」を極限まで最適化する手法を伝授する。

1. ジオメトリ生成の「重み」を知る

`CreatePolygon`は便利なメソッドだが、安易にループ内で乱用すれば、Undoスタックを肥大化させ、再構築(Rebuild)時間を指数関数的に増大させる。

ここで意識すべきは、「スケッチモードの切り替えコスト」だ。`SketchManager`を呼び出す前には必ず`EditSketch`の状態を確認し、不要な`SelectionManager`の操作を排除する。これが、大規模アセンブリや複雑なパーツ構成における動作安定性を決定づける。

2. 実装:正六角形自動生成とパラメータ拘束

以下のコードは、単に六角形を描くのではない。中心座標、半径、そして回転角を定義し、即座に寸法値をパラメータとして保持する手法だ。

‘ SolidWorks 202X API – 正多角形生成アーキテクチャ
Sub CreateOptimizedHexagon()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketchMgr As SldWorks.SketchManager
Dim swSketchSeg As SldWorks.SketchSegment

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ メモリ最適化:不要な選択解除
swModel.ClearSelection2 True
Set swSketchMgr = swModel.SketchManager

‘ スケッチ面を定義(今回は既存の前面)
swModel.Extension.SelectByID2 “Front Plane”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0
swSketchMgr.InsertSketch True

‘ 正六角形の生成:CreatePolygon(中心X, 中心Y, 中心Z, 頂点X, 頂点Y, 頂点Z, 辺の数)
‘ ※ここで重要なのは、座標を明示的に指定すること。暗黙のオフセットはバグの温床となる。
Set swSketchSeg = swSketchMgr.CreatePolygon(0, 0, 0, 0, 0.01, 0, 6)

‘ 寸法拘束の強制注入
‘ ジオメトリ生成直後の選択状態を維持し、寸法値を付与する
Dim swDim As SldWorks.Dimension
Set swDim = swModel.AddDimension2(0, 0, 0, 0.02, 0, 0, 0.01, 0)
swDim.SystemValue = 0.015 ‘ 15mm外接円半径

‘ スケッチ終了とメモリ解放の規律
swSketchMgr.InsertSketch True

‘ オブジェクトの明示的解放(VBAのガベージコレクションを待たない)
Set swSketchSeg = Nothing
Set swSketchMgr = Nothing
Set swModel = Nothing
End Sub

3. シニアエンジニアが守るべき「3つの鉄則」

A. オブジェクトのライフサイクル管理

VBAのメモリ管理は甘美な罠だ。`Set`したオブジェクトは、プロシージャの終端で必ず`Nothing`を代入し、スタックから強制的に追放せよ。特に`SketchManager`や`SelectionManager`は、SolidWorksのポインタを強く握り続けるため、リークの主原因となる。

B. Windows APIとの連携による「割り込み」

複雑な計算や外部データベース(SQL Server等)からパラメータを取得する際、VBAのシングルスレッド制約がボトルネックとなる。計算負荷が高い場合は、`Sleep`や`DoEvents`で無理に制御せず、Windows API (`kernel32`) を使用してプロセス優先度を一時的に操作する技術も検討すべきだ。

C. レガシー環境への適合性

社内システムが古いSolidWorksバージョンと混在している場合、`Late Binding`(CreateObject)ではなく、`Early Binding`(参照設定)を基本としつつ、`#If Win64 Then`でコンパイル条件分岐を実装せよ。互換性は「運」ではなく「計算」で構築するものだ。

結論:自動化は「芸術」である

正多角形をコードで描くことは、数式を3次元空間に刻み込む行為に他ならない。貴殿が書くコードは、単なる自動化ツールではない。会社の知的財産を支える「エンジニアリング・インフラ」である。

もし、このコードをベースにさらなる大規模自動化を目指すのであれば、次は`EquationManager`(数式マネージャ)を介したパラメータ駆動型の設計アーキテクチャを構築することをお勧めする。

技術に妥協するな。SolidWorksの内部挙動を、君の手中に収めよ。

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