打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Rhino.Inside.Revit创建Revit选择集

你好,这里是BIM的乐趣


      今天我们继续来聊Rhino.Inside.Revit,在Grasshopper中玩转Revit~

在Revit中,可以利用过滤器选择想要的族类别下的所有图元,同样Grasshopper也可以根据族类别,选择所有图元。但是我们选择以后,是否可以重复利用呢?答案是肯定的,在Revit中,当你过滤好一类图元以后,是可以在修改上下文选项卡里,最右侧找到保存按钮,保存当前的选择集。

但是Revit只能根据族类别对图元进行过滤,而Grasshopper可以更精确的按参数进行过滤,并且在过滤完成以后,直接创建选择集,在需要使用的时候,直接在Revit内重新载入选择集即可。

例如,我们要过滤所有注释参数为“房间”的墙体,可以先选择所有墙体,然后根据参数过滤:

同时再创建一个参数过滤器,过滤“注释”的参数值为“房间”,然后通过一个“Logical And Filter”节点来将两个过滤器合并:

        这样我们就可以通过“Query Elements”节点,很容易的根据前面的两个过滤器,过滤出我们需要的墙体:

到这一步都很顺利,但是要创建选择集的时候,我发现节点库里,并没有现成的创建选择集的节点,这时候,只能查询下API,看是不是可以通过代码解决了:

于是打开RevitAPI手册,搜索SelectionFilterElement的方法,我们可以看到:

很简单就找到了创建方法,基本语法也超级简单,直接套用即可:

selset = SelectionFilterElement.Create(doc,name)

但是实际写下来,发现还是有很多问题需要注意:

一个是,我们在创建选择集的时候,是要先判断项目中是否有同名选择集,因为有同名的是没法创建的,这里我们不需要删除该选择集,只需要将选择清空即可,之后我们可以向其添加选择的图元;

另一个就是,新创建的选择集是空的,我们需要向其添加选择的图元。用到的方法是:AddSet,语法如下:

将这两个问题想清楚了,就可以顺利的写代码了,完整代码如下:

# Copyright(c) 2020, 九哥BIMerimport clrclr.AddReference('System.Core')clr.AddReference('RhinoInside.Revit')clr.AddReference('RevitAPI') clr.AddReference('RevitAPIUI')from System import Enum, Actionimport rhinoscriptsyntax as rsimport Rhinoimport RhinoInsideimport Grasshopperfrom Grasshopper.Kernel import GH_RuntimeMessageLevel as RMLfrom RhinoInside.Revit import Revit, Convert# 还可以添加扩展方法# 这允许在Revit对象上调用.ToXXX()转换器方法clr.ImportExtensions(Convert.Geometry)from Autodesk.Revit import DBfrom Autodesk.Revit.DB import *# 访问活动文档对象doc = Revit.ActiveDBDocument
# 过滤要添加到选择集的图元ids = list()if not isinstance(E, list): E = [E]else: E = E
for e in E: ids.append(e.Id)itemset =set(ids)
# 从模型中收集所有现有的过滤器 names = list()collector = FilteredElementCollector(doc)filters = collector.OfClass(FilterElement).ToElements();selset = False
t = Transaction(doc, '创建选择集')t.Start()
# 如果已经存在该名称的选择集,则删除其内容for filter in filters: if filter.Name == name: filter.Clear() selset = filter# 创建一个新的选择集(如果不存在该选择集)if selset == False: selset = SelectionFilterElement.Create(doc,name)# 将选择的图元添加到选择集try: selset.AddSet(itemset) OUT = selset.ToDSType(False)except: OUT = None
t.Commit()print(OUT)

这里分了几步编写代码:

    1、收集要添加到选择集的图元,并获取ID列表;

    2、获取模型中的选择集

    3、判断模型中的选择集与要创建的选择集是否同名;

    4、如果存在同名选择集,将其清空选择;

    5、如果不存在同名选择集,新建选择集;

    6、向选择集添加过滤的图元。

最后,放一张过滤墙体添加选择集的全图,供大家参考:

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~



不知不觉中,“BIM的乐趣“群已经满了,不过不用担心,我们又创建了一个超级群,有希望入群的小伙伴,可以在公众号“BIM的乐趣”→语雀教程菜单→微信购买,获取二维码加我微信,备注来源,我来拉你入群哦~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
建筑软件家族
做设计,到底会用到哪些软件?
建筑界的大神必会的软件
玩转犀牛中的BIM第三期: VisualARQ2.8&Rhino6全模出图工作流
Sketchup、犀牛也能玩BIM?必须的!
异形建筑基于BIM的正向设计研究
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服