You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Revit API StairsEditScope示例生成楼梯高度异常问题咨询

问题描述

我尝试使用Revit API的StairsEditScope示例,通过自定义方法获取bottomLevel与topLevel并传入CreateStairs方法,相关实现代码如下:

public class Test : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        try
        {
            var uidoc = commandData.Application.ActiveUIDocument;
            var doc = uidoc.Document;
            var view = doc.ActiveView;
            Level levelBottom = LevelUtils.GetCurrentLevel(doc, view);
            Level levelTop = LevelUtils.FindUpperLevel(doc, levelBottom);
            

            CreateStairs(doc, levelBottom, levelTop);

            return Result.Succeeded;
        }
        catch (Exception ex)
        {
            TaskDialog.Show("錯誤", $"{ex.Message}\n\n{ex.StackTrace}");
            throw;
        }
    }
}

但生成的楼梯高度远超topLevel高度,尽管楼梯属性「Constraints」中的层级绑定显示正确,我想知道为何未自动计算两层间高度,是否遗漏了关键步骤。

问题分析与解决

出现这个问题的核心原因是:仅绑定上下层级并不会让Revit自动计算并设置楼梯的实际高度参数,需要手动指定楼梯的顶部标高偏移或者直接设置楼梯的实际高度,同时确保在StairsEditScope的编辑逻辑中正确关联这些参数。

具体需要补充的关键步骤如下:

  • 计算两层标高的高度差:通过levelTop.Elevation - levelBottom.Elevation得到准确的层高值,注意Revit API内部默认使用英尺,若项目用米需通过UnitUtils.ConvertToInternalUnits转换单位。
  • 在创建楼梯时设置高度参数:
    在CreateStairs方法中,拿到楼梯实例后,直接给对应的内置参数赋值:
    Stairs stairs = doc.GetElement(stairsId) as Stairs;
    // 设置顶部偏移为0,让楼梯顶部对齐topLevel
    stairs.get_Parameter(BuiltInParameter.STAIRS_TOP_LEVEL_OFFSET).Set(0);
    // 直接指定楼梯实际高度为两层标高差
    stairs.get_Parameter(BuiltInParameter.STAIRS_ACTUAL_HEIGHT).Set(height);
    
  • 匹配梯段参数:如果自定义了梯段生成逻辑,必须保证踢面数×踢面高度的总和等于计算出的层高,否则Revit会自动拉伸楼梯以匹配梯段总高度,导致最终高度超出预期。
  • 提交前验证参数:在调用StairsEditScope.Commit()前,确认高度相关参数已正确赋值,避免Revit使用默认的超大高度值。

补充后的CreateStairs核心逻辑示例:

private void CreateStairs(Document doc, Level bottomLevel, Level topLevel)
{
    // 计算层高并转换为Revit内部单位(此处假设项目单位为米)
    double height = UnitUtils.ConvertToInternalUnits(topLevel.Elevation - bottomLevel.Elevation, DisplayUnitType.DUT_METERS);
    
    using (var editScope = new StairsEditScope(doc, "Create Custom Stairs"))
    {
        int stairsId = editScope.Start(bottomLevel.Id, topLevel.Id);
        
        using (Transaction t = new Transaction(doc, "Set Stairs Height"))
        {
            t.Start();
            Stairs stairs = doc.GetElement(stairsId) as Stairs;
            stairs.get_Parameter(BuiltInParameter.STAIRS_TOP_LEVEL_OFFSET).Set(0);
            stairs.get_Parameter(BuiltInParameter.STAIRS_ACTUAL_HEIGHT).Set(height);
            t.Commit();
        }
        
        // 此处添加楼梯轮廓、梯段等自定义创建逻辑
        editScope.Commit(new StairsEditScopeFailuresPreprocessor());
    }
}

内容的提问来源于stack exchange,提问作者黃衍齊

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:33