如何通过C#获取Revit元素的所有参数及值 现有代码故障如何修复
Revit C# 获取元素所有参数及对应值代码修复方案
原有代码问题分析
- 仅筛选参数名与元素名称一致的参数,完全过滤了其他参数,无法拿到全部参数结果
element.GetParameters(element.Name)调用后未使用返回结果,属于无效冗余代码- 入参
IList<ElementId> elementIds未被使用,若需批量获取多元素参数,现有逻辑仅支持单个Reference对应元素的处理
修复后代码
场景1:仅获取单个元素的所有参数
/// <summary> /// 获取单个元素的所有参数集合 /// </summary> /// <param name="reference">选中元素的引用</param> /// <param name="doc">当前Revit文档</param> /// <returns>元素所有参数列表</returns> public IList<Parameter> GetAllParametersOfSingleElement(Reference reference, Document doc) { // 若原有SelectElement方法已做空值校验、异常处理等逻辑,可以替换下方代码 Element element = doc.GetElement(reference); if(element == null) return new List<Parameter>(); IList<Parameter> allParams = new List<Parameter>(); foreach (Parameter p in element.Parameters) { allParams.Add(p); } // 也可以用LINQ简化实现:return element.Parameters.Cast<Parameter>().ToList(); return allParams; }
场景2:批量获取传入ID集合的所有元素参数
/// <summary> /// 批量获取多个元素的所有参数集合 /// </summary> /// <param name="doc">当前Revit文档</param> /// <param name="elementIds">待获取参数的元素ID集合</param> /// <returns>所有元素的参数列表,可自行增加元素标识区分参数所属元素</returns> public IList<Parameter> GetAllParametersOfMultipleElements(Document doc, IList<ElementId> elementIds) { IList<Parameter> allParams = new List<Parameter>(); foreach (ElementId id in elementIds) { Element element = doc.GetElement(id); if(element == null) continue; foreach (Parameter p in element.Parameters) { allParams.Add(p); } } return allParams; }
获取参数对应值的方法
拿到Parameter对象后,可根据需求选择对应方法取值:
- 直接获取用户界面显示的参数值:调用
p.AsValueString() - 根据参数存储类型精准取值:
- 存储类型为字符串:
p.AsString() - 存储类型为数值:
p.AsDouble(),返回值为Revit内部单位值,如需转成项目单位可配合UnitUtils.ConvertFromInternalUnits()方法转换 - 存储类型为元素ID:
p.AsElementId() - 存储类型为整数/布尔值:
p.AsInteger(),布尔值场景下1对应True,0对应False
- 存储类型为字符串:
内容的提问来源于stack exchange,提问作者user16687043
相关产品推荐
相关产品推荐

