Revit API — переименовывать только экземпляры систем воздуховодов

Я новичок в Revit API и в настоящее время борюсь с этим фрагментом кода.

Что я пытаюсь сделать, так это получить все экземпляры систем воздуховодов в проекте и переименовать их (в будущем я планирую использовать более сложный алгоритм, а не просто добавлять x в конце текущего имени...). Однако этот код не только переименовывает все экземпляры системы воздуховодов, но и переименовывает типы систем воздуховодов, и я не могу понять, как выбрать только экземпляры системы воздуховодов.

Public Sub RenameSystems()
    Dim MyUIDoc As Autodesk.Revit.ui.uidocument
    Dim MyDoc As Autodesk.Revit.db.document
    Dim CategoryToFilter As Autodesk.Revit.DB.BuiltInCategory
    Dim OtherElementCollector As Autodesk.revit.DB.filteredelementcollector
    Dim FinalSelection As System.collections.generic.icollection(Of Autodesk.Revit.DB.element)
    Dim currentelement As Autodesk.Revit.DB.element
    
    CategoryToFilter = Autodesk.revit.db.builtincategory.OST_DuctSystem
    Dim MyOtherFilter As New Autodesk.Revit.db.ElementCategoryFilter(CategoryToFilter)
    MyUIDoc = Me.ActiveUIDocument
    MyDoc = Me.activeuidocument.document
    OtherElementCollector = New Autodesk.revit.DB.filteredelementcollector(MyDoc)
    FinalSelection = otherelementcollector.wherepasses(MyOtherFilter).ToElements
    
    Using transaction As New Transaction(MyDoc,"Transaction1")
        transaction.start
        For Each currentelement In FinalSelection
            currentelement.Name = currentelement.Name & "x"
        Next
        Transaction.commit
    End using
End Sub

Результат смотрите на прикрепленном изображении.

Переименовать системную проблему


person Frédéric Lécuyer    schedule 25.03.2017    source источник


Ответы (1)


Вам нужно отфильтровать типы элементов из вашего FilteredElementCollector. Это можно сделать с помощью метода WhereElementIsNotElementType.

Я не знаю VB, поэтому я не совсем уверен в синтаксисе, но я предполагаю, что вам просто нужно изменить эту строку

FinalSelection = otherelementcollector.wherepasses(MyOtherFilter).ToElements

to

FinalSelection = otherelementcollector.wherepasses(MyOtherFilter).WhereElementIsNotElementType().ToElements
person Colin Stark    schedule 25.03.2017