SolidWorks APIの深淵へ:フィーチャを自在に操る「走査」の極意
こんにちは。SolidWorksの自動化という荒野を切り拓く皆さんに、今日は「自動化の第一歩」となる最も重要な概念をお伝えします。
皆さんはこれまで「マクロの記録」を使って、ボタンをポチポチ押す作業を自動化してきたかもしれません。しかし、真の自動化エンジニアへの道は、「SolidWorksが頭の中でどう考えているか(オブジェクト構造)」を理解した瞬間から始まります。
今日は、パーツ内のすべてのフィーチャを覗き込み、その正体を暴く「フィーチャ・イテレータ(走査)」の基本をマスターしましょう。
—
なぜ「フィーチャを走査する」のか?
SolidWorksのモデルは、いわば「親子の階層構造」を持つツリーです。フィーチャマネージャーデザインツリーに並んでいるものは、プログラム上ではすべて「IFeatureオブジェクト」という部品の集合体です。
ここを自由に歩き回れるようになれば、特定のフィーチャを特定してパラメータを変更したり、不要なフィーチャを削除したり、あるいは設計ルールに適合しているかチェックする検図ツールを作ったりと、可能性は無限大に広がります。
—
これが「フィーチャ走査」の基本コードだ
まずは、現在開いているパーツのフィーチャを一つずつ拾い上げ、イミディエイトウィンドウに名前とタイプを表示するコードを見てみましょう。
Option Explicit
‘ SolidWorksのメインオブジェクト
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Sub ExportFeatureList()
‘ 1. SolidWorksアプリケーションに接続
Set swApp = Application.SldWorks
‘ 2. 現在アクティブなドキュメントを取得
Set swModel = swApp.ActiveDoc
‘ ドキュメントが開かれていない場合のガード節
If swModel Is Nothing Then
MsgBox “パーツファイルを開いてから実行してください。”
Exit Sub
End If
‘ 3. 最初のフィーチャを取得(ツリーの先頭)
Set swFeat = swModel.FirstFeature
Debug.Print “— フィーチャ一覧の出力開始 —”
‘ 4. フィーチャがなくなるまでループする
Do While Not swFeat Is Nothing
‘ フィーチャの名前とタイプ(GetTypeName2)を出力
Debug.Print “名前: ” & swFeat.Name & ” | タイプ: ” & swFeat.GetTypeName2
‘ 次のフィーチャへ移動
Set swFeat = swFeat.GetNextFeature
Loop
Debug.Print “— 出力完了 —”
End Sub
—
コードの「本質」を噛み砕く
このコードには、エンジニアとして押さえておくべき3つのポイントがあります。
1. `FirstFeature` と `GetNextFeature` の魔法
SolidWorksのツリーは「連結リスト(Linked List)」という構造です。「今のフィーチャ」から「次のフィーチャ」へポインタを渡すことで、ツリーの最後尾まで旅をします。この「次へ」という概念を理解すれば、どんな複雑な階層も攻略可能です。
2. `GetTypeName2` という窓口
`swFeat.GetTypeName2` は、そのフィーチャが「押出」なのか「フィレット」なのか「スケッチ」なのかを文字列で返してくれます。これを条件分岐(`If` や `Select Case`)で振り分ければ、「特定のフィーチャだけ色を変える」「特定のフィーチャ以外を削除する」といった魔法が使えます。
3. 「ガード節」の重要性
プロのコードには必ず「想定外」への対策があります。`If swModel Is Nothing` のようなコードを挟むことで、ファイルが開かれていない時のエラー(実行時エラー)を未然に防ぐことができます。
—
初心者が陥りやすい罠:サブフィーチャの存在
実は、今回のコードには一つだけ「見えていない世界」があります。それは「サブフィーチャ」です。
例えば、「パターン」や「ミラー」の中にあるフィーチャは、通常ルートの階層には表示されません。これらを見つけるには、再帰処理(自分自身を呼び出す関数)が必要になります。
ですが、まずは今回の「ルート階層の走査」をマスターしてください。これができれば、SolidWorks APIの半分を理解したも同然です。
—
次のステップへ
コードをコピペして実行し、イミディエイトウィンドウに名前がズラリと並んだ時の感動を、ぜひ味わってください。それが自動化エンジニアとしての最初の快感です。
「ここがうまく動かない」「このタイプはどうやって判定するの?」といった疑問があれば、いつでも聞いてください。皆さんの設計業務が、VBAの力でより創造的なものになるよう、これからも導いていきます。
さあ、エディタを開いて、新しい自動化の世界へ一歩踏み出しましょう!
