今天我们来聊一个期待已久的功能——生成天花,经过了这么多年的迭代,Revit终于开放了生成天花的API,而且功能还不错,是经过优化的,不过目前我手里还没拿到SDK,就不截图了。
而且新增的天花API不是在Document class下,而是在Ceiling下的,同时楼板也添加了相同的API,那和Document class下的NewFloor有什么区别呢?这个新的API支持直接创建带洞口的楼板了。
如下图这种情况,可以直接生成楼板,并把中间的洞口挖去了,方便很多:
话不多说,直接上代码:
# Copyright(c) 2019-2024, 九哥BIMer
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManagerclr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)doc = DocumentManager.Instance.CurrentDBDocumentArrayCurves = IN[0]
floorType = UnwrapElement(IN[1])
levels = UnwrapElement(IN[2])floors = []TransactionManager.Instance.EnsureInTransaction(doc)
for curves in ArrayCurves:curveloops = []for crv in curves:r = []for c in crv:r.append(c.ToRevitType())curveloop = CurveLoop.Create(r)curveloops.append(curveloop)flr = Floor.Create(doc, curveloops, floorType.Id, levels.Id)floors.append(flr)
TransactionManager.Instance.TransactionTaskDone()OUT = floors
核心API如下:
flr = Floor.Create(doc, curveloops, floorType.Id, levels.Id)
和之前我那篇创建楼板的唯一区别就是API换了,其他都差不多,就不细讲了。<详见前文:创建楼板——Dynamo Python系列教程(四)>
生成天花的核心代码,也就可以类比出来了:
TransactionManager.Instance.EnsureInTransaction(doc)
for curves in ArrayCurves:curveloops = []for crv in curves:r = []for c in crv:r.append(c.ToRevitType())curveloop = CurveLoop.Create(r)curveloops.append(curveloop)cei = Ceiling.Create(doc, curveloops, ceilingType.Id, levels.Id)ceiling.append(cei)
TransactionManager.Instance.TransactionTaskDone()
最后附上完整的dynamo截图:
因为没看到API的具体内容,目前只知道生成的天花高度,是自标高的高度偏移2600,是直接调用的默认偏移值。
看到这,有木有一丢丢的激动呢?
好了,今天的分享就到这里,小伙伴们快去自己尝试吧~