Работа с параметрами

Автор Тема: Работа с параметрами  (Прочитано 12001 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ADSKАвтор темы

  • Administrator
  • Сообщений: 0
  • Карма: 2

Оффлайн Павел Тер-Микаэлян

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Работа с параметрами
« Ответ #1 : 14-06-2018, 13:38:25 »
Спасибо большое за статьи! Появился вопрос. Существуют такие параметры: "Объем/полость"(для тел выдавливания в семействах), "Выравнивание по горизонтали", "Выравнивание по вертикали"(например, для труб в проекте) и т.д. У этих параметров UnitType может быть различный,  ParameterType не равен YesNo, DisplayUnitType отсутствует, а StorageType = Integer. То есть теоретически, я имею право задать любое значение Integer этим параметрам, но однако же, например, параметр "Объем/полость" может принимать значение только 0 или 1 (0 соответствует значению AsStringValue "Объем", а 1 значению AsStringValue  "Полость"). Для параметров "Выравнивание по горизонтали", "Выравнивание по вертикали", допустимый список значений состоит вообще из 3-х. Пытаюсь понять, как распознать такой параметр, получить список допустимых значений и соответствующий ему список пользовательских представлений?

Оффлайн Павел Тер-Микаэлян

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Работа с параметрами
« Ответ #2 : 14-06-2018, 14:40:55 »
И появился еще один вопрос. Существуют параметры, у которых StorageType = ElementId. Как понять, Id каких именно элементов могут быть значениями этого параметра?  Если, например, у такого параметра существует какое-нибудь значение ElementId, то можно, получить элемент, и если тип FamilySymbol, то получить все возможные FamilySymbol через GetSimilarTypes, а если тип не FamilySymbol, то получить его категорию и все элементы этой категории. А вот если нет значения ElementId, то как определить список допустимых значений?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Работа с параметрами
« Ответ #3 : 14-06-2018, 15:27:03 »
Pabloa, вкратце - не очень хорошо с этим обстоят дела в Revit API. Значениями этих параметров являются перечисления. Информации по этому поводу не очень то много. Например, вот, аж 9ти летней давности и, кажется с тех пор в этом направлении мало что изменилось.

Для некоторых параметров список существующих значений можно найти. Например, режим расход для труб. Доступные значения есть в перечислении PipeFlowState:
Код - C# [Выбрать]
  1. // Decompiled with JetBrains decompiler
  2. // Type: Autodesk.Revit.DB.Plumbing.PipeFlowState
  3. // Assembly: RevitAPI, Version=19.0.0.0, Culture=neutral, PublicKeyToken=null
  4. // MVID: D1505DC3-637E-4035-BB8B-D3E84306FC78
  5. // Assembly location: D:\Program Files\Autodesk\Revit 2019\RevitAPI.dll
  6.  
  7. namespace Autodesk.Revit.DB.Plumbing
  8. {
  9.   /// <summary>An enumerated type listing all the pipe flow states for a pipe</summary>
  10.   public enum PipeFlowState
  11.   {
  12.     MultiValues = -1,
  13.     LaminarState = 0,
  14.     TransitionState = 1,
  15.     TurbulentState = 2,
  16.   }
  17. }
  18.  
Видно числовое значение и описание.
И для этого перечисления, можно даже получить локализованные значения с помощью
Код - C# [Выбрать]
  1. public static string GetLabelFor(
  2.         PipeFlowState pipeFlowState,
  3.         Document doc
  4. )

Но, не все так радужно. Во-первых, не для всех параметров перечисления есть соответствующий enum. Например, для упомянутого "Выравнивание по горизонтали" я так его и не нашел (возможно плохо искал). Во-вторых, нет возможности понять, какому BuiltInParameter какой enum сопоставлен. Возможно внутри Revit есть такое сопоставление, но на уровне Revit API его не видать. Ну и в-третьих, возможность получить локализованные значения возможно лишь для ооооочень ограниченного числа перечислений. А именно для четырех в Revit 2018.

Резюмируя, универсального решения нет. Список возможных числовых значений необходимо искать самостоятельно для каждого параметра в перечислениях в сборке RevitAPI.dll, либо, пробовать установить значение параметра скажем от -10 до 10 (вряд ли их будет больше). Если Exception или parameter.Set вернет False - значение не подходит. Но это сработает только для не ReadOnly параметров.
Локализованные значения тоже автоматом мне получить.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Работа с параметрами
« Ответ #4 : 14-06-2018, 15:31:39 »
А вот если нет значения ElementId, то как определить список допустимых значений?
С большой долей вероятности у этого параметра будет дублируещее свойство. Посмотреть в описании свйоства. Либо по сымслу. Универсального способа нет. Да и не нужно, на мой взгляд, если только нет цели написать свою реализацию Revit :)

Оффлайн Павел Тер-Микаэлян

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Работа с параметрами
« Ответ #5 : 14-06-2018, 16:11:57 »
Ясно) Спасибо за ответы! Просто пишу программу, которая выгружает в Excel все параметры и значения элементов проекта для выбранной категории, семейства и типоразмера, а потом после корректировок в Excel'е, загружает их обратно и при этом, в Excel'е будут выпадающие списки с допустимыми значениями. И выходит, что не для всех параметров так можно.

Оффлайн Николaй

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Работа с параметрами
« Ответ #6 : 19-07-2021, 20:01:27 »
Здравтсвуйте. Не понимаю в чём проблема.
Код - C# [Выбрать]
  1.             ElementId selected_wall_type = null;
  2.             Parameter selected_wall_width = null;
  3.             foreach (Element e in walls_types)
  4.             {
  5.                 if (e.Name == Valka1.val1)
  6.                 {
  7.                     selected_wall_type = e.Id;
  8.                     selected_wall_width = e.LookupParameter("Толщина").AsDouble;
  9.                     prompt_selected_wall += e.Name + " с ID = " + e.Id;
  10.                 }
  11.             }




Пишет что не может преобразовать в double. Что я делаю не так? Как мне получить значение параметра "Толщина"? Вроде бы всё по инструкции...
« Последнее редактирование: 19-07-2021, 23:33:51 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с параметрами
« Ответ #7 : 19-07-2021, 23:33:25 »
Николaй,
Приветствую на форуме!
Пожалуйста прочитай у меня в подписи правило форматирование кода на форуме и впредь соблюдай его!
Ошибка в коде очевидна. Вместо
Код - C# [Выбрать]
  1. selected_wall_width = e.LookupParameter("Толщина").AsDouble;
должно быть
Код - C# [Выбрать]
  1. selected_wall_width = e.LookupParameter("Толщина").AsDouble();
И это конечно в случае если e.LookupParameter("Толщина") будет не null
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николaй

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Работа с параметрами
« Ответ #8 : 20-07-2021, 11:34:45 »
Пожалуйста прочитай у меня в подписи правило форматирование кода на форуме и впредь соблюдай его!
Ошибка в коде очевидна. Вместо

Блиин... это же надо быть таким невнимательным...
Спасибо большое, помогло.

Правила почитаю. Не знал