Изменить выделение для первого элемента с помощью Selection.SetElementIds - PullRequest
0 голосов
/ 23 января 2019

У меня проблемы с написанием скрипта, который позволяет медикам выбрать первый элемент в моем выборе. Это полезно для меня, потому что я выбираю свой правильный Аэровокзал из расписания (где я вижу похожий воздушный поток, который я хочу использовать) и использую команду Создать подобное из выбора. Проблема в том, что эта команда не работает, когда выбрано несколько элементов. Поэтому я хочу первый объект из списка. Это код, который я пытаюсь:

from Autodesk.Revit.UI.Selection.Selection import SetElementIds
from System.Collections.Generic import List

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
selection = [ doc.GetElement( elId ) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ]
sel=[]
for i in selection:
    sel.append(i.Id)
uidoc.Selection.SetElementIds(List[ElementId](sel[0]))

Это вернет следующее сообщение об ошибке:

Исключение: Microsoft.Scripting.ArgumentTypeException: ожидается int, получено ElementId Ок, тогда попробую заменить

uidoc.Selection.SetElementIds(List[ElementId](sel[0]))

с

uidoc.Selection.SetElementIds(List[ElementId](sel[0].IntegerValue))

Кажется, это работает, но выбор не изменяется

Я только начинаю писать RPS-скрипты, но я надеюсь, что кто-то покажет мне, что я делаю не так, даже если это очень очевидно.

Спасибо. Kyrre

EDIT: Спасибо, Джереми, за решение этого для меня! Хитрость заключалась в том, чтобы создать список, а не список Python. .Добавить метод - это то, что я не получил.

Финальный код, если кому-то интересно:

from Autodesk.Revit.UI.Selection.Selection import SetElementIds
from System.Collections.Generic import List
from Autodesk.Revit.DB import ElementId
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
selection = [ doc.GetElement( elId ) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ]
sel=[]
for i in selection:
    sel.append(i.Id)
ids=List[ElementId](1)
ids.Add(sel[0]) 
uidoc.Selection.SetElementIds(ids)

1 Ответ

0 голосов
/ 24 января 2019

SetElementIds принимает аргумент .NET ICollection<ElementId>, как вы можете видеть из документации Revit API .

Ваш оператор вызывает конструктор .NET List, который ожидает целочисленный аргумент, указывающий число N элементов для выделения пространства для: List[ElementId](N).

sel[0] - это ElementId, а не целое число, которое вызывает первую ошибку.

sel[0].IntegerValue - это (очень большое и полу произвольное) целое число, поэтому не вызывает ошибок. Однако вы по-прежнему оставляете List пустым, безлюдным.

Вы должны инициализировать List для одного элемента и добавить следующее:

ids = List[ElementId](1)
ids.Add(sel[0])
...