繁体   English   中英

使用排序选项简化一系列重复的功能

[英]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 传入一个或另一个或两个,并在过滤的元素收集器上执行OfClassOfCategory检查,一个或另一个或两个,跳过null值参数的评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM