[英]Simplify a series of repetitive functions with sort options
我在一个模块中有一系列功能开始变得非常重复。 每个函数都提取一个列表,并有一个可选的布尔参数,用于在返回列表之前对列表进行排序。 感觉应该有一种方法可以从父函数继承排序?
def get_electrical_equipment(sort_by_name = False):
elements = DB.FilteredElementCollector(revit.doc)\
.OfCategory(DB.BuiltInCategory.OST_ElectricalEquipment)\
.WhereElementIsNotElementType()\
.ToElements()
if sort_by_name: elements.sort(key=lambda x: x.Name)
return elements
def get_panel_schedules(sort_by_name = False):
elements = DB.FilteredElementCollector(revit.doc)\
.WherePasses(DB.ElementClassFilter(DB.Electrical.PanelScheduleView))\
.WhereElementIsNotElementType()\
.ToElements()
if sort_by_name: elements.sort(key=lambda x: x.Name)
return elements
def get_panel_schedule_sheet_instances(sort_by_name = False):
elements = DB.FilteredElementCollector(revit.doc)\
.OfClass(DB.Electrical.PanelScheduleSheetInstance)\
.ToElements()
if sort_by_name: elements.sort(key=lambda x: x.Name)
return elements
首先,我认为您可以完全消除对ToElements
的调用。 这是对内存和计算时间的浪费,正如我过去在 Revit API 讨论论坛和 The Building Coder(例如如何区分冗余房间)中指出的那样大约 500 次。 现在,为了解决您的问题,您可以简单地实现一个带有类别和类参数的通用方法get_elements_of_category_and_class
。 传入一个或另一个或两个,并在过滤的元素收集器上执行OfClass
和OfCategory
检查,一个或另一个或两个,跳过null
值参数的评估。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.