Exemplo n.º 1
0
    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)