完善主体资料,免费赠送VIP会员!
* 主体类型
* 企业名称
* 信用代码
* 所在行业
* 企业规模
* 所在职位
* 姓名
* 所在行业
* 学历
* 工作性质
请先选择行业
您还可以选择以下福利:
行业福利,领完即止!

下载app免费领取会员

NULL

5cdd2dc095060.jpg

Revit技巧 | revit创建选择集和搜索集怎么做?Rhino.Inside.Revit创建Revit选择集

发布于:2024-09-30 09:31:49

BIM中文网

更多

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

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

image.png

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

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

image.png

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

image.png

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

image.png

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

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


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


image.png

  selset = ionFilterElement.(doc,name)

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

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

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

image.png

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

    # Copyright(c) 2020, 九哥BIMer    import clr    clr.AddReference('System.Core')    clr.AddReference('RhinoInside.Revit')    clr.AddReference('RevitAPI')     clr.AddReference('RevitAPIUI')    from System import Enum, Action    import rhinoscriptsyntax as rs    import Rhino    import RhinoInside    import Grasshopper    from Grasshopper.Kernel import GH_RuntimeMessageLevel as RML    from RhinoInside.Revit import Revit, Convert    # 还可以添加扩展方法    # 这允许在Revit对象上调用.ToXXX()转换器方法    clr.ImportExtensions(Convert.Geometry)    from Autodesk.Revit import DB    from 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 = ionFilterElement.(doc,name)    # 将选择的图元添加到选择集    try:      selset.AddSet(itemset)      OUT = selset.ToDSType(False)    except: OUT = None    
   t.Commit()    print(OUT)

  这里分了几步编写代码:

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

  2、获取模型中的选择集

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

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

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

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

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

image.png

    Revit中文网作为国内知名BIM软件培训交流平台,几十万Revit软件爱好者和你一起学习Revit,不仅仅为广大用户提供相关BIM软件下载与相关行业资讯,同时也有部分网络培训与在线培训,欢迎广大用户咨询。

    网校包含各类BIM课程320余套,各类学习资源270余种,是目前国内BIM类网校中课程最有深度、涵盖性最广、资源最为齐全的网校。网校课程包含Revit、Dynamo、Lumion、Navisworks、Civil 3D等几十种BIM相关软件的教学课程,专业涵盖土建、机电、装饰、市政、后期、开发等多个领域。

    需要更多BIM考试教程或BIM视频教程,可以咨询客服获得更多免费Revit教学视频

l  BIM培训网校课程目录

l  Revit零基础培训教程

l  BIM项目实战训练营

本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。

未标题-1.jpg

上一篇:Revit技巧 | Revit用户界面文字被裁剪

下一篇:Revit技巧 | Revit内饰装修应用:Revit中快速创建踢脚线的方法之一

60acb4e0ef112.png