Revit二次開發:獲取鏈接模型中的構件及幾何

  • A+
所屬分類:Revit

1.背景

最近工作上做機電專業方面的功能比較多,機電專業的BIM模型有一個特點,就是在生產模型的過程中需要鏈接許多其他專業的模型作為前置條件,因此機電專業的開發需求中很多時候都需要與鏈接模型打交道。鏈接模型中獲取構件跟幾何的方式跟本地模型有所不一樣,剛開始接觸時還真會有些摸不著頭腦。這篇文章就是總結在Revit二開中獲取鏈接模型中的構件和幾何的方法。

2.代碼部分

2.1 獲取鏈接模型中的構件

Revit二次開發:獲取鏈接模型中的構件及幾何

PickObject中的ObjectType選擇LinkedElement即可在本地模型中直接點選到鏈接模型中的構件,但返回的Reference并不是構件的Reference,此處的Reference是整體鏈接模型的一個參照,但其中包含了鏈接構件的ID信息,第四行中的reference.LinkedElementId便是第一行中點選的鏈接構件ID。但想通過ID獲取鏈接構件的Element時,主體的Document必須是鏈接模型的Document,因此第二行先通過整體鏈接模型的Reference獲取到鏈接模型對象RevitLinkInstance,再通過GetLinkDocument方法拿到鏈接模型的Document,最后通過GetElement方法拿到鏈接構件的Element。至此,可以通過Element獲取到跟本地模型一樣的構件信息了。

2.2 獲取鏈接模型中的幾何

Revit二次開發:獲取鏈接模型中的構件及幾何

有的需求要求拾取的不是鏈接模型中的構件,而是構件中的面或線,此時可以選擇用ObjiectType中的PointOnElement枚舉,此交互方式拾取的是在構件面或線上的點,返回的reference中除了整體鏈接模型的參照,還有拾取的面或線的參照。代碼前四行與2.1中獲取連接模型中的構件一致,倒數第二行中的ReferenceInLink()方法是將PickObject返回的Reference轉換為鏈接模型中的Reference,轉換后的linkRefer不再是整體模型的參照,而是具體選擇的幾何的參照。此時再通過前四行中得到的linkElem,

用GetGeometryObjectFromReference()可以拿到linkRefer代表的GeometryObject,再根據需要轉換為Face、Curve等即可獲取到交互中選擇的面或線,此時便可進一步去拿到需要的信息。

2.3 補充

拿到鏈接模型中的構件或幾何后,若是要獲取其相關的坐標信息,此時要注意鏈接模型中的坐標系與本地模型中的坐標系的轉換。通過上述代碼拿到的都是在鏈接模型坐標系下的坐標,而我們開發的功能都是針對本地模型進行的一些操作,因此要通過Transform中的OfPoint()方法將鏈接模型坐標轉換為本地模型坐標。鏈接模型的Transform可以通過RevitLinkInstance中的GetTransform()方法拿到。

文章來源:藍神BIM

推薦應用

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: