通常在拿到一个新项目的时候,第一件事便是要根据项目实施标准定制符合要求的项目样板。包括标高、轴网、机电管线布管配置、机电管线系统及材质、过滤器配置、组织视图浏览器等一系列工作。
机电管线布管配置都是以现有的管道类型和管件(弯头、三通、四通、过渡件、活接头),分别复制出副本,将管件配置到管道类型上并设置好尺寸。
先来看看在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 Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
MEPCur_Type = UnwrapElement(IN[0])
RM = MEPCur_Type.RoutingPreferenceManager
enum = 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 Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from 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 one
import clr
import System
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from 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