def panels(self): """ Поиск панелей. Если выбран элемент. Выбираем у него все, что вложено Если не выбран - берем все элементы категории стены и колонны. Проходим по всем элементам. Если является эеземпляром семейства, не системное. Идем дальше. Проверяем является ли семейство геометрическое: Должен быть префикс 215 216 префикс у контейнеров Проверяем является ли семейство параметрическим. Префикс 214 Если семейство геометрическое, либо параметрическое, добавляем в _panels экземпляр класса Precast_panel. с параметром geometrical говорящее. является ли элемент геометрическим. Так же прокидываем нужно ли анализировать геометрию. Если нет - будет выполнено только объединение и заполнение параметров. См. класс Precast_panel """ if not hasattr(self, "_panels"): self._panels = [] sel_id = self.uidoc.Selection.GetElementIds() if not sel_id.Count: wall_panels = FilteredElementCollector(self.doc).OfCategory( BuiltInCategory.OST_Walls).WhereElementIsElementType() wall_panels.UnionWith(FilteredElementCollector( self.doc).OfCategory(BuiltInCategory.OST_Columns).WhereElementIsNotElementType()) wall_panels = wall_panels.ToElements() else: sel_elements = [self.doc.GetElement( i) for i in self.uidoc.Selection.GetElementIds()] wall_panels = [] for i in sel_elements: if isinstance(i, AssemblyInstance): wall_panels += [self.doc.GetElement(j) for j in i.GetMemberIds()] else: wall_panels.append(i) wall_panels += [self.doc.GetElement(k) for j in wall_panels for k in j.GetSubComponentIds()] for i in wall_panels: if isinstance(i, FamilyInstance): geometrical = i.Symbol.Family.Name[:len( self.panel_prefix)] == self.panel_prefix parametrical = i.Symbol.Family.Name[:len( self.panel_parametrical_prefix)] == self.panel_parametrical_prefix if geometrical or parametrical: self._panels.append(Precast_panel( i, doc=self.doc, analys_geometry=self.analys_geometry, geometrical=geometrical)) return self._panels
for symbol in symbols: symbol.Activate() if not symbol.IsActive else None symbol.LookupParameter('Описание').Set('') symbol.LookupParameter('Комментарии к типоразмеру').Set('') symbol.LookupParameter('Ключевая пометка').Set('') level = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()[0] location = XYZ(0, 0, 0) done = [] for cir in sorted(Cir.objects, key=lambda x: x.origin.LookupParameter('Наименование').AsString() + x.origin.LookupParameter('Тип, марка').AsString()): mark = cir.origin.LookupParameter('Тип, марка').AsString() if mark not in done: done.append(mark) if len(done) > len(symbols): # raise Exception('Добавь фейков')##################################################################################################### создать скриптом name = symbols[-1].Name.split()[0] + str(int(symbols[-1].Name.split()[-1]) + 1) if symbols[-1].Name.split()[-1].isdigit() else ' 1' symbols.append(symbols[-1].Duplicate(name)) symbol = symbols[len(done) - 1] symbol.LookupParameter('Описание').Set(cir.origin.LookupParameter('Наименование').AsString()) symbol.LookupParameter('Комментарии к типоразмеру').Set(mark) symbol.LookupParameter('Ключевая пометка').Set(cir.origin.LookupParameter('Единицы измерения').AsString()) symbol.LookupParameter('Стоимость').Set(200 + len(done)) # wire = doc.GetElement(cir.els[0].GetTypeId()).LookupParameter('КабельСигнальный').AsString() wire_name = get_wire_name(cir) # symbol.LookupParameter('Изготовитель').Set(dict_[wire_name][3]) # symbol.LookupParameter('Изготовитель').Set(dict_[wire_name][3] if wire_name in dict_ else 'Ошибка, добавь в скрипт ' + wire_name) # print(wire_name) # print(type(wire_name)) symbol.LookupParameter('Изготовитель').Set(dict_.get(wire_name, [0, 1, 2, 'Ошибка, добавь в скрипт '])[3]) else: symbol = [i for i in symbols if i.LookupParameter('Комментарии к типоразмеру').AsString() == mark][0] el = doc.Create.NewFamilyInstance(location, symbol, level, Structure.StructuralType.NonStructural)