Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Bazinga от 25-11-2017, 12:43:58

Название: Доступ к типам и группировке параметров
Отправлено: Bazinga от 25-11-2017, 12:43:58
(https://s7.postimg.org/dn7u33tp3/image.png) (https://postimg.org/image/dn7u33tp3/)
Можно как то извлечь данные в полях тип параметра и группировку параметров?
Группировка параметров как
Код - C# [Выбрать]
  1. BuiltInParameterGroup.PG_ANALYTICAL_MODEL
после BuiltInParameterGroup идет перебор доступных групп.
Тип параметра аналогично задается через ParameterType.
Существует ли метод, в который можно передать просто имя?

у типа параметра и группы (если в описании смотреть) есть некоторое числовое значение, может по нему можно получать необходимую группу или тип?
(https://s7.postimg.org/7hbftfvsn/Inked123_LI.jpg) (https://postimg.org/image/7hbftfvsn/)
Название: Re: Доступ к типам и группированию параметров
Отправлено: Александр Пекшев aka Modis от 25-11-2017, 12:52:36
Я раза три прочитал вопрос и не понял о чем речь))
Вам нужно у элемента получить параметр? Или что?
Существует ли метод, в который можно передать просто имя?
По имени чего? Параметра? Конечно есть. Даже два варианта:
1. Сделать итерацию по всем параметрам элемента:
Код - C# [Выбрать]
  1. foreach (Parameter p in element.Parameters)
  2. {
  3.       p.Definition.Name - это имя параметра
  4. }
2. Использовать метод element.LookupParameter() (http://www.revitapidocs.com/2016/4400b9f8-3787-0947-5113-2522ff5e5de2.htm)
есть некоторое числовое значение
Это называется enum (https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/enum) ))
Название: Re: Доступ к типам и группированию параметров
Отправлено: Bazinga от 25-11-2017, 13:55:24
Александр Пекшев aka Modis, если кратко. Нужно вытащить тип параметра и группирование параметров. Метод BuiltInParameterGroup предоставляет 108 вариантов, в то время как в UI используется 44(45). Про ParameterType также достаточно много вариантов. А вот как сделать, чтобы по имени не пойму или по номеру (как на картинке).
Хотелось бы, чтобы пользователь выбрал тип параметра "Длина", в группу "Размеры" и в коде было
Код - C# [Выбрать]
  1. BuiltInParameterGroup("Length") или BuiltInParameterGroup("ID")  
аналогично для типа параметра.
Уж очееень много лишнего кода получится при добавлении параметра через API, т.к. обработать необходимо будет все варианты группирования 40+ и все варианты типа параметра.
Название: Re: Доступ к типам и группированию параметров
Отправлено: Александр Пекшев aka Modis от 25-11-2017, 15:30:09
Посмотрите в класс LabelUtils, а конкретно в метод GetLabelFor (http://www.revitapidocs.com/2016/39e41221-70f9-fae6-53e6-872eff5a2c63.htm)
Название: Re: Доступ к типам и группировке параметров
Отправлено: Виктор Чекалин от 27-11-2017, 09:51:06
Уж очееень много лишнего кода получится при добавлении параметра через API
То что много получается кода при добавлении параметра - это да. Но что же вы там такого делаете, что вам так крайне необходимо имя?
Перечисления (enum) используются для того, чтобы избежать проблем локализации в том числе. И даже если локализация не планируется, то это как минимум, плохая практика, писать такой код, который будет зависеть от локализации.
А так, Александр  правильно сказал. Используйте LabelUtils.GetLabelFor. Класс возвращает локализованное значение перечислений. Но в коде в любом случае придется использовать перечисление, а не название.
Если вы используете в вашем интерфейсе выбор группы и типа, то используйте данный метод для отображения названий, но ключом будет являться все равно значение перечисления, которое вы будете использовать в коде.
Если же вам не нужно отображать название пользователю, а лишь в коде найти группу по имени, то я не понимаю, зачем это. Подставляйте перечисление и все.