Как получить все рабочие наборы? Revit API C#

Вопрос или проблема

Я хочу отобразить все Рабочие наборы в комбобоксе. Я посмотрел на сайте revitapidocs, там есть метод GetWorksetIds(). Но по какой-то причине он не работает в моем коде.

WorksetTable worksetTable = _doc.GetWorksetTable();

newChangeWorkSetComboBox.Items.Clear();

IList<WorksetId> worksetIds = worksetTable.GetWorksetIds(); 
foreach (WorksetId worksetId in worksetIds)
{
    Workset workset = worksetTable.GetWorkset(worksetId);
    if (workset != null && !string.IsNullOrEmpty(workset.Name))
    {
        newChangeWorkSetComboBox.Items.Add(workset.Name);
    }
}

StackPanel_ChangeWorkSets.Children.Add(newChangeWorkSetComboBox);

Появляется следующая ошибка:

Ошибка (активная) CS1061 “WorksetTable” не содержит определения “GetWorksetIds”, и не удалось найти доступный метод расширения “GetWorksetIds”, который принимал бы тип “WorksetTable” в качестве первого аргумента (возможно, директива using или ссылка на сборку была пропущена).

Как этот метод можно заменить в revit 2023?

Ответ или решение

Чтобы получить все рабочие наборы (Worksets) в Revit с использованием API на C#, необходимо учесть изменения, которые были внесены в API в более поздних версиях, таких как Revit 2023. Ошибка, которую вы получили, указывает на то, что метод GetWorksetIds() не существует для класса WorksetTable. Вместо этого API предоставляет другой метод для доступа к рабочим наборам.

Вот пошаговое руководство по тому, как корректно получить все рабочие наборы в Revit 2023 и отобразить их в ComboBox.

1. Импортируйте необходимые пространства имен

Для начала убедитесь, что вы импортировали все нужные пространства имен в ваш файл:

using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Windows.Controls; // Для использования ComboBox

2. Получение объектов Workset

Вместо использования метода GetWorksetIds(), вы можете получить рабочие наборы с помощью WorksetTable.GetWorksets(), который возвращает коллекцию ICollection<Workset>.

3. Пример кода

Вот пример кода, который демонстрирует, как получить все рабочие наборы и заполнить ComboBox:

// Предположим, что _doc — это ваш документ Revit
WorksetTable worksetTable = _doc.GetWorksetTable();
newChangeWorkSetComboBox.Items.Clear();

// Получаем все рабочие наборы
ICollection<Workset> worksets = worksetTable.GetWorksets();

foreach (Workset workset in worksets)
{
    if (workset != null && !string.IsNullOrEmpty(workset.Name))
    {
        newChangeWorkSetComboBox.Items.Add(workset.Name);
    }
}

// Добавляем ComboBox в нужный контейнер
StackPanel_ChangeWorkSets.Children.Add(newChangeWorkSetComboBox);

4. Обработка исключений

Рекомендуется обернуть код в блок try-catch для обработки возможных исключений и улучшения стабильности приложения:

try
{
    WorksetTable worksetTable = _doc.GetWorksetTable();
    newChangeWorkSetComboBox.Items.Clear();

    ICollection<Workset> worksets = worksetTable.GetWorksets();

    foreach (Workset workset in worksets)
    {
        if (workset != null && !string.IsNullOrEmpty(workset.Name))
        {
            newChangeWorkSetComboBox.Items.Add(workset.Name);
        }
    }

    StackPanel_ChangeWorkSets.Children.Add(newChangeWorkSetComboBox);
}
catch (Exception ex)
{
    TaskDialog.Show("Ошибка", $"Не удалось получить рабочие наборы: {ex.Message}");
}

5. Заключение

Таким образом, чтобы получить все рабочие наборы в Revit 2023, следует использовать метод GetWorksets() из класса WorksetTable. Обеспечьте также надлежащее управление исключениями, чтобы избежать сбоев во время выполнения.

Если у вас возникнут дополнительные вопросы о работе с API Revit или по другим аспектам разработки, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...