批量旋转构件的方法与第九篇Python调用RevitAPi移动Revit构件的方法类似,这里不过多的介绍了,效果见视频
代码如下:
import clr
from System.Collections.Generic import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc=DocumentManager.Instance.CurrentDBDocument
#输入
element=UnwrapElement(IN[0])
rotateAxis=IN[1]
angle=IN[2]
out=[]
TransactionManager.Instance.EnsureInTransaction(doc)
#判断element是否为列表
if isinstance(IN[0], list):
#判断旋转基准线是否为列表
if isinstance(IN[1], list):
#判断角度是否为列表
if isinstance(IN[2], list):
for i in range(len(element)):
out.append(ElementTransformUtils.RotateElement(doc,element[i].Id,rotateAxis[i].ToRevitType(),angle[i]))
else:
for i in range(len(element)):
out.append(ElementTransformUtils.RotateElement(doc,element[i].Id,rotateAxis[i].ToRevitType(),angle))
else:
for i in range(len(element)):
out.append(ElementTransformUtils.RotateElement(doc,element[i].Id,rotateAxis.ToRevitType(),angle))
else:
out.append(ElementTransformUtils.RotateElement(doc,element.Id,rotateAxis.ToRevitType(),angle))
TransactionManager.Instance.TransactionTaskDone()
#输出
OUT = out
在以上代码中我把多种情况写在了一起,比如选中的构件、基准轴、角度是单个数还是一维数组等。
节点连接见下图: