视图间引用过滤器

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

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

视图间引用过滤器插图

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

读取数据,写入数据。

读取源视图数据:

视图间引用过滤器插图1

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

数据写入目标视图:

视图间引用过滤器插图2

使用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

请先

没有账号? 注册  忘记密码?

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站
普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress