【入門編】【ミラー・パターン】FeatureManager.FeatureCircularPattern2を使った円筒形状の等配リブ・穴の高速自動配列 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA】円周パターンで設計を自動化せよ!FeatureCircularPattern2を掌握する極限の技術

こんにちは。設計自動化の深淵へようこそ。

「マクロの記録」ボタンを押して生成される、あの冗長で不安定なコードに頼るのは今日で終わりにしましょう。現場で本当に使えるエンジニアは、APIの内部構造を理解し、最短距離で目的のジオメトリを生成します。

今回は、インペラの羽根やフランジのボルト穴など、「円周上の等配」を爆速で処理する`FeatureCircularPattern2`メソッドの極意を伝授します。

1. なぜ「マクロの記録」ではダメなのか?

SolidWorksの「マクロの記録」は、操作をそのままなぞるため、ハードコーディング(固定値の書き込み)の塊になります。
「3つ穴の時は動くけど、4つ穴に変更したらエラーになる」といったマクロは、自動化とは呼べません。

今回学ぶ`FeatureCircularPattern2`は、引数を動的に制御することで、「何個でも、どんな軸でも、一瞬で生成する」という設計の自動化を実現するための要石です。

2. 実践コード:円周パターンの完全自動化

このコードは、現在選択しているフィーチャを、中心軸を中心に指定個数だけ等配コピーします。

Sub CreateCircularPattern_Expert()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.Feature

‘ インスタンス取得(ここを省略するとマクロが不安定になります)
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager

‘ 設定値の定義
Dim patternCount As Long: patternCount = 8 ‘ 配列する個数
Dim patternAngle As Double: patternAngle = 2 3.14159265358979 ‘ 360度(ラジアン指定)
Dim bEqualSpacing As Boolean: bEqualSpacing = True ‘ 等間隔か?
Dim bPatternSeedOnly As Boolean: bPatternSeedOnly = False ‘ 最初のフィーチャのみか?

‘ 【極意】選択状態が全て。パターン化したいフィーチャと軸を選択しておくこと
‘ FeatureCircularPattern2(個数, 角度, 等間隔か, 反転, インスタンススキップ, 軸, フィーチャ…)
Set swFeat = swFeatMgr.FeatureCircularPattern2( _
patternCount, _
patternAngle, _
bEqualSpacing, _
False, _
False, _
Nothing, _
“”) ‘ 引数に空文字を渡すと「現在選択されているもの」がターゲットになります

If swFeat Is Nothing Then
MsgBox “生成失敗。パターン化するフィーチャと回転軸を選択していますか?”, vbCritical
Else
swModel.GraphicsRedraw2 ‘ 画面の更新
End If
End Sub

3. このコードを使いこなすための3つの鉄則

① 引数 `FeatureCircularPattern2` の「Nothing」の罠

このメソッドの引数にある`”SelectAxis”`(回転軸)を`Nothing`にすると、SolidWorksは自動的に現在選択されている「軸」や「円筒面」を探しに行きます。
明示的に指定するのも手ですが、実務では「あらかじめ軸を選択させる」運用にすることで、コードの汎用性が劇的に向上します。

② ラジアンの壁

SolidWorksのAPIは、角度を度数法(°)ではなく弧度法(ラジアン)で扱います。`360度 = 2 Pi` です。ここを間違えると、計算が合わず「なぜか配列されない」という現象に陥ります。

③ エラーハンドリングは「フィーチャの状態」を見る

マクロが失敗する最大の原因は、「パターン化しようとしているフィーチャが既に壊れている」ことです。`Set swFeat = …` の戻り値が `Nothing` になっていないかを必ずチェックしましょう。これができれば、あなたはもう脱初心者です。

4. ステップアップ:さらに高みを目指す君へ

このテクニックをマスターしたら、次は以下の機能に挑戦してみてください。

  • インスタンススキップ: 特定の箇所だけ穴を飛ばす(`FeatureCircularPattern2`には`vSkipArray`という引数もあります)。
  • 動的プロパティ取得: モデルから円筒面の直径を読み取り、自動的にボルト穴の径や配置個数を算出する。

ここまでくれば、設計者は「手作業で配置する」という退屈な労働から完全に解放されます。

最後に:自動化とは「思考の自動化」である

APIを叩くことは、単なる作業の効率化ではありません。「どうすれば最もスマートに、かつ誰が実行しても同じ結果が出るか」という設計思想をコードに落とし込む作業です。

今回のコードを自分のツールボックスに入れて、ぜひ明日からの設計業務を「爆速」に変えてください。何か詰まったら、いつでも戻ってきてください。君の挑戦を応援しています。

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