• Revit SDK:StairsAutomation


    前言

    这个例子是介绍如何通过 API 创建楼梯。可以参考相关内容:Revit API: Stairs 楼梯

    内容

    例子中总共创建了7个楼梯,每个楼梯的创建方式会有一些差异。楼梯作为一个特殊的组合构件,它实际上是三个子类型构件组成的,梯段、平台和支撑。支撑是跟着梯段和平台的,通过API不能单独创建。

    创建的底层操作

    下面介绍最终调用的梯段和平台的创建。

    楼梯梯段

    IStairsRunComponent 的接口

    IStairsRunComponent 是一个接口,用于创建楼梯梯段。

    public interface IStairsRunComponent
    {
    	// 创建楼梯梯段
    	StairsRun CreateStairsRun(Document document, ElementId stairsId);
    	// 梯段底部标高
    	double RunElevation{ get; }
    	// 梯段顶部标高
    	double TopElevation{ get; }
    	// 梯段的宽度
    	double Width{ get; set;	}
    	// 梯段的路径
    	IList<Curve> GetStairsPath();
    	// 第一个踏步的线
    	Curve GetFirstCurve();
    	// 最后一个踏步的线
    	Curve GetLastCurve();
    	// 下一个梯段的起点
    	XYZ GetRunEndpoint();
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    IStairsRunComponent 的实现

    有四个 IStairsRunComponent 的实现:

    1. CurvedStairsRunComponent - 创建一个构件级别的弧形梯段
    2. SketchedCurvedStairsRunComponent - 创建一个草图级别的户型梯段
    3. StraightStairsRunComponent - 创建一个构件级别的直梯段
    4. SketchedStraightStairsRunComponent - 创建一个草图的直梯段
    CurvedStairsRunComponent

    调用静态方法 StairsRun.CreateSpiralRun

    public Autodesk.Revit.DB.Architecture.StairsRun CreateStairsRun(Document document, ElementId stairsId)
    {
    	m_stairsRun = StairsRun.CreateSpiralRun(document, stairsId, TransformPoint(m_center), Radius, 0, m_includedAngle, true, StairsRunJustification.Center);
    	Width = m_outerRadius - m_innerRadius;
    	document.Regenerate(); // to get updated width
    	return m_stairsRun;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    SketchedCurvedStairsRunComponent

    调用静态方法 StairsRun.CreateSketchedRun

    public Autodesk.Revit.DB.Architecture.StairsRun CreateStairsRun(Document document, ElementId stairsId)
    {
    	m_stairsRun = StairsRun.CreateSketchedRun(document, stairsId, GetRunElevation(), Transform(GetRunBoundaryCurves()), Transform(GetRunRiserCurves()), Transform(GetStairsPath()));
    	document.Regenerate();
    	return m_stairsRun;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    StraightStairsRunComponent

    调用静态方法 StairsRun.CreateStraightRun

    public Autodesk.Revit.DB.Architecture.StairsRun CreateStairsRun(Document document, ElementId stairsId)
    {
    	m_stairsRun = StairsRun.CreateStraightRun(document, stairsId, Transform(GetRunStairsPath()), StairsRunJustification.Center);
    	Width = m_width;
    	document.Regenerate(); // to get updated width
    	return m_stairsRun;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    SketchedStraightStairsRunComponent

    调用静态方法 StairsRun.CreateSketchedRun

    public Autodesk.Revit.DB.Architecture.StairsRun CreateStairsRun(Document document, ElementId stairsId)
    {
    	m_stairsRun = StairsRun.CreateSketchedRun(document, stairsId, GetRunElevation(), GetRunBoundaryCurves(), GenerateRunRiserCurves(), GetStairsPath());
    	document.Regenerate(); 
    	return m_stairsRun;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    楼梯平台

    IStairsLandingComponent 的接口

    IStairsLandingComponent 是一个接口,用于创建楼梯平台。

    public interface IStairsLandingComponent
    {
        // 获取楼梯平台的边缘
        CurveLoop GetLandingBoundary();
        // 获取楼梯平台的标高
        double GetLandingBaseElevation();
        // 创建楼梯平台
        StairsLanding CreateLanding(Document document, ElementId stairsElementId);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    IStairsLandingComponent 的实现

    IStairsLandingComponent 的实现只有一个 StairsRectangleLandingComponent

    StairsRectangleLandingComponent

    调用静态方法 StairsLanding.CreateSketchedLanding

    public StairsLanding CreateLanding(Document document, ElementId stairsElementId)
    {
    	return StairsLanding.CreateSketchedLanding(document, stairsElementId, GetLandingBoundary(), GetLandingBaseElevation());
    }
    
    • 1
    • 2
    • 3
    • 4

    创建的例子

    例子1

    创建了一个楼梯,里面有一个直的构件类型的梯段,最终调用的是 StraightStairsRunComponent
    在这里插入图片描述
    在这里插入图片描述

    例子2

    创建了一个楼梯,里面有两个直的构件类型的梯段,一个草图类型的平台,最终调用的是 StraightStairsRunComponentStairsRectangleLandingComponent
    在这里插入图片描述

    例子3

    创建了一个楼梯,里面有四个直的构件类型的梯段,三个草图类型的平台,最终调用的是 StraightStairsRunComponentStairsRectangleLandingComponent
    在这里插入图片描述

    例子4

    创建了一个楼梯,里面有一个弧形的构件类型的梯段,最终调用的是 CurvedStairsRunComponent
    在这里插入图片描述

    例子5

    创建了一个楼梯,里面有一个弧形的构件类型的梯段,最终调用的是 CurvedStairsRunComponent
    在这里插入图片描述

    例子6

    创建了一个楼梯,里面有一个直的草图类型的梯段,最终调用的是 SketchedStraightStairsRunComponent
    在这里插入图片描述

    例子7

    创建了一个楼梯,里面有一个弧形的草图类型的梯段,最终调用的是 SketchedCurvedStairsRunComponent
    在这里插入图片描述

  • 相关阅读:
    从零开始的力扣刷题记录-第八十七天
    WebSecurityConfigurerAdapter过时的替代方式
    Mac SpringBoot项目 Gradle 7.3 转 Maven 手把手教学,包学会~
    .NET周刊【7月第1期 2024-07-07】
    如何用汇编实现开关控制流水灯
    SynchroTrap:基于相似度的异常检测算法
    详解诊断数据库ODX-F
    IO流文件相关部分
    sed & awk使用简介
    Docker常用命令
  • 原文地址:https://blog.csdn.net/weixin_44153630/article/details/126348069