- A+
1.背景
最近工作上做机电专业方面的功能比较多,机电专业的BIM模型有一个特点,就是在生产模型的过程中需要链接许多其他专业的模型作为前置条件,因此机电专业的开发需求中很多时候都需要与链接模型打交道。链接模型中获取构件跟几何的方式跟本地模型有所不一样,刚开始接触时还真会有些摸不着头脑。这篇文章就是总结在Revit二开中获取链接模型中的构件和几何的方法。
2.代码部分
2.1 获取链接模型中的构件
PickObject中的ObjectType选择LinkedElement即可在本地模型中直接点选到链接模型中的构件,但返回的Reference并不是构件的Reference,此处的Reference是整体链接模型的一个参照,但其中包含了链接构件的ID信息,第四行中的reference.LinkedElementId便是第一行中点选的链接构件ID。但想通过ID获取链接构件的Element时,主体的Document必须是链接模型的Document,因此第二行先通过整体链接模型的Reference获取到链接模型对象RevitLinkInstance,再通过GetLinkDocument方法拿到链接模型的Document,最后通过GetElement方法拿到链接构件的Element。至此,可以通过Element获取到跟本地模型一样的构件信息了。
2.2 获取链接模型中的几何
有的需求要求拾取的不是链接模型中的构件,而是构件中的面或线,此时可以选择用ObjiectType中的PointOnElement枚举,此交互方式拾取的是在构件面或线上的点,返回的reference中除了整体链接模型的参照,还有拾取的面或线的参照。代码前四行与2.1中获取连接模型中的构件一致,倒数第二行中的ReferenceInLink()方法是将PickObject返回的Reference转换为链接模型中的Reference,转换后的linkRefer不再是整体模型的参照,而是具体选择的几何的参照。此时再通过前四行中得到的linkElem,
用GetGeometryObjectFromReference()可以拿到linkRefer代表的GeometryObject,再根据需要转换为Face、Curve等即可获取到交互中选择的面或线,此时便可进一步去拿到需要的信息。
2.3 补充
拿到链接模型中的构件或几何后,若是要获取其相关的坐标信息,此时要注意链接模型中的坐标系与本地模型中的坐标系的转换。通过上述代码拿到的都是在链接模型坐标系下的坐标,而我们开发的功能都是针对本地模型进行的一些操作,因此要通过Transform中的OfPoint()方法将链接模型坐标转换为本地模型坐标。链接模型的Transform可以通过RevitLinkInstance中的GetTransform()方法拿到。
文章来源:蓝神BIM