マクロ記録を卒業し、「設計の目」を持つ。
図面内の幾何公差(GD&T)を自動検図するエンジニアへの道
こんにちは。設計自動化の世界へようこそ。
「マクロの記録」ボタンを押して、操作を記録し、それを少し書き換える。それはSolidWorks VBAの第一歩として素晴らしい出発点です。しかし、もしあなたが「図面の中に配置された幾何公差のルール違反を、AIのように自動で見つけ出したい」と願うなら、そのやり方では限界がやってきます。
なぜなら、マクロの記録は「何をしたか(操作)」は記録できても、「何が正しいか(論理)」を判断することはできないからです。
今日は、単なる操作の自動化を超えて、「図面の内容を理解し、設計ミスを指摘する検図エンジン」の設計思想と、その核となるプログラミング手法について、じっくりとお話ししましょう。
1. 幾何公差(GD&T)を「オブジェクト」として捉える
多くの初学者が陥る罠があります。それは、「幾何公差はただのテキスト(注記)である」と思い込んでしまうことです。
図面上の「垂直度 $\perp$ 0.05 A」という表記を、単なる「文字列」として解析しようとすると、正規表現などの複雑な処理が必要になり、コードは泥沼化します。
プロフェッショナルなアプローチは違います。SolidWorks APIにおいて、幾何公差は「Annotation(注記)オブジェクト」の一種であり、その内部には「公差値」「記号」「データム参照」といった構造化されたデータが保持されています。
私たちが目指すべきは、以下のステップです。
1. 探索: 図面内のすべての「注記(Annotation)」をスキャンする。
2. 識別: その注記が「幾何公差(Geometric Tolerance)」であるかを判定する。
3. 解析: 公差値やデータムの情報を、APIから直接抽出する。
4. 判定: 社内ルール(例:データムがA、B、Cの順であるか等)と照らし合わせる。
5. 警告: 違反があれば、そのオブジェクトの色を変える。
2. 実装の設計図:検図エンジンのコアロジック
では、実際にどのようなコード構造になるのかを見ていきましょう。ここでは、複雑な全体像を理解しやすくするために、エッセンスを凝縮したコード例を提示します。
このコードの肝は、「View(ビュー)を辿り、その中のAnnotationを一つずつ解剖していく」という階層構造の理解にあります。
'**
' テーマ: 幾何公差の自動スキャン・検図エンジン(プロトタイプ)
' 概要: 図面内の幾何公差を抽出し、公差値が大きすぎる場合に赤字で警告する
'**
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim swView As SldWorks.View
Dim swAnn As SldWorks.Annotation
Dim swNote As SldWorks.Note
Dim swGDT As SldWorks.GeometricTolerance ' 幾何公差特有のオブジェクト
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
' 1. 図面ファイルかどうかのチェック(これ、基本ですが超重要です)
If swModel Is Nothing Then Exit Sub
If swModel.GetType <> swDocDRAWING Then
MsgBox "図面ファイルを開いた状態で実行してください。"
Exit Sub
End If
Set swDraw = swModel
' 2. 図面内のすべてのビューを走査する
' 図面には「シート自体」のビューと、配置された「投影図」のビューがあります
Set swView = swDraw.GetFirstView ' 最初のビュー(シート)を取得
Do While Not swView Is Nothing
' 3. ビュー内のすべての注記(Annotation)を走査する
Set swAnn = swView.GetFirstAnnotation2
Do While Not swAnn Is Nothing
' 注記のタイプが「幾何公差」かどうかを判定
' swAnnotationType_e.swAnnotationType_GeometricTolerance を使用
If swAnn.GetType = swAnnotationType_e.swAnnotationType_GeometricTolerance Then
' 注記オブジェクトから、具体的な幾何公差データへキャスト(変換)
' Noteオブジェクトを経由して幾何公差情報にアクセスします
Set swNote = swAnn.GetSpecificAnnotation
' ※APIの仕様により、NoteオブジェクトからGeometricToleranceへアクセスする流れになります
' --- ここからが「検図ロジック」の核心 ---
' 例: 公差値を取得して、社内ルール(例: 0.05mm超はNG)と比較する
' 本来はswGDT.ToleranceValueなどで取得しますが、
' ここでは概念を示すために、注記のテキストを解析する例とします
Dim noteText As String
noteText = swNote.GetText
' 【検図ルール1】公差値のチェック(簡易的な実装例)
' 本来はAPIで数値として取得すべきですが、ロジックのイメージとして
If InStr(noteText, "0.1") > 0 Or InStr(noteText, "0.5") > 0 Then
' ルール違反!赤字でハイライト
Call HighlightError(swNote)
End If
' 【検図ルール2】データムの欠如チェック
' もしテキスト内に "A" などのデータム記号が含まれていなければ警告
If InStr(noteText, "A") = 0 Then
Call HighlightError(swNote)
End If
End If
' 次の注記へ
Set swAnn = swAnn.GetNextAnnotation2
Loop
' 次のビューへ
Set swView = swView.GetNextView
Loop
MsgBox "検図プロセスが完了しました。"
End Sub
'**
' サブルーチン: エラー箇所を視覚的に強調する
'**
Private Sub HighlightError(swNote As SldWorks.Note)
' 注記のテキスト色を赤(RGB: 255, 0, 0)に変更する
' これにより、設計者が「どこが間違っているか」を一目で理解できる
swNote.SetColor Red
End Sub
3. プロが教える「陥りやすい落とし穴」
このコードを動かそうとしたとき、あるいは自分で書き直そうとしたとき、あなたは必ずいくつかの壁にぶつかるでしょう。そこを乗り越えるための知見を共有します。
① オブジェクトの「型」の壁
SolidWorks APIは非常に厳格です。`Annotation` オブジェクトは「注記の場所や種類」を知っていますが、「公差の値」は知りません。公差の値を知るには、`Note` オブジェクトを経由し、さらにその中にある幾何公差固有のプロパティにアクセスするという「階層的な型変換」が必要です。これを怠ると、「プロパティが見つかりません」というエラーで止まってしまいます。
② ループの「迷子」問題
`GetFirstView` から `GetNextView` へ、そして `GetFirstAnnotation` から `GetNextAnnotation` へ。この二重ループは、図面が複雑になればなるほど、処理に時間がかかるようになります。
もしパフォーマンスが低下したら、「すべての注記を見るのではなく、特定のレイヤーや、特定のビューのみを対象にする」といったフィルタリングの思考を持ってください。
③ 「見た目」と「データ」の乖離
図面上の文字は、ユーザーが手入力で書き換えている場合があります。APIが返す「公差値」と、ユーザーが「テキストとして書き込んだ文字」が一致しないケースです。
最強の検図ツールを作るなら、「APIから取得した構造化データ」を正(マスター)とし、「テキスト表示」を副(表示用)とするという設計思想を忘れないでください。
4. 次のステップへ:自動検図AIへの進化
今回紹介したのは、あくまで「検図エンジンの土台」です。ここから先は、あなたの設計思想次第でいくらでも進化させられます。
- データムの順序チェック: 「A $\rightarrow$ B $\rightarrow$ C」の順序が、設計標準と矛盾していないか?
- 寸法との整合性: 幾何公差の範囲が、参照している寸法値の公差範囲内に収まっているか?
- レポート出力: 違反箇所をExcelにリストアップし、検図報告書を自動生成する。
これらはすべて、今回学んだ「オブジェクトを走査し、論理で判定する」という基本構造の延長線上にあります。
最後に
マクロの記録から脱却し、APIを直接叩き始めることは、最初はとても苦しい作業です。エラーメッセージの山に、投げ出したくなる夜もあるでしょう。
しかし、一度「オブジェクトの構造」を理解してしまえば、SolidWorksは単なるCADソフトではなく、あなたの命令に従う「忠実な設計助手」へと変わります。
一歩ずつ、着実に。コードの向こう側にある「設計の自動化」という景色を楽しんでください。応援していますよ。
