最近,在项目上一直在做机房装修的模型,这个项目的弱电小间、UPS机房、主信息机房、IT实验室等大小机房合计100余个。经过几个机房静电地板的排布也逐渐找到了其中排布规律,使用Dynamo来快速进行静电地板的排布。
(某项目机房地板排布)
机房地板的排布主要考虑机柜的布置、入户门的位置、精密空调,配电柜等设备位置、结构柱位置等因素来确定起排点,有了起排点再根据地板模数即可进行地板排布。地板排布确定后,墙面,顶面的排布也随之确定。那么来看下在Dynamo中如何实现吧:
选择X,Y方向起排线,将其向两端延伸:
选择楼板表面surface,通过其BoundingBox的最大点和最小点的X,Y值之差来计算房间的长度和宽度,长度和宽度除以地板边长600取商作为X,Y方向起排线阵列的个数:
分别将X,Y方向起排线向X,Y正方向复制与选择的面做交集来判断起排线复制的方向:
复制出网格线,并用这些网格线去拆分选择的surface,用到的是K神Chynamo节点包中的Surface.SplitByCurves节点:
通过拆分得到Sueface的边界线生成楼板:
为避免Dynamo本次运行覆盖上次运行结果的机制,将此部分生成楼板的节点调用API重写:
import clr
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
floor_type = UnwrapElement(IN[1])
level = UnwrapElement(IN[2])
floors = []
TransactionManager.Instance.EnsureInTransaction(doc)
for i in IN[0]:
cur = CurveArray()
for j in i:
cur.Append(j.ToRevitType())
floor = doc.Create.NewFloor(cur,floor_type,level,False)
floors.append(floor.ToDSType(True))
TransactionManager.Instance.TransactionTaskDone()
OUT =floors
这部分要非常感谢 九哥BIMer 的帮助,一眼就看出我之前将第23行代码 cur = CurveArray()放在第一个for循环之外,导致程序报错的问题。
最后做一下可视化展示,通过计算面积,将整块板填充为绿色,将需要裁剪的板填充为红色:
机房常见布局:
运行效果:
评论0