通常在拿到一个新项目的时候,第一件事便是要根据项目实施标准定制符合要求的项目样板。包括标高、轴网、机电管线布管配置、机电管线系统及材质、过滤器配置、组织视图浏览器等一系列工作。
机电管线布管配置都是以现有的管道类型和管件(弯头、三通、四通、过渡件、活接头),分别复制出副本,将管件配置到管道类型上并设置好尺寸。
先来看看在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 clrimport Systemclr.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 TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocumentif 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 clrimport Systemclr.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 TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocumentMepCur_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.RoutingPreferenceManagerfor 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