Revit二次开发知识分享(一)房间轮廓线

我们在平时项目中经常会需要收集该楼层的所有房间并且获得其房间轮廓线去辅助完成其他的功能。
下面我们讲一下怎样子收集房间轮廓线:

//先获得当前的视图
View view = doc.ActiveView;
//然后再搜索再当前视图中的房间,案例选取其中的一个房间
Room room1 = new FilteredElementCollector(doc, view.Id).OfClass(typeof(SpatialElement)).Cast<Room>().FirstOrDefault();
//再新建一个CurveLoop把轮廓线连成一条线
CurveLoop cl = new CurveLoop();
SpatialElementBoundaryOptions opts = new SpatialElementBoundaryOptions();
// BoundarySegment是表示区域边界的对象
IList<IList<BoundarySegment>> blist = room.GetBoundarySegments(opts);
//案例选取其中的第一条轮廓线
IList<BoundarySegment> bsFlist = blist.First();
foreach (BoundarySegment bs in bsFlist)
{
//把线添加到CurveLoop中
cl.Append(bs.GetCurve());
}

SpatialElement类
是表示Revit模型中的封闭区域或体积的类,是房间、空间和面积的父类。因此收集房间的时候,直接用OfClass(typeof(Room))是会弹出错误的,房间的父类是SpatialElement,不是Room。

注意:收集房间轮廓的时候,会出现轮廓线不连续的问题。有可能是一下这种情况。
房间示意图
我们直接看上去墙是连续的。可是我们放大看会发现,其实墙不平行的,如下图:
墙和房间轮廓线示意图
当两个墙相差的距离10mm以内时,你会发现,房间的轮廓线并不是和墙边线重合的,可是我们收集出来的房间轮廓线是沿着墙边的。(红色的线条为收集出来的线条)
在这里插入图片描述

这样子就会存在一个误差的问题,导致在连接的时候出现线不重合的情况。我这里提供一个思路大家,如果在项目需求并不需要特别精确到毫米的时候,可以先收集到这些线,然后取线的起点,最后再重新连成一条线。

今天的分享就到这里了,对上面有什么疑问的,或者出错的,请直接在评论区指出,谢谢,希望对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

baobao熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值