Ejemplo n.º 1
0
    def embedded_parts(self):
        """
        Находим окна данной панели

        Нужно проверить является ли окно частью панели.
        Сейчас такой проверки нет
        """
        if not hasattr(self, "_embedded_parts"):
            bb = self.union_solid.GetBoundingBox()
            tt = bb.Transform
            p1 = tt.OfPoint(bb.Min)
            p2 = tt.OfPoint(bb.Max)
            outline = Outline(p1, p2)
            filtered = BoundingBoxIntersectsFilter(outline)
            collector = FilteredElementCollector(self.doc).OfCategory(
                BuiltInCategory.OST_Rebar).WherePasses(filtered)
            collector.UnionWith(
                FilteredElementCollector(self.doc).OfCategory(
                    BuiltInCategory.OST_StructuralFraming).WherePasses(
                        filtered)).ToElements()
            res = []
            for i in collector:
                param = i.LookupParameter(self.element_type_parameter_name)
                if param and param.AsDouble(
                ) == self.embedded_part_parameter_value:
                    # if self.is_element_of_supercomponent(i):
                    res.append(Precast_embedded_part(i, self.doc, self))
            self._embedded_parts = res
        return self._embedded_parts
Ejemplo n.º 2
0
 def get_elements_by_cats(self, classes):
     els = None
     for i in classes:
         if els is None:
             els = FilteredElementCollector(self.doc).OfClass(i)
         else:
             els.UnionWith(FilteredElementCollector(self.doc).OfClass(i))
     return els
Ejemplo n.º 3
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