Это имеет смысл, если учесть количество элементов, которые должны учитывать оба метода.Первый метод:
walls=DB.FilteredElementCollector(doc)\
.WherePasses(param_filter)\
.ToElementIds()
В этом методе вы просите фильтр рассмотреть ВСЕ элементы в модели.Это потенциально много элементов для прохождения через фильтр.Это противоположно:
walls=DB.FilteredElementCollector(doc)\
.OfCategory(DB.BuiltInCategory.OST_Walls)\
.WhereElementIsNotElementType()\
.ToElements()
В этом методе вы используете БЫСТРЫЙ фильтр OfCategory()
и еще один WhereElementIsNotElementType()
, чтобы сузить выбор только до Wall
экземпляров.Даже если вы выполните это с помощью простого цикла for
, который здесь является медленным компонентом, он все равно БЫСТРЕЕ, чем пропуск ВСЕХ элементов в модели через первый фильтр.
Вы можете оптимизировать его, создав фильтр, подобный следующему:
walls=DB.FilteredElementCollector(doc)\
.OfCategory(DB.BuiltInCategory.OST_Walls)\
.WhereElementIsNotElementType()\
.WherePasses(param_filter)
.ToElements()
Это на самом деле объединит быстрый фильтр категорий, фильтр типов элементов и медленный фильтр параметров, что потенциально может быть быстрее и в целом.легче читать решение.
Попробуй, и дай мне знать, если это имеет смысл.
Ура!