如何为通过Revit API新放置的基于面的族实例设置标高?
解决Revit API中基于面族实例标高无法设置的问题
核心原因
基于面的族实例(Face-hosted family instances)的标高参数在放置后默认是只读状态,因为这类族的位置完全由宿主面驱动,Revit不允许直接修改其标高属性。以下是两种可行的解决方案:
方案1:放置时直接指定标高(推荐)
调用NewFamilyInstance的重载方法,选择包含标高参数的版本,在创建实例时直接传入宿主墙体的标高ID:
FamilyInstance placedInstance = doc.Create.NewFamilyInstance( face, locationPoint, direction, familySymbol, hostWall.LevelId // 直接关联宿主墙体的标高 );
注意:部分基于面族可能不支持此重载,若调用失败,说明族定义未暴露标高参数,需先在族编辑器中调整族的参数设置,允许标高关联。
方案2:预配置族类型的默认标高
如果方案1不可用,可提前修改目标族类型的默认标高,再用该类型创建实例:
using (Transaction trans = new Transaction(doc, "Set Family Type Level")) { trans.Start(); // 获取族类型的标高参数 Parameter levelParam = familySymbol.get_Parameter(BuiltInParameter.FAMILY_LEVEL_PARAM); if (levelParam != null && !levelParam.IsReadOnly) { levelParam.Set(hostWall.LevelId); } // 用修改后的族类型创建实例 FamilyInstance placedInstance = doc.Create.NewFamilyInstance( face, locationPoint, direction, familySymbol ); trans.Commit(); }
提示:此方法会修改族类型的全局默认设置,若需仅针对当前实例生效,建议先复制一个新的族类型再修改其标高参数。
内容的提问来源于stack exchange,提问作者emilaz
相关产品推荐
相关产品推荐

