Оптимизация кода. Выборка на активном виде
Главная › Форумы › Задать вопрос › Оптимизация кода. Выборка на активном виде
- В этой теме 1 ответ, 1 участник, последнее обновление 7 лет назад сделано txt.
-
АвторСообщения
-
Есть код, собирающий все элементы по нескольким категориям на активном виде, как его можно оптимизировать?
import clr
clr.AddReference(‘RevitAPI’)
clr.AddReference(‘RevitServices’)
import Autodesk,RevitServices
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
a=FilteredElementCollector(doc,doc.ActiveView.Id)
b=FilteredElementCollector(doc,doc.ActiveView.Id)
c=FilteredElementCollector(doc,doc.ActiveView.Id)
d=FilteredElementCollector(doc,doc.ActiveView.Id)
#
rooms = ElementCategoryFilter(BuiltInCategory.OST_Rooms)
walls = ElementCategoryFilter(BuiltInCategory.OST_Walls)
windows= ElementCategoryFilter(BuiltInCategory.OST_Windows)
doors = ElementCategoryFilter(BuiltInCategory.OST_Doors)
#
rooms=a.WherePasses(rooms).WhereElementIsNotElementType().ToElements()
walls=b.WherePasses(walls).WhereElementIsNotElementType().ToElements()
windows=c.WherePasses(windows).WhereElementIsNotElementType().ToElements()
doors=d.WherePasses(doors).WhereElementIsNotElementType().ToElements()
#
OUT=rooms, walls, windows, doorsРешение Конрода Собона (выбираются все элементы проекта по нескольким категориям):
# Copyright(c) 2017, Konrad K Sobon
# @arch_laboratory, http://archi-lab.net
import clr
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
# Import RevitAPI
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
import System
from System import Array
from System.Collections.Generic import *
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
try:
>>>>errorReport = None
>>>>cat_list = [BuiltInCategory.OST_Rooms, BuiltInCategory.OST_Walls, BuiltInCategory.OST_Windows, BuiltInCategory.OST_Doors]
>>>>typed_list = List[BuiltInCategory](cat_list)
>>>>filter = ElementMulticategoryFilter(typed_list)
>>>>output = FilteredElementCollector(doc).WherePasses(filter).ToElements()
except:
# if error occurs anywhere in the process catch it
>>>>import traceback
>>>>errorReport = traceback.format_exc()
# Assign your output to the OUT variable
if None == errorReport:
>>>>OUT = output
else:
>>>>OUT = errorReportчтобы выбрать те же элементы только на активном виде , меняем только одну строку:
output = FilteredElementCollector(doc,doc.ActiveView.Id).WherePasses(filter).ToElements()
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.