Revit 2020读取链接模型Project Base Point与Survey Point技术问询
Revit 2020 读取链接模型基点参数适配方案
Revit 2020 对 BasePoint 类的 API 做了优化,原有 2019 版本的代码需要做两处核心调整:一是取消依赖固定索引取基点的逻辑,避免不同项目返回顺序变动报错;二是支持直接用内置属性读取参数,不需要依赖本地化的参数名,兼容性更强。适配后的实现代码如下:
import math # 前置步骤:先获取目标链接实例对应的文档对象,2020不支持直接从当前文档过滤链接内的BasePoint元素 link_doc = target_revit_link_instance.GetLinkDocument() # 从链接文档内过滤BasePoint元素 link_base_pts = FilteredElementCollector(link_doc).OfClass(BasePoint).ToElements() linkProjBasePt_final = [] linkSurveyPt_final = [] # 遍历判断基点类型,替代原有固定索引取值逻辑 for pt in link_base_pts: if pt.Category.Name == "Project Base Point": # 兼容原有LookupParameter写法,也可直接用2020新增的内置属性读取,适配多语言版本更稳定 # 内置属性对应关系:E/W→EastWest,N/S→NorthSouth,Elev→Elevation,Angle to True North→AngleToTrueNorth lpbpEW = pt.LookupParameter('E/W') lpbpNS = pt.LookupParameter('N/S') lpbpElev = pt.LookupParameter("Elev") lpbpAngle = pt.LookupParameter('Angle to True North') linkProjBasePt_final.append(format_length(lpbpEW.AsDouble())) linkProjBasePt_final.append(format_length(lpbpNS.AsDouble())) linkProjBasePt_final.append(format_length(lpbpElev.AsDouble())) linkProjBasePt_final.append(str(round(lpbpAngle.AsDouble() * 180/math.pi,6))) elif pt.Category.Name == "Survey Point": lpbpEW = pt.LookupParameter('E/W') lpbpNS = pt.LookupParameter('N/S') lpbpElev = pt.LookupParameter("Elev") linkSurveyPt_final.append(format_length(lpbpEW.AsDouble())) linkSurveyPt_final.append(format_length(lpbpNS.AsDouble())) linkSurveyPt_final.append(format_length(lpbpElev.AsDouble()))
注意事项
- 如果需要适配多语言版本的Revit,不要用硬编码的参数名,直接调用BasePoint的内置属性即可,不需要处理参数名的语言差异
- 读取链接内的所有元素都需要先通过
RevitLinkInstance.GetLinkDocument()获取链接专属的文档对象,再在该文档内执行过滤器查询
内容的提问来源于stack exchange,提问作者John Kuldeep Roshan Kerketta
相关产品推荐
相关产品推荐

