Результаты поиска для 'family type'

Главная Форумы Поиск Результаты поиска для 'family type'

Просмотр 15 результатов — с 16 по 30 (из 60)
  • Автор
    Результаты поиска
  • #8419
    Анатолий
    Участник
    37 pts

    Добрый день! Вопрос. Используя
    windowsInProject =FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Windows).WhereElementIsNotElementType().ToElements() , мы получаем все окна в проекте. Если применить фильтр к ним, например по стадии
    filtr = windowsInProject.Where(lambda x: x.LookupParameter("Стадия возведения").AsValueString()=="Проект"), на выходе получим элементы в виде Autodesk.Revit.DB.FamilyInstance. Прошу подсказать как их возможно перевести в читабельность?
    И еще один вопрос: возможно ли получить Autodesk.Revit.DB.ElementId, если имеем только Id типа(элемента) представленного в формате System.Int64?
    PS. На второй вопрос ответ нашел. Нужно входящие элементы анврапнуть и присвоить им команду UnwrapElement(i).GetTypeId().

    #8400
    Анатолий
    Участник
    37 pts

    Запишу, чтобы не забыть.
    import clr
    clr.AddReference("RevitNodes")
    import Revit
    family=IN[0] # на вход подаем семейство
    familyName=family.Name
    types = family.Types #получение всех типов семейства без подключения каких-либо библиотек
    types = Revit.Elements.Family.ByName(familyName).Types #получение всех типов семейства (по имени семейства) с библиотеками import clr/clr.AddReference("RevitNodes")/import Revit
    elements = []
    for type in types:
    elem = Revit.Elements.FamilyInstance.ByFamilyType(type) #получение всех экземпляров данного семейства (с теми же подключаемыми библиотеками)
    elements.append(elem)
    OUT = elements

    ИваСерж
    Хранитель
    134 pts

    Мы говорим о марках или о самих трубах?
    Труба это не семейство (не Фемели инстанс).
    Очевидно, нет у трубы FamilyInstance.Type

    Зато у трубы есть PypeType
    В динамо есть даже нод GetPypeType

    Возможно, подтолкнет на какие-то идеи по замене трубы.

    А вот и пример скрипта который соединяет 2 любые трубы и вставляет фитинги по умолчанию.
    Проверил. У меня скрипт работает в 2019.

    АвтоСоединение
    Скрипт лежит у меня на дропбоксе пока мне не надоест.
    Если удалю и кому-то нужно будет – пишите в личку.

    Denver-22
    Участник

    Добрый день!
    По сути скрипт написал. Но выяснились особенности марок. По крайней мере марок труб: невозможно получить типоразмер элемента (FamilyInstance.Type), равно как нельзя назначить типоразмер элементу марки (нодом FamilyInstance.SetType). Хотя для других категорий они работают.
    Вместо FamilyInstance.Type пришлось применить костыль из 2-х Element.GetParameterValueByName, подав на вход “Тип” и “Имя типа” (для получения имени типоразмера). А вот с назначением типоразмера пока ничего не выходит.
    Посоветуйте что-нибудь…

    A.Balm
    Участник

    Спасибо огромное за наводку!

    Задача стояла чуть шире.. см. код ниже)) Но твое видео навело на интересную мысль: просто найти все параметры а потом сделать пересечение данных множеств и получить множество параметров которые принадлежат всей коллекции. Хорошо бы теперь все это оформить с помощью хотя бы SlowFilter, а не перебора нерасторопным питоном в лоб))

    Уровни слишком специфичный параметр что бы по на его основе фильтровать.. тем >, что для разных семейств он представлен по разному: стены – зависимость снизу  и сверху, familySymbol – уровень плюс смещение, и.т.д

    import clr
    clr.AddReference('RevitAPI')
    clr.AddReference('RevitAPIUI')
    from Autodesk.Revit.DB import *
    
    clr.AddReference("System.Core")
    from System.Collections.Generic import List
    
    import System
    clr.ImportExtensions(System.Linq)
    
    """ Function region """
    def set_of_string(set_string):
        name = ' '
        for i in set_string:
            name += ' ' + str(i)
        return name
    
    """ Main region """
    uidoc = __revit__.ActiveUIDocument
    doc = uidoc.Document
    
    collector = FilteredElementCollector(doc)
    collector.WhereElementIsNotElementType() # only Instances pass the collector
    
    list_of_categories = [
        ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns),
        ElementCategoryFilter(BuiltInCategory.OST_Walls),
        # ElementCategoryFilter(BuiltInCategory.OST_Floors)
    ]
    
    logical_filter = LogicalOrFilter(list_of_categories)
    collector.WherePasses(logical_filter)
    
    parameter_sets = []
    trigger = 0
    for element in collector:
        try:
            parameter_set = set()
            for parameter in element.Parameters:
                parameter_set.add(parameter.Id)
            parameter_sets.append(parameter_set)
            print('ok! ' + set_of_string(parameter_set))  
        except:
            print('Error...')
            continue
    
    a = set.intersection(*parameter_sets)
    print(len(a))
    
    for id in a:
        print(id.Value.ToString())
    Аноним
    Неактивированный

    Столкнулась с проблемой при работе скрипта. Пытаюсь расставить элементы (осветительные приборы) с размещением на грани в центре какого-либо помещения на потолке (в моем случае на перекрытие). Я определяю необходимую мне surfase из всего списка поверхностей перекрытия. Точку размещения определяю как центр помещения (пока рассматриваю помещения прямоугольной формы).

    import clr
    clr.AddReference(‘ProtoGeometry’)
    from Autodesk.DesignScript.Geometry import *
    clr.AddReference(‘RevitServices’)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    doc = DocumentManager.Instance.CurrentDBDocument
    clr.AddReference(‘RevitNodes’)
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.ImportExtensions(Revit.GeometryConversion)
    host = IN[0]
    ftype = UnwrapElement(IN[1])
    pts =IN[2]
    ref1=[]
    tt = []
    TransactionManager.Instance.EnsureInTransaction(doc)
    for i in xrange(len(pts) ):
    ref1 = host[i].Tags.LookupTag(“RevitFaceReference”)
    uv1 = host[i].UVParameterAtPoint(pts[i])
    dir1 = host[i].TangentAtUParameter(uv1.U,uv1.V).ToXyz()
    try:
    inst1 = doc.Create.NewFamilyInstance(ref1,pts[i].ToXyz(),dir1,ftype)
    tt.append(inst1.ToDSType(False) )
    except: tt.append(None)
    TransactionManager.Instance.TransactionTaskDone()
    OUT=tt

    При работе в обычном файле без связанных файлов все работает отлично, а как только перехожу в большой проект со связанными файлами, где перекрытия лежат в связи, ревит выдает ошибку и закрывается:

    Элементы я получаю из линкового файла через Element.GetFromLinkedFile. Возникает вопрос возможно ли в принципе подобное действие?

    Или же все действия по выбору и определению поверхности перекрытия нужно делать внутри этого же  питон скрипта в котором осуществляется размещение элементов. Чтобы ревит понимал, что поверхность берется из линкового файла. Если так то тогда как можно определить  внутри питона surfase перекрытия?    face.append(i.Faces) не работает. AttributeError: ‘Floor’ object has no attribute ‘Faces’

    ИваСерж
    Хранитель
    134 pts

    К сожалению, Динамо не обладает особой гибкостью. Стены – это встроенные семейства. И получив такую ошибку я понял, что скорее всего нод не может найти это системное семейство. Через 10 секунд поисков я нашел нод WallType.ByName – работает со стенами. Также есть FloorType.ByName…
    Вывод – универсального решения нет (что странно).
    С выбором типов любого элемента нет проблем через АПИ (Питон)

    П.С.
    Почекал лукапом проекты. Действительно, типы семейств хранятся в разных типах объектов.
    Все обычные семейства это объект класса “FamilySymbol”
    У встроенных семейств свои классы для хранения типов.
    WallType, FloorType, CableTrayType и т.п.
    Динамо-нод FamilyType.ByName вытягивает только “FamilySymbol”. Метод АПИ GetTypeID – универсален и может получать доступ к любым объектам, описывающим типы.

    ИваСерж
    Хранитель
    134 pts

    Ну дак нет такого Семейства!!!!
    А Тип семейства – есть.
    Используйте нод FamilyType.ByName

    #7835

    В ответ на: Перевод осей в 3Д

    Legantmar
    Хранитель
    475 pts

    Нужно добавить вот эту строчку FamilySymbol.Activate(el) вот сюда:

    p.s. для тех кому интересно вот ИваСерж писал ранее 

    Иван
    Участник
    4 pts

    Тоже как-то вытаскивал имя типа из элементов. Получалось вот так:

    doc.GetElement(el.GetTypeId()).FamilyName

    То есть получилось вытащить через свойство .FamilyName

    Уже точно не помню всех ньюансов, но вроде бы если брать просто Name, то он выдавал string типа “Autodesk.Revit.DB…” и тд.

    Ссылка на свойство в RevitAPI:

    http://www.revitapidocs.com/2017.1/10de5c66-1b4b-9214-4036-27a6b24e5703.htm

    ИваСерж
    Хранитель
    134 pts

    Так… проверил в Динамо.
    familyInstance.Symbol – как ни странно, но получаем не FamilySymbol, а стринг str. – Может быть, это особенность Питона?
    У стринга конечно же нету атрибута .Name

    Метод извлечения типа через документ работает.
    typeId = i.GetTypeId()
    type = doc.GetElement(typeId)

    ИваСерж
    Хранитель
    134 pts

    Может, глюк консоли?
    familyInstance.Symbol.Name – работает аж бегом.

    Может, всетаки попробовать вариант от БилдингКодера?
    typeId = i.GetTypeId()
    type = doc.GetElement(typeId)

    Alex
    Участник

    Добрый день.

    Есть макрос для заполнения полей спецификации для revit 2015, но в 2016 он не работает. После поисков причины, выяснилось, что изменились методы get и set, но разобраться сам не могу, прошу помощи.

    часть макроса

    foreach (Element e in DuctCurves)
    {
    ElementType e_type = doc.GetElement( e.GetTypeId() ) as ElementType;//Получить экземпляр семейства
    m_duct = e_type.get_Parameter(BuiltInParameter.WINDOW_TYPE_ID).AsString();//Получить значение параметра типа семейства “Маркировка типоразмера”
    o_duct = e_type.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).AsString();//Получить значение параметра типа семейства “Описание”
    ds_name = e.get_Parameter(BuiltInParameter.RBS_SYSTEM_NAME_PARAM).AsString();//Получить значение  “Имя системы”
    err_name = e.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString();
    Parameter is_round = e.get_Parameter(BuiltInParameter.RBS_CURVE_DIAMETER_PARAM);
    if (is_round!=null)
    {
    t_duct = “диаметр мм-“;
    }
    else
    {
    t_duct = “сечение мм-“;
    }
    duct_size = e.get_Parameter(BuiltInParameter.RBS_CALCULATED_SIZE).AsString();//Получить значение параметра типа экземпляра “Размер”
    dlina = e.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();//Получить значение параметра типа экземпляра “Длина”
    dlina = UnitUtils.ConvertFromInternalUnits(dlina, DisplayUnitType.DUT_METERS);
    e.get_Parameter(“SPКол-во”).Set(dlina);//Установить значение общего параметра экземпляра “Кол-во”
    e.get_Parameter(“SPЕдиница измерения”).Set(“м.”);//Установить значение общего параметра экземпляра “Единица измерения”
    e.get_Parameter(“SPИмяСистемы”).Set(ds_name);
    e.get_Parameter(“SPПодгруппаРаздела”).Set(“2.Воздуховоды”);
    ss_name = e.get_Parameter(BuiltInParameter.RBS_DUCT_PIPE_SYSTEM_ABBREVIATION_PARAM).AsString();//Получить значение  “Сокращение системы”
    switch (ss_name) {
    case “В”:
    e.get_Parameter(“SPРазделСпецификации”).Set(“Вентиляция. “+ds_name);
    break;
    case “П”:
    e.get_Parameter(“SPРазделСпецификации”).Set(“Вентиляция. “+ds_name);
    break;
    case “Р”:
    e.get_Parameter(“SPРазделСпецификации”).Set(“Вентиляция. “+ds_name);
    break;
    default:

    break;
    }

    Ром
    Участник

    Привет товарищи!! Никак не пойму что не так???

     

    вот скрипт:

    def U(elem): # короткая функция, чтобы каждый раз не писать UnwrapElement(), вместо этого достаточно U()
    a = UnwrapElement(elem)
    return a

    points = U(IN[3])
    elemTypeSymbol = U(IN[1])
    wallTypeHost = U(IN[2])
    Struct = StructuralType
    lvl = U(IN[4])

    elementlist=[]

    TransactionManager.Instance.EnsureInTransaction(doc)

    for point in points:
    newobj = doc.Create.NewFamilyInstance(point.ToXyz(),elemTypeSymbol,lvl,StructuralType.NonStructural)
    elementlist.append(newobj.ToDSType(False))
    TransactionManager.Instance.TransactionTaskDone()

    OUT=elementlist

     

    Подскажите пожалуйста….

    #7291
    txt
    Модератор
    86 pts

    import clr
    clr.AddReference("RevitAPI")
    import Autodesk
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    doc = DocumentManager.Instance.CurrentDBDocument
    #IN[0] - выбранное в Ревите семейство
    #IN[1] Название нужного параметра (строка)
    pars_fam_editor=doc.EditFamily(doc.GetElement(UnwrapElement(IN[0]).GetTypeId()).Family).FamilyManager.Parameters
    get_formula=[i.Formula for i in pars_fam_editor if i.Definition.Name==IN[1]]
    OUT=get_formula

Просмотр 15 результатов — с 16 по 30 (из 60)