1.背景
最近工作上做機電專業(yè)方面的功能比較多,機電專業(yè)的BIM模型有一個特點,就是在生產(chǎn)模型的過程中需要鏈接許多其他專業(yè)的模型作為前置條件,因此機電專業(yè)的開發(fā)需求中很多時候都需要與鏈接模型打交道。鏈接模型中獲取構(gòu)件跟幾何的方式跟本地模型有所不一樣,剛開始接觸時還真會有些摸不著頭腦。這篇文章就是總結(jié)在revit二開中獲取鏈接模型中的構(gòu)件和幾何的方法。
2.代碼部分
2.1 獲取鏈接模型中的構(gòu)件
文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
PickObject中的ObjectType選擇LinkedElement即可在本地模型中直接點選到鏈接模型中的構(gòu)件,但返回的Reference并不是構(gòu)件的Reference,此處的Reference是整體鏈接模型的一個參照,但其中包含了鏈接構(gòu)件的ID信息,第四行中的reference.LinkedElementId便是第一行中點選的鏈接構(gòu)件ID。但想通過ID獲取鏈接構(gòu)件的Element時,主體的Document必須是鏈接模型的Document,因此第二行先通過整體鏈接模型的Reference獲取到鏈接模型對象RevitLinkInstance,再通過GetLinkDocument方法拿到鏈接模型的Document,最后通過GetElement方法拿到鏈接構(gòu)件的Element。至此,可以通過Element獲取到跟本地模型一樣的構(gòu)件信息了。文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
2.2 獲取鏈接模型中的幾何
文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
有的需求要求拾取的不是鏈接模型中的構(gòu)件,而是構(gòu)件中的面或線,此時可以選擇用ObjiectType中的PointOnElement枚舉,此交互方式拾取的是在構(gòu)件面或線上的點,返回的reference中除了整體鏈接模型的參照,還有拾取的面或線的參照。代碼前四行與2.1中獲取連接模型中的構(gòu)件一致,倒數(shù)第二行中的ReferenceInLink()方法是將PickObject返回的Reference轉(zhuǎn)換為鏈接模型中的Reference,轉(zhuǎn)換后的linkRefer不再是整體模型的參照,而是具體選擇的幾何的參照。此時再通過前四行中得到的linkElem,文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
用GetGeometryObjectFromReference()可以拿到linkRefer代表的GeometryObject,再根據(jù)需要轉(zhuǎn)換為Face、Curve等即可獲取到交互中選擇的面或線,此時便可進一步去拿到需要的信息。文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
2.3 補充
拿到鏈接模型中的構(gòu)件或幾何后,若是要獲取其相關(guān)的坐標信息,此時要注意鏈接模型中的坐標系與本地模型中的坐標系的轉(zhuǎn)換。通過上述代碼拿到的都是在鏈接模型坐標系下的坐標,而我們開發(fā)的功能都是針對本地模型進行的一些操作,因此要通過Transform中的OfPoint()方法將鏈接模型坐標轉(zhuǎn)換為本地模型坐標。鏈接模型的Transform可以通過RevitLinkInstance中的GetTransform()方法拿到。文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html
文章來源:藍神BIM文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html 文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/27667.html


評論