通常在拿到一个新项目的时候,第一件事便是要根据项目实施标准定制符合要求的项目样板。包括标高、轴网、机电管线布管配置、机电管线系统及材质、过滤器配置、组织视图浏览器等一系列工作。

        机电管线布管配置都是以现有的管道类型和管件(弯头、三通、四通、过渡件、活接头),分别复制出副本,将管件配置到管道类型上并设置好尺寸。

先来看看在RevitAPI中与布管系统相关的概念:

  • 点击管道类型中的  “布管系统配置–编辑”按钮弹出的窗口就对应着RoutingPreferenceManager

  • 横向方框2中对应着RoutingPreferenceRule,可以增加和删除。

  • 竖向方框4中对应着RoutingPreferenceRuleGroupType,是枚举类型,包含以下项:

  • 竖向方框4中的尺寸对应着PrimarySizeCriterion,可以设置成None(无),ALL(全部),最小尺寸,最大尺寸。

那么来看下具体如何实现的吧:

获取到源管道类型中所配置的管件:

# 获取源管道类型配置的管件# By I am the one import clr
import System
clr.AddReference('ProtoGeometry')from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')from Autodesk.Revit.DB import *
clr.AddReference('RevitNodes')import Revitclr.ImportExtensions(Revit.GeometryConversion)clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
MEPCur_Type = UnwrapElement(IN[0])RM = MEPCur_Type.RoutingPreferenceManagerenum = System.Enum.GetValues(RoutingPreferenceRuleGroupType)eles = []TransactionManager.Instance.EnsureInTransaction(doc)for e in enum[1:6]:  rule = RM.GetRule(e,0)  eles.append(doc.GetElement(rule.MEPPartId).ToDSType(False))TransactionManager.Instance.TransactionTaskDone()OUT = eles

复制出管道类型和管件类型,用到的是Clockwork节点包中的FamilyType.Duplicate,但复制管道类型时其输出为空,我便将其重写了:

import clr
import System
clr.AddReference('ProtoGeometry')from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')from Autodesk.Revit.DB import *
clr.AddReference('RevitNodes')import Revitclr.ImportExtensions(Revit.GeometryConversion)clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
if isinstance(IN[1],list):  names = IN[1]else:  names = [IN[1]]MEPCur_Type = UnwrapElement(IN[0])eles = []TransactionManager.Instance.EnsureInTransaction(doc)for n in names:  eles.append(MEPCur_Type.Duplicate(n).ToDSType(False))TransactionManager.Instance.TransactionTaskDone()OUT = eles

将管件配置到管道类型:

# 批量配置布管系统# By I am the oneimport clr
import System
clr.AddReference('RevitAPI')from Autodesk.Revit.DB import *
clr.AddReference('RevitNodes')import Revitclr.ImportExtensions(Revit.GeometryConversion)clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
MepCur_Type = UnwrapElement(IN[0])fittings = UnwrapElement(IN[1])enum = System.Enum.GetValues(RoutingPreferenceRuleGroupType)
TransactionManager.Instance.EnsureInTransaction(doc)new_PSC = PrimarySizeCriterion.All()for f,m in zip(fittings,MepCur_Type):  Routing = m.RoutingPreferenceManager  for i, e in zip(f,enum[1:6]):    rule = RoutingPreferenceRule(i.Id," ")    rule.AddCriterion(new_PSC)    Routing.AddRule(e,rule)    Routing.RemoveRule(e,0)TransactionManager.Instance.TransactionTaskDone()OUT = MepCur_Type

    中间研究的过程中也遇到了点问题,不过后来换了个思路便解决了,感兴趣可以看在的Dynamo官方论坛上的问题出现和解决的过程,https://forum.dynamobim.com/t/how-to-change-the-elbow-crosses-unions-ect-in-mepcurvetypes-routingpreference-using-dynamo/66963

    风管类型配置布管系统与此类似,只是RoutingPreferenceRuleGroupType中多了“矩形到圆形”,“矩形到椭圆形”,“椭圆形到圆形”

对于电缆桥架和线管,就更加简单了,由于他们没有RoutingPreferenceManager的概念,就少去了很多的弯弯绕绕,自带节点SetParameterByName就能解决,输入端分别输入线管类型/电缆桥架类型和配件族类型即可,不再赘述。

批量配置布管系统效果演示:

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

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

0

评论0

请先
22J403-1楼梯 栏杆 栏板(一)PDF下载
22J403-1楼梯 栏杆 栏板(一)PDF下载
6分钟前 有人购买 去瞅瞅看

社交账号快速登录

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