Dynamo For Revit & Revit API: Room 房间边界和几何图形

前言

本文通过 Dynamo For Revit 和 Revit API 介绍如何获取房间的边界和几何图形。

内容

Dynamo For Revit & Revit API: Room 房间边界和几何图形_第1张图片
通过 Dynamo 节点,Room.CenterBoundaryRoom.CoreBoundaryRoom.FinishBoundary 可以迅速得到房间的边界。但这三个结果不完全一样。
Dynamo For Revit & Revit API: Room 房间边界和几何图形_第2张图片
本图对应的是 Revit 官方示例文件中的房间:
Dynamo For Revit & Revit API: Room 房间边界和几何图形_第3张图片

API 获取边界

到底是什么造成了这个差异呢?从 API 梳理一下。

Room

房间 Room 继承自 SpatialElementpublic class Room : SpatialElement

SpatialElement

SpatialElement 有一个接口,通过这个接口可以获得边界相关的信息,public IList> GetBoundarySegments(SpatialElementBoundaryOptions options)

BoundarySegment

每一个 BoundarySegment 里有对应的边界的 ElementId 和 图形信息 Curve

namespace Autodesk.Revit.DB
{
     
    public class BoundarySegment : IDisposable
    {
     
        public ElementId ElementId {
      get; }
        public ElementId LinkElementId {
      get; }
        public Curve GetCurve();
        // 其它接口
    }
}

SpatialElementBoundaryOptions

SpatialElementBoundaryOptions 有一个成员,SpatialElementBoundaryLocation 用来决定返回的边界类型。

namespace Autodesk.Revit.DB
{
     
    //
    // 摘要:
    //     Options that can be passed to a SpatialElementBoundaryCalculator to influence
    //     the results of the calculation.
    public class SpatialElementBoundaryOptions : IDisposable
    {
     
        public SpatialElementBoundaryLocation SpatialElementBoundaryLocation {
      get; set; }
        // 其它接口
    }
}

SpatialElementBoundaryLocation 是一个枚举值,这里似曾相识。是的,这个就对应了相同名字的 Dynamo 节点。

namespace Autodesk.Revit.DB
{
     
    public enum SpatialElementBoundaryLocation
    {
     
        Finish = 0,
        Center = 1,
        CoreBoundary = 2,
        CoreCenter = 3
    }
}

API 获取房间边界的例子

// 从 id 得到房间
Room room = doc.GetElement(new ElementId(XXXXXX)) as Room;
// 设置想要的房间边界(如果不设置)
SpatialElementBoundaryOptions options = new SpatialElementBoundaryOptions();
options.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.CoreBoundary;
// 得到房间的边界
IList<IList<BoundarySegment>> bslists = room.GetBoundarySegments(options);
foreach(IList<BoundarySegment> bslist in bslists)
{
     
   foreach(BoundarySegment bs in bslist)
   {
     
      bs.GetCurve(); // 获取边界的几何信息,API 使用者可以把它保存,然后再做后续处理
   }
}

获取房间的几何图形

可以直接用 Element.Geometry 获取房间的几何图形。房间是一个空间,即使房间顶部是斜坡也一样支持。
Dynamo For Revit & Revit API: Room 房间边界和几何图形_第4张图片

你可能感兴趣的:(Dynamo,For,Revit,Revit,API)