admin 管理员组文章数量: 1086864
Revit API: Stairs 楼梯
前言
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 创建楼梯
创建步骤:
- 构造楼梯的边缘线、踏步线、路径,生成草图形式的梯段,
StairsRun.CreateSketchedRun
; - 给定路径和宽度,用
StairsRun.CreateStraightRun
生成直型梯段; - 给定轮廓,用
StairsLanding.CreateSketchedLanding
生成平台;
注意,以上步骤必须在StairsEditScope
和Transaction
中完成。
代码源自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 楼梯
版权声明:本文标题:Revit API: Stairs 楼梯 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1697519704a271516.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论