Revit API を使用して、建設業界での干渉チェック(例えば、梁と配管の干渉)を自動的に検出するアドインを作成しようとしましたが、最終的には Revit API の制約 と 干渉判定の難しさ により、実現が難しいという結論に至りました。本記事では、その経緯と得られた教訓を共有します。
目的
Revit の 3D モデル内で、梁と配管などの要素が干渉しているかを検出するアドインを作成することが目的でした。干渉検出は、建設プロジェクトにおいて非常に重要であり、手動での確認を省略し、効率的な作業を目指していました。
進めたアプローチ
-
Solidオブジェクトの取得
Revit API を使用して、梁や配管などの要素からSolidを取得し、3D ジオメトリとして表現しました。これにより、ジオメトリ間の干渉を判定できると考えました。 -
BoundingBoxを用いた干渉チェック
Revit のSolidクラスには直接的な干渉判定を行うメソッドがなかったため、各SolidのBoundingBoxを比較して、干渉があるかを判定する方法を採用しました。BoundingBox同士が交差している場合に干渉があると判断しました。 -
問題発生
Solidクラスにおいて、干渉判定を行うためのメソッド(例えば、IntersectWithSolidやBooleanOperation)が存在しないため、代替方法としてBoundingBoxを使用しました。しかし、BoundingBoxを用いた方法はあくまで近似であり、実際のジオメトリが交差しているかどうかを正確に判定することができませんでした。
Revit API の制約
-
Solidクラスに交差判定メソッドが存在しない
Revit API では、SolidクラスにはIntersectWithSolidやBooleanOperationといった干渉判定を行うメソッドは提供されていません。このため、Solid同士の干渉チェックを直接行うことは不可能です。 -
BoundingBox比較の限界
BoundingBox比較による干渉チェックは簡易的であり、ジオメトリが実際に交差しているかを正確に確認することはできません。例えば、BoundingBoxが交差していても、実際には形状が交差していない場合もあります。 -
Revit の目的に合ったツールでない
Revit は主にビルディング情報モデル(BIM)の作成や管理を目的としたツールであり、細かいジオメトリの干渉判定を行うために設計されていません。そのため、Revit単体での干渉チェックは難しいと言えます。
代替アプローチ
1. 外部ツールの利用
高精度な干渉判定が必要な場合、Revit の外部ツールを使用することが現実的です。例えば、Navisworks や Solibri などの専用の干渉検出ツールを利用することで、Revit モデル間での干渉を正確に検出できます。これらのツールは、Revit モデルをインポートして干渉を検出する機能を提供しています。
2. Dynamo での視覚的な干渉チェック
Dynamo を使用して、Revit モデル内のジオメトリを視覚的にチェックする方法もあります。Dynamo には、ジオメトリ操作や干渉判定のためのノードがあり、簡単なスクリプトを作成することで干渉の可能性を確認できます。
3. 手動でのチェック
完全な自動化は難しい場合、Revit の「干渉検出」ツールを手動で使用することが有効です。このツールでは、複数のビューやモデル間での干渉を簡単に確認できます。
結論
Revit API では、Solid クラス同士の干渉判定は実現不可能であり、代替方法として BoundingBox 比較を行いましたが、精度が低く、実際の干渉チェックには限界がありました。精度の高い干渉判定を行うためには、Revit 単体ではなく、外部ツールとの連携が必要です。
干渉チェックに関しては、Navisworks や Solibri など、専用のツールを活用することを強くおすすめします。