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); хотя для этого потребуется удалить все существующие семьи, прежде чем копировать их. Это, вероятно, не стоит, и я не уверен, что это будет быстрее.
Из-за того, что группы большие, они просто работают медленно, что не помогает. Я работал над сценарием, который будет редактировать группы для проверки элементов внутри группы. Это повлекло за собой разгруппировку группы, редактирование элементов, перегруппировку, а затем изменение всех существующих групп на его новый тип. Потребовалось несколько часов, чтобы запустить проект с приличным количеством групп.