Вопрос или проблема
Я хочу отобразить все Рабочие наборы в комбобоксе. Я посмотрел на сайте 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 или по другим аспектам разработки, не стесняйтесь задавать их.