在Revit、Dynamo中如何用Python获取所有导线及关联构件?
获取Revit项目中所有导线及连接构件的Dynamo Python脚本
以下脚本可直接在Dynamo中运行,自动获取当前Revit项目内所有导线,并提取每根导线两端连接的电气构件(如插座、开关、配电箱等),最终输出包含导线实例、导线ID、连接构件列表的结构化数据。
# 导入Revit API和Dynamo相关模块 import clr clr.AddReference('RevitAPI') clr.AddReference('RevitServices') from Autodesk.Revit.DB import * from Autodesk.Revit.DB.Electrical import Wire from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager # 获取当前Revit文档 doc = DocumentManager.Instance.CurrentDBDocument # 收集所有已放置的导线实例(排除类型族) wire_collector = FilteredElementCollector(doc).OfClass(Wire).WhereElementIsNotElementType() wires = list(wire_collector) # 初始化结果存储列表 result = [] # 遍历每根导线,提取连接构件信息 for wire in wires: wire_id = wire.Id.ToString() wire_name = wire.Name # 获取导线关联的所有元素 connected_element_ids = wire.GetConnectedElements() # 过滤整理有效连接构件(排除导线本身、空元素) connected_components = [] for elem_id in connected_element_ids: elem = doc.GetElement(elem_id) if elem and not isinstance(elem, Wire): component_detail = { "构件ID": elem.Id.ToString(), "构件名称": elem.Name, "构件类型": elem.GetType().Name } connected_components.append(component_detail) # 组装当前导线的完整信息 wire_detail = { "导线实例": wire, "导线ID": wire_id, "导线名称": wire_name, "连接构件": connected_components } result.append(wire_detail) # 输出结果至Dynamo节点 OUT = result
注意事项
- 运行脚本前需确保当前Revit项目已打开,且包含已放置的导线及电气构件
- Dynamo的OUT端口会输出列表格式数据,可通过后续节点拆分提取单独的导线或构件信息
- 脚本仅识别已建立有效连接的构件,未连接的导线对应连接构件列表为空
内容的提问来源于stack exchange,提问作者miguel silvestre
相关产品推荐
相关产品推荐

