Revit二次開(kāi)發(fā):獲取鏈接模型中的構(gòu)件及幾何

  • A+
所屬分類:Revit

1.背景

最近工作上做機(jī)電專業(yè)方面的功能比較多,機(jī)電專業(yè)的BIM模型有一個(gè)特點(diǎn),就是在生產(chǎn)模型的過(guò)程中需要鏈接許多其他專業(yè)的模型作為前置條件,因此機(jī)電專業(yè)的開(kāi)發(fā)需求中很多時(shí)候都需要與鏈接模型打交道。鏈接模型中獲取構(gòu)件跟幾何的方式跟本地模型有所不一樣,剛開(kāi)始接觸時(shí)還真會(huì)有些摸不著頭腦。這篇文章就是總結(jié)在Revit二開(kāi)中獲取鏈接模型中的構(gòu)件和幾何的方法。

2.代碼部分

2.1 獲取鏈接模型中的構(gòu)件

Revit二次開(kāi)發(fā):獲取鏈接模型中的構(gòu)件及幾何

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

2.2 獲取鏈接模型中的幾何

Revit二次開(kāi)發(fā):獲取鏈接模型中的構(gòu)件及幾何

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

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

2.3 補(bǔ)充

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

文章來(lái)源:藍(lán)神BIM

推薦應(yīng)用

發(fā)表評(píng)論

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