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

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

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

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

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

Оффлайн Pabloa

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

Оффлайн Pabloa

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

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

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

Оффлайн Pabloa

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