前言

Revit 中似乎找不出比楼梯更加复杂的原生几何构件了,但在设计院,楼梯又都是给刚入门的小弟来画的,这个真是尴尬。

楼梯功能

Revit 楼梯功能更新了多少版已无从得知,好在现在只有一种类型的楼梯了。
由构件组成的楼梯,包括以下内容:

  • 梯段:直梯、螺旋梯段、U 形梯段、L 形梯段、自定义绘制的梯段
  • 平台:在梯段之间自动创建,通过拾取两个梯段,或通过创建自定义绘制的平台
  • 支撑(侧边和中心):随梯段自动创建,或通过拾取梯段或平台边缘创建
  • 栏杆扶手:在创建期间自动生成,或稍后放置

楼梯 API

Stairs API 接口:

namespace Autodesk.Revit.DB.Architecture
{public class Stairs : Element{public ElementId MultistoryStairsId { get; }public int NumberOfStories { get; }public int ActualTreadsNumber { get; }public double Height { get; set; }public double TopElevation { get; }public double BaseElevation { get; }public int DesiredRisersNumber { get; set; }public int ActualRisersNumber { get; }public double ActualTreadDepth { get; set; }public double ActualRiserHeight { get; }public static bool IsByComponent(Document document, ElementId stairsId);public ICollection<ElementId> GetAssociatedRailings();public ICollection<ElementId> GetStairsLandings();public ICollection<ElementId> GetStairsRuns();public ICollection<ElementId> GetStairsSupports();public bool IsInEditMode();}
}

和楼梯本身相关的接口:

判断是否是组合楼梯,如果返回 False,即为其它类型楼梯,可能是多年前的楼梯版本:

public static bool IsByComponent(Document document, ElementId stairsId);

和多层楼梯相关接口:

public ElementId MultistoryStairsId { get; }
public int NumberOfStories { get; }

API 创建楼梯

创建步骤:

  1. 构造楼梯的边缘线、踏步线、路径,生成草图形式的梯段,StairsRun.CreateSketchedRun
  2. 给定路径和宽度,用 StairsRun.CreateStraightRun 生成直型梯段;
  3. 给定轮廓,用 StairsLanding.CreateSketchedLanding 生成平台;
    注意,以上步骤必须在 StairsEditScopeTransaction 中完成。

代码源自API文档。

private ElementId CreateStairs(Document document, Level levelBottom, Level levelTop)
{ElementId newStairsId = null;using (StairsEditScope newStairsScope = new StairsEditScope(document, "New Stairs")){newStairsId = newStairsScope.Start(levelBottom.Id, levelTop.Id);using (Transaction stairsTrans = new Transaction(document, "Add Runs and Landings to Stairs")){stairsTrans.Start();// Create a sketched run for the stairsIList<Curve> bdryCurves = new List<Curve>();IList<Curve> riserCurves = new List<Curve>();IList<Curve> pathCurves = new List<Curve>();XYZ pnt1 = new XYZ(0, 0, 0);XYZ pnt2 = new XYZ(15, 0, 0);XYZ pnt3 = new XYZ(0, 10, 0);XYZ pnt4 = new XYZ(15, 10, 0);// boundaries       bdryCurves.Add(Line.CreateBound(pnt1, pnt2));bdryCurves.Add(Line.CreateBound(pnt3, pnt4));// riser curvesconst int riserNum = 20;for (int ii = 0; ii <= riserNum; ii++){XYZ end0 = (pnt1 + pnt2) * ii / (double)riserNum;XYZ end1 = (pnt3 + pnt4) * ii / (double)riserNum;XYZ end2 = new XYZ(end1.X, 10, 0);riserCurves.Add(Line.CreateBound(end0, end2));}//stairs path curvesXYZ pathEnd0 = (pnt1 + pnt3) / 2.0;XYZ pathEnd1 = (pnt2 + pnt4) / 2.0;pathCurves.Add(Line.CreateBound(pathEnd0, pathEnd1));StairsRun newRun1 = StairsRun.CreateSketchedRun(document, newStairsId, levelBottom.Elevation, bdryCurves, riserCurves, pathCurves);// Add a straight runLine locationLine = Line.CreateBound(new XYZ(20, -5, newRun1.TopElevation), new XYZ(35, -5, newRun1.TopElevation));StairsRun newRun2 = StairsRun.CreateStraightRun(document, newStairsId, locationLine, StairsRunJustification.Center);newRun2.ActualRunWidth = 10;// Add a landing between the runsCurveLoop landingLoop = new CurveLoop();XYZ p1 = new XYZ(15, 10, 0); XYZ p2 = new XYZ(20, 10, 0);XYZ p3 = new XYZ(20, -10, 0);XYZ p4 = new XYZ(15, -10, 0);Line curve_1 = Line.CreateBound(p1, p2);Line curve_2 = Line.CreateBound(p2, p3);Line curve_3 = Line.CreateBound(p3, p4);Line curve_4 = Line.CreateBound(p4, p1);landingLoop.Append(curve_1);landingLoop.Append(curve_2);landingLoop.Append(curve_3);landingLoop.Append(curve_4);StairsLanding newLanding = StairsLanding.CreateSketchedLanding(document, newStairsId, landingLoop, newRun1.TopElevation);stairsTrans.Commit();}// A failure preprocessor is to handle possible failures during the edit mode commitment process.newStairsScope.Commit(new StairsFailurePreprocessor());}return newStairsId;
}

效果:

Revit API: Stairs 楼梯相关推荐

  1. Revit API:楼梯元素 Run、Landing、Support

    前言 Revit 目前仅能创建组合楼梯,即所有楼梯都必须是梯段(Run).平台(Landing)以及支撑(Support)组成.另外,栏杆扶手可以附着在它上面. 梯段 - Run 通过 API,可以创 ...

  2. Revit API:找到轮廓族的路径

    前言 以封檐板为例,介绍如何找到某个族中使用的轮廓族. 内容 如下图所示,这是在屋顶边缘家的封檐板: 封檐板的类型中有一个轮廓的属性: 如何通过 Revit API 去获取这个轮廓? 从封檐板获取类型 ...

  3. Revit API、AddInManager、RevitLookup、SDK的用途

    关注公众号及时获取文章更新 NET versions are: .NET 4.0 for Revit 2014, .NET 4.5 for Revit 2015/2016/2017, .NET 4.5 ...

  4. Revit API: Dimension 尺寸标注

    前言 本文介绍 Revit API 的尺寸标注. 内容 在 Revit API 中,尺寸标注相关的有三个类:Dimension.AngularDimension 和 SpotDimension. 后两 ...

  5. Revit API:View 视图概述

    前言 本文介绍 Revit 视图相关的基本接口. 内容 View 继承结构 所有的视图都是继承自 Autodesk.Revit.DB.View,分别对应各种视图类型. View 的实例 以官方给的文件 ...

  6. 为 Revit API 插件创建 WPF 窗口的基本项目(Revit API+WPF 系列 2/3)

    在本系列的第二部分中,我们将讨论在创建 WPF 窗口时应用的基本项目. 为了继续,请确保您的插件项目能够创建 WPF 窗口.如果没有,您最好创建一个具有 WPF 功能的项目模板并创建另一个新项目.然后 ...

  7. Revit API 开发 (10): ExtensibleStorage 外部存储

    前言 很多时候,需要往Revit的文件里面放自己的数据.这里简单介绍一下 Revit API 如何处理数据的保存和读取,并且这些数据是绑定到具体的构件上的.另外,也可以自己创建一个 DataStora ...

  8. Revit API:Element 继承体系

    继 "Revit API 开发周边:得到 Element 的所有子类" 之后,整理了一下所有 Element 的子类,内容源自 Revit SDK 中的 RevitAPI.chm ...

  9. 如何调用Revit API实现风道末端与风管连接?

    将风道末端连接到风管上,在Revit的UI界面上操作步骤如下:选择"风道末端"->"风道末端安装到风管上"->"拾取风管". 那 ...

最新文章

  1. mysql 2014_mysql错误之2014
  2. 介绍下 Emacs 的包管理功能,感觉还是比较方便的
  3. 浅析call和apply的不同
  4. sql server简单查询
  5. 单用户修改root密码--centos6.2
  6. ./configure make make install详解
  7. 软件观念革命:交互设计精髓_最全交互设计书单
  8. Unity 创建fnt字体
  9. 程序员的算法趣题 python3 - (4)
  10. kernel 打印时间戳
  11. 算法笔记(六):差分法
  12. 自动化构建部署(CICD)
  13. 数据库SQL语句检索相关
  14. 二叉树的构造以及基本操作
  15. 外线座机无法接入到程控交换机问题处理
  16. MyEclipse安装Vue
  17. 苹果推iOS游戏手柄,掌上游戏主机格局变天?
  18. 蓝桥杯赛前真题 Python组 Day 4
  19. webbench安装过程
  20. 解放双手,一键自动完成2022京东618任务

热门文章

  1. Ogre水面倒影的实现
  2. select Into用法
  3. 那些“认怂”的中年人,才是真强大
  4. 【DB2】DB2安装
  5. java中thread类定义在哪个包中,Thread类位于下列哪个包中?()A、javA、ioB、javA、langC、j......
  6. Nacos之服务治理
  7. (训练一)王朗自然保护区---目标检测数据集介绍  balancap/ssd训练介绍
  8. 字节的管理模式,比阿里更先进吗?
  9. Java中集合和数组的区别
  10. ElasticSearch 安装