SolidWorks APIの真髄:円筒配列の自動化で「手動作業」という負債を断ち切る
SolidWorksの業務効率化において、多くのエンジニアが陥る罠がある。それは、「GUIの操作手順をそのままコードに落とし込もうとする」ことだ。
特に『円周パターン(Circular Pattern)』の自動化において、`FeatureCircularPattern2`を安易に呼び出し、エラーの海に溺れる開発者を何度も見てきた。今日は、単にコードを動かすだけでなく、「堅牢性・再利用性・パフォーマンス」を極限まで高めた、プロダクションレベルの円周配列自動化の知見を授ける。
—
1. なぜ「記録マクロ」はゴミなのか
SolidWorksの「マクロの記録」で生成されるコードは、ユーザーの選択状態(`SelectionManager`)に依存しすぎている。実務における自動化では、「画面上で何が選択されているか」に一切依存しない設計が鉄則だ。
- 非効率なアプローチ: `swModel.Extension.SelectByID2`を連発し、フィーチャを選択してパターンを実行する。
- プロのアプローチ: 対象となるフィーチャを`IFeature`オブジェクトとして直接握り、パラメータを構造体のように管理し、バックグラウンドで処理を完結させる。
—
2. 堅牢な円周配列生成:プロダクションコード
以下のコードは、インペラの羽やフランジの穴など、既存フィーチャを「軸」を中心に等配するためのテンプレートである。エラーハンドリングと、SolidWorks APIが求めるパラメータの型を厳密に管理している。
‘ —————————————————————————–
‘ 目的: 既存のフィーチャを指定した回転軸で円周パターン化する
‘ 著者: SolidWorks API Architect
‘ —————————————————————————–
Public Sub CreateCircularPattern( _
ByRef swModel As SldWorks.ModelDoc2, _
ByVal featureName As String, _
ByVal axisName As String, _
ByVal count As Long, _
ByVal angle As Double)
Dim swFeatureMgr As SldWorks.FeatureManager
Set swFeatureMgr = swModel.FeatureManager
‘ 1. 対象フィーチャの選択(選択なしで直接操作するための前処理)
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureByName(featureName)
‘ 2. 回転軸の選択(軸名はモデルツリー上の名前と一致させる)
Dim swAxis As SldWorks.Feature
Set swAxis = swModel.FeatureByName(axisName)
‘ 選択状態をクリアしてから対象のみを選択
swModel.ClearSelection2 True
swFeat.Select2 True, 0
swAxis.Select2 True, 0
‘ 3. FeatureCircularPattern2の実行
‘ パラメータ解説:
‘ 1: 数, 2: 角度, 3: 等間隔(True/False), 4: ジオメトリパターン(True/False),
‘ 5: 軸反転, 6: 形状の修正, 7: 参照軸
Dim swPatternFeat As SldWorks.Feature
Set swPatternFeat = swFeatureMgr.FeatureCircularPattern2( _
count, _
angle (PI / 180), _
True, _
False, _
False, _
False)
If swPatternFeat Is Nothing Then
Err.Raise vbObjectError + 513, “CircularPattern”, “パターンの生成に失敗しました。”
End If
End Sub
—
3. 開発者が知るべき「3つの鉄則」
① ジオメトリパターン(Geometry Pattern)の使い分け
コード内の`FeatureCircularPattern2`の第4引数。これを`True`にすると、フィーチャの計算をスキップしてジオメトリのみをコピーする。大量の穴を空ける際は、必ず`True`にせよ。 再計算時間が劇的に短縮され、モデルの破壊(Rebuild Error)を防げる。
② データベース連携と「名前の一意性」
Excel等から数値を読み込んでパターンを生成する場合、モデルツリー上の「名前」をキーにするのは危険だ。
- 対策: フィーチャ生成時にあらかじめ`Feature.Name`をプログラム側で命名し、その名前をプロパティとして保持しておく設計を推奨する。
③ インタフェースの生存期間
SolidWorksのAPIは、COMオブジェクトのキャッシュ管理が極めてシビアだ。ループ内でパターンを何度も生成する場合、必ず`swModel.EditRebuild3`を呼び出してモデルを最新の状態に同期させる必要がある。同期を怠ると、`GetNextFeature`などでオブジェクトの参照先がずれるバグが発生する。
—
4. 最後に:エンジニアとしての心構え
自動化は「楽をするための手段」ではない。「人間が手作業で行うことで発生する、数千分の1のヒューマンエラーをゼロにするための防壁」である。
今回提示したコードは、単なる機能の一部に過ぎない。この上に、あなたが担当している製品の形状ロジック(例えば、インペラの枚数と軸径の相関式など)を乗せることで、真の自動設計システムが完成する。
手作業をコードに変える時、常に自問せよ。「この処理は、100回連続で実行しても一度も止まらないか?」と。その問いをクリアした時、あなたの書くコードは「ただのスクリプト」から「資産」へと昇華する。
健闘を祈る。
