RIRで鉄筋に関するCustom Component作成

皆様こんにちは。
AMDlabの翟(テキ)です。
Rhino.Inside.Revit「RIR」について話していきたいと思います。RIRはMcNeelのオープンソースプロジェクトで、現時点300以上のコンポーネントがあり、今後もどんどん増えていくそうです。しかし、鉄筋はおそらくモデル上の特殊性により、それについてのコンポーネントはまだありません。そこで、いくつかの鉄筋コンポーネントを作ってみました。鉄筋と通常のモデルの違いも含めて、共有できればと思います!

コンポーネントの内容は以下三つになります。
1.鉄筋の中心線を取得
2.Instanceから鉄筋の直径を取得
3.梁から鉄筋を取得

最終のコンポーネント接続イメージ

GHでRIRコードを書くときに注意したいこと

・Rhino8ではPython3が登場しましたが、RevitAPIなどの相性を考えると続けてIronPythonを使うほうがよいと思います。
doc = DocumentManager.Instance.CurrentDBDocument がコード内部に書くと、動けないこともありますので、「Active Document」をInputにしたほうがいいです。

エラーメッセー


1.鉄筋の中心線を取得

まずなぜ「ジオメトリ」ではなく、「中心線」を取得する理由について説明させてください。モデルのジオメトリを取得するには、最初に get_Geometry()  を使うことを思い浮かべる人も多いと思います。
でも、鉄筋要素はちょっと特殊で、Solid みたいな実体を持ってるわけじゃなくて、パラメータ駆動でビューに見えているだけです。(ちなみにCivil3Dではソリッドを持っています。)なので get_Geometry()  は他の要素(壁、床など)では機能しますが、鉄筋には効きません。実際の形状は GetCenterlineCurves()  などを使って明示的に取得して、GHで作成する必要があります。
Autodesk 公式フォーラムにも似た質問があります:
🔗 https://forums.autodesk.com/t5/revit-api-forum/rebar-geometry-get-geometry-vs-computedrivingcurves/td-p/10919860


2.鉄筋インスタンスから直径を取得

ご存じの方が多いと思いますが、Revitのパラメータには以下の3種類があります:

・Instance Parameter(インスタンスごと)
・Type Parameter(タイプごと)
・Family Parameter(ファミリに属する)

鉄筋の「Bar Diameter(直径)」はType Parameterなので、鉄筋インスタンスからは直接に見えません。そのため、「鉄筋インスタンス → その鉄筋のタイプ → 直径取得」という流れが必要になります。パラメータの種類については、RIRのガイドにわかりやすく説明されていますので、リンクを載せておきます。参考になればと思います。
https://www.rhino3d.com/en/inside/revit/1.0/guides/revit-revit#the-element-dna


3.梁から鉄筋を取得する方法

Revit API(C#)では、オブジェクトの「子 → 親」の関係は一方通行で、「親(梁)→ 子(鉄筋)」のように逆方向で直接に辿ることはできません。
そのため、ここでは BoundingBox と鉄筋が持つ HostID を使って、対象の梁と紐付いている鉄筋を絞り込んでいます。


おわりに


今回は RIR で鉄筋に関するコンポーネントを作ってみました。
Revit API のデータ構造についての理解も深まり、今後はそれをより意識しながら取り組んでいきたいと思います。


AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

AMDlabのSNSアカウントです!ぜひフォローお願いします✨

■ X(旧Twitter):https://x.com/amdlabinc
■ Instagram:https://www.instagram.com/amdlabinc/
■ Facebook:https://www.facebook.com/amdlab.lnc/

ARTICLES