Revit SDK 介绍:MultistoryStairs

前言

这个例子介绍了 Revit 多层楼梯的功能。

内容

这个例子默认不在 sample 项目中,需要自己手动加入。并且由于没有在项目的列表中,没有被 Autodesk 官方团队维护,导致并不能正常运行。需要进行一些修改。
这个例子用的接口,可以参考:Revit API: 多层楼梯 MultistoryStairs

运行效果

效果如下,必须在立面中才能正常运行。这个功能没有与时俱进,Revit 新版本中三维视图和剖面视图也有楼层可以选择,可以考虑放开一下这个限制。
在这里插入图片描述

这个例子里有三个命令,分别用于:

  1. 创建多层楼梯,CreateMultistoryStairsCommand
  2. 往多层楼梯中添加楼层,AddStairsCommand
  3. 从多层楼梯中删除楼层, RemoveStairsCommand

关键代码

CreateMultistoryStairsCommand

// 选中一个楼梯,创建多层楼梯
newTran = new Transaction(doc, "Create Multistory Stairs");
newTran.Start();
MultistoryStairs.Create(stairsElem);
newTran.Commit();

AddStairsCommand

newTran = new Transaction(doc, "Add Stairs to Multistory Stairs");
newTran.Start();
mStairs.ConnectLevels(new HashSet<ElementId>(userSelectedIds));
newTran.Commit();

RemoveStairsCommand

newTran = new Transaction(doc, "Remove Stairs from Multistory Stairs");
newTran.Start();
mStairs.DisconnectLevels(new HashSet<ElementId>(userSelectedIds));
newTran.Commit();

LevelSelectionFilter

在往多层楼梯中增删楼梯的过程中,需要对选中做一些过滤,避免选中楼梯以外的 Element。这个部分也是现在这个例子中有bug的地方之一,需要做如下修改。

// class LevelSelectionFilter : ISelectionFilter
public bool AllowElement(Autodesk.Revit.DB.Element elem)
{
   if (!(elem is Level))
      return false;
   if (null == m_MS)
      return false;
   if (OperationAction.Add == m_action)
      return m_MS.CanConnectLevel(elem.Id);
   if (OperationAction.Remove == m_action)
      return m_MS.CanDisconnectLevel(elem.Id);
   if(OperationAction.Unpin == m_action)
      return m_MS.GetStairsOnLevel(elem.Id) != null;
   if (OperationAction.PinBack == m_action)
      return m_MS.GetStairsOnLevel(elem.Id) == null;
   return false;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值