上次探讨了利用Dynamo批量创建过滤器。由于过滤器只作用于当前视图,所以在工作中关于过滤器经常有的一个需求就是:将某个视图已经添加好的过滤器引用到另一个视图来避免重复性的工作。

    在Revit中可以通过设置视图样板来满足这样的需求,但与之同时却带来了新的麻烦:详细程度,显示模式,模型类别可见性,链接文件可见性,导入文件可见性等一系列参数都随着样板而固化,要修改其中某一项,只能返回视图样板中去修改,可谓得不偿失。

实现这一需求比把大象放进冰箱还要简单,只用两步就能完成:

读取数据,写入数据。

读取源视图数据:

通过View类下的GetFilters()方法获取视图过滤器、GetFilterOverrides()方法获取过滤器图形替换。

数据写入目标视图:

使用SetFilterOverrides()方法,将读取到的数据写入。

完整代码:

#  视图间引用过滤器#  By I am the oneimport clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")import Revitclr.ImportExtensions(Revit.Elements)clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
view1 = UnwrapElement(IN[0])if isinstance(IN[1],list):  view2 = UnwrapElement(IN[1])else:  view2 = [UnwrapElement(IN[1])]TransactionManager.Instance.EnsureInTransaction(doc)filters_ids = view1.GetFilters()filters = []for f in filters_ids:  override = view1.GetFilterOverrides(f)  for v in view2:    v.SetFilterOverrides(f,override)  filters.append(doc.GetElement(f))TransactionManager.Instance.TransactionTaskDone()OUT = filters

搭配按回路统计电缆工程量文章中,读取被选择图元的功能使用更加丝滑。

演示视频:

欢迎阅读,分享,交流,批评指正。

如转载请注明出处,否则追究法律责任(说说而已,全靠自觉)。

0

评论0

请先
彩色高清20J813民用建筑设计统一标准图示图集PDF 替代06SJ813
彩色高清20J813民用建筑设计统一标准图示图集PDF 替代06SJ813
9分钟前 有人购买 去瞅瞅看

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站