Автоматическая нумерация элементов входящих в состав группы сборки или цепи

Главная Форумы Python Помогите с питон кодом Автоматическая нумерация элементов входящих в состав группы сборки или цепи

В этой теме 1 ответ, 1 участник, последнее обновление  A.Balm 5 мес. назад.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #8278 Score: 0

    A.Balm
    Участник

    Здравствуйте коллеги!

    Встала одна банальная задача, которая не решается без костыля в Revit. К примеру, есть у нас проект СС, в котором расположены цепи, а в этих цепях элементы (розетки, распределительные коробки и прочие датчики…). По мере работы с проектом что то, как всегда, меняется и приходится тратить драгоценное время перенумеровывая эти элементы вручную открыв спецуху или, того хуже, тыкая поэлементно.

    Предположим, что проект большой, сложный и в нем этих самых цепей валом, так что провода торчат из стен как макароны из кастрюли. Вот и хотелось бы эту рутину автоматизировать.

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

    Однако на примере из 10 цепей по 20 элементов алгоритм задумывается (несильно, но все же есть опасения, что в реальных условиях при наложении фильтров может подтормаживать)

    В общем буду рад любым советам по улучшению кода.


    import clr
    clr.AddReference('RevitAPI')
    clr.AddReference('RevitAPIUI')
    from Autodesk.Revit.DB import *

    uidoc = __revit__.ActiveUIDocument
    doc = __revit__.ActiveUIDocument.Document

    """ Находим все цепи в проекте """
    collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_ElectricalCircuit)
    print(collector.GetElementCount())

    t = Transaction(doc, 'Combine mark')
    t.Start('Set mark')

    """ Ищем элементы в цепи """
    for circuit in collector:
    circuit_mark = circuit.Name # Имя цепи (он же номер)
    # print(circuit_mark)
    elements = circuit.Elements.ForwardIterator()
    element_number = 1 # Стартовый номер элемента
    while True:
    try:
    mark = 'Хреновина ' + str(element_number) + ' в цепи №' + circuit_mark # Компануем марку как нам угодно
    elements.next().LookupParameter('ADSK_Позиция').Set(mark) # Находим марку параметр в который будем ее писать
    element_number += 1
    except StopIteration:
    break
    # print(a.LookupParameter('ADSK_Позиция'))

    t.Commit()
    exit()

    #8279 Score: 0

    A.Balm
    Участник

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

Для ответа в этой теме необходимо авторизоваться.