Revit API Change Groups в Python

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

Я могу использовать что-то вроде приведенного ниже кода, но это занимает намного больше времени, чем метод пользовательского интерфейса, когда есть много групп (например, 270 или около того). То, что занимает менее 5 минут в пользовательском интерфейсе, занимает около 20 минут или более программно.

Есть ли лучший способ сделать это так, чтобы он не занимал так много времени, как метод пользовательского интерфейса?

Вот код, который я использую для тестирования в Revit Python Shell:

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

uidoc = __revit__.ActiveUIDocument
doc = uidoc.Document
sel = uidoc.Selection.GetElementIds()

t = Transaction(doc, "Test")
t.Start()

g1 = doc.GetElement(sel[0])
g2 = doc.GetElement(sel[1])

for group in g2.Groups:
    group.GroupType = g1

t.Commit()

1 ответ

Решение

Я могу ошибаться, но я думаю, что это ваш единственный вариант. Существуют утилиты для перемещения нескольких объектов одновременно, но я не знаю ни одного способа изменить тип нескольких объектов одновременно. Revit API не завершен, поэтому есть некоторые вещи, которые вы не можете сделать в python/ C#, которые Revit может сделать сам.

Существует инструмент для копирования нескольких элементов одновременно (ElementTranformUtils.CopyElements); хотя для этого потребуется удалить все существующие семьи, прежде чем копировать их. Это, вероятно, не стоит, и я не уверен, что это будет быстрее.

Из-за того, что группы большие, они просто работают медленно, что не помогает. Я работал над сценарием, который будет редактировать группы для проверки элементов внутри группы. Это повлекло за собой разгруппировку группы, редактирование элементов, перегруппировку, а затем изменение всех существующих групп на его новый тип. Потребовалось несколько часов, чтобы запустить проект с приличным количеством групп.

Другие вопросы по тегам