【入門編】【形状検証・検査】IMeasure.RayIntersectionを用いた指定方向への干渉・レイキャスト判定自動化マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAで「見えない壁」を検知する:IMeasure.RayIntersectionによる自動干渉チェックの極意

こんにちは。SolidWorksの自動化の世界へようこそ。

「マクロの記録」ボタンを押して操作をなぞるだけの日々は、もう終わりにしましょう。今日あなたが学ぶのは、「プログラムで仮想のレーザーを放ち、パーツの内部構造やクリアランスを物理演算的に検知する」という、中級者への登竜門とも言える高度なテクニックです。

今回扱うのは `IMeasure.RayIntersection`。これを使えば、人間が目視で確認していた肉厚チェックや干渉確認を、瞬時に正確な数値として弾き出すことができます。

1. なぜ「RayIntersection(レイキャスト)」なのか?

設計現場において、「この肉厚は本当に確保されているか?」「この穴は反対側の壁を突き抜けていないか?」といった懸念は常に付きまといます。

これを自動化しようとしたとき、単なる「距離測定」では限界があります。そこで登場するのがレイキャスト(Ray Casting)です。

  • 仕組み: 空間上の特定の点(始点)から、指定したベクトル(方向)へ無限の線を伸ばします。その線がモデルのどの面と、座標幾何学的にどこで交差するかを算出します。
  • メリット: 複雑な形状であっても、線と面の交点さえ取れれば、その間の距離を求めることで「肉厚」が即座に判明します。

2. 実装の心構え:APIとの対話

SolidWorks APIを扱う際、最も重要なのは「今、どのオブジェクトを触っているか」を常に意識することです。`IMeasure` オブジェクトは、モデルをただ表示するのではなく、数学的な「解析対象」として捉えます。

必要な準備

VBAの参照設定は不要ですが、SolidWorksのドキュメント構造(`SldWorks` -> `ModelDoc2` -> `PartDoc`)を頭に叩き込んでおいてください。

3. 実践:レイキャストによる干渉判定マクロ

このコードは、指定した座標からZ軸方向へレイを飛ばし、最初に当たった面までの距離を計測する最小構成です。

Option Explicit

Sub CheckWallThickness()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swMeasure As SldWorks.IMeasure

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

‘ IMeasureオブジェクトの生成
Set swMeasure = swModel.Extension.CreateMeasure

‘ 始点(x, y, z)とベクトル(dx, dy, dz)を定義
Dim startPoint(2) As Double
Dim rayVector(2) As Double

startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 ‘ 原点から
rayVector(0) = 0: rayVector(1) = 0: rayVector(2) = 1 ‘ Z軸プラス方向へ

‘ レイキャスト実行
‘ 第1引数:始点, 第2引数:ベクトル, 第3引数:戻り値(交点数)
Dim intersectionPoints As Variant
Dim numIntersections As Long

numIntersections = swMeasure.RayIntersection(startPoint, rayVector, intersectionPoints)

If numIntersections > 0 Then
Debug.Print “交差を検出しました!”
Debug.Print “交点数: ” & numIntersections
‘ 最初の交点座標を取得(3つのDoubleで1つの座標)
Debug.Print “最初の交点: X=” & intersectionPoints(0) & “, Y=” & intersectionPoints(1) & “, Z=” & intersectionPoints(2)
Else
Debug.Print “交差なし。空中に向かって放たれました。”
End If
End Sub

4. 現場で陥りやすい罠と対策

① 「交点が取れない」エラー

多くの初学者がここで躓きます。原因の9割は単位系です。SolidWorks APIは内部的にメートル法(メートル単位)で計算を行います。マクロ内で「10mm」と書きたい場合、コードには `0.01` と記述しなければなりません。

② モデルの選択状態

`IMeasure` は、現在アクティブなドキュメント全体に対して演算を行います。もし「特定のボディだけ」を対象にしたい場合は、`swMeasure.SelectedBodies` を用いて、対象を絞り込む工程を追加してください。

③ パフォーマンスの最適化

レイキャストは計算コストが高い処理です。ループ処理の中で何千回も実行するとSolidWorksがフリーズします。必ず `DoEvents` を挟むか、必要最小限の回数で実行するようにアルゴリズムを設計してください。

5. 先輩エンジニアからのアドバイス

この技術をマスターしたあなたは、もう単なる「オペレーター」ではありません。「設計品質を自動で担保するアーキテクト」です。

まずはこのマクロで「肉厚が1mm未満の場所を赤くハイライトする」といったツールへ発展させてみてください。それができれば、あなたの設計業務の信頼性は劇的に向上します。

「動かない」と悩む時間は、あなたが成長している証です。コードの変数を少しずつ変えて、SolidWorksの反応を楽しんでください。何か行き詰まったら、いつでも戻ってきてくださいね。応援しています!

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