在C#中访问Autodesk设计自动化幕墙嵌板Host属性的问题
解决幕墙嵌板Host属性无法访问的问题
问题出在你获取的元素是Element类型,而Host属性是Revit API中CurtainWallPanel类的专属属性,直接用Element对象访问自然会报错。
可行解决方法:
- 过滤时直接指定类型为
CurtainWallPanel,或者在循环中安全转换类型 - 增加空值判断,避免转换失败引发异常
修改后的代码示例:
// 幕墙嵌板 var cwp = new FilteredElementCollector(doc) .OfCategory(BuiltInCategory.OST_CurtainWallPanels) .WhereElementIsNotElementType() .OfClass<CurtainWallPanel>() // 直接过滤为CurtainWallPanel类型 .ToElements(); foreach (CurtainWallPanel p in cwp) { // 增加空值判断,防止Host为空的情况 if(p.Host != null) { var cwpCategoryName = p.Host.Category.Name; var hostId = p.Host.Id; var cwpName = p.Host.Name; // 先判断Host是否为Wall类型,再访问WallType if(p.Host is Wall hostWall) { var assemblyCode = hostWall.WallType.LookupParameter("Assembly Code")?.AsValueString(); } } }
补充说明:
- 使用
OfClass<CurtainWallPanel>()可以直接过滤出目标类型的元素,避免后续强转的麻烦 - 必须判断
p.Host是否为空,部分特殊情况下幕墙嵌板可能没有宿主 - 访问
WallType前要确认Host是Wall类型,保证代码严谨性
内容的提问来源于stack exchange,提问作者user426118
相关产品推荐
相关产品推荐

