Статьи > Опубликованные статьи
Работа с параметрами
ADSK:
Работа с параметрами
Павел Тер-Микаэлян:
Спасибо большое за статьи! Появился вопрос. Существуют такие параметры: "Объем/полость"(для тел выдавливания в семействах), "Выравнивание по горизонтали", "Выравнивание по вертикали"(например, для труб в проекте) и т.д. У этих параметров UnitType может быть различный, ParameterType не равен YesNo, DisplayUnitType отсутствует, а StorageType = Integer. То есть теоретически, я имею право задать любое значение Integer этим параметрам, но однако же, например, параметр "Объем/полость" может принимать значение только 0 или 1 (0 соответствует значению AsStringValue "Объем", а 1 значению AsStringValue "Полость"). Для параметров "Выравнивание по горизонтали", "Выравнивание по вертикали", допустимый список значений состоит вообще из 3-х. Пытаюсь понять, как распознать такой параметр, получить список допустимых значений и соответствующий ему список пользовательских представлений?
Павел Тер-Микаэлян:
И появился еще один вопрос. Существуют параметры, у которых StorageType = ElementId. Как понять, Id каких именно элементов могут быть значениями этого параметра? Если, например, у такого параметра существует какое-нибудь значение ElementId, то можно, получить элемент, и если тип FamilySymbol, то получить все возможные FamilySymbol через GetSimilarTypes, а если тип не FamilySymbol, то получить его категорию и все элементы этой категории. А вот если нет значения ElementId, то как определить список допустимых значений?
Виктор Чекалин:
Pabloa, вкратце - не очень хорошо с этим обстоят дела в Revit API. Значениями этих параметров являются перечисления. Информации по этому поводу не очень то много. Например, вот, аж 9ти летней давности и, кажется с тех пор в этом направлении мало что изменилось.
Для некоторых параметров список существующих значений можно найти. Например, режим расход для труб. Доступные значения есть в перечислении PipeFlowState:
--- Код - C# [Выбрать] ---// Decompiled with JetBrains decompiler// Type: Autodesk.Revit.DB.Plumbing.PipeFlowState// Assembly: RevitAPI, Version=19.0.0.0, Culture=neutral, PublicKeyToken=null// MVID: D1505DC3-637E-4035-BB8B-D3E84306FC78// Assembly location: D:\Program Files\Autodesk\Revit 2019\RevitAPI.dll namespace Autodesk.Revit.DB.Plumbing{ /// <summary>An enumerated type listing all the pipe flow states for a pipe</summary> public enum PipeFlowState { MultiValues = -1, LaminarState = 0, TransitionState = 1, TurbulentState = 2, }} Видно числовое значение и описание.
И для этого перечисления, можно даже получить локализованные значения с помощью
--- Код - C# [Выбрать] ---public static string GetLabelFor( PipeFlowState pipeFlowState, Document doc)
Но, не все так радужно. Во-первых, не для всех параметров перечисления есть соответствующий enum. Например, для упомянутого "Выравнивание по горизонтали" я так его и не нашел (возможно плохо искал). Во-вторых, нет возможности понять, какому BuiltInParameter какой enum сопоставлен. Возможно внутри Revit есть такое сопоставление, но на уровне Revit API его не видать. Ну и в-третьих, возможность получить локализованные значения возможно лишь для ооооочень ограниченного числа перечислений. А именно для четырех в Revit 2018.
Резюмируя, универсального решения нет. Список возможных числовых значений необходимо искать самостоятельно для каждого параметра в перечислениях в сборке RevitAPI.dll, либо, пробовать установить значение параметра скажем от -10 до 10 (вряд ли их будет больше). Если Exception или parameter.Set вернет False - значение не подходит. Но это сработает только для не ReadOnly параметров.
Локализованные значения тоже автоматом мне получить.
Виктор Чекалин:
--- Цитата: Pabloa от 14-06-2018, 14:40:55 ---А вот если нет значения ElementId, то как определить список допустимых значений?
--- Конец цитаты ---
С большой долей вероятности у этого параметра будет дублируещее свойство. Посмотреть в описании свйоства. Либо по сымслу. Универсального способа нет. Да и не нужно, на мой взгляд, если только нет цели написать свою реализацию Revit :)
Навигация
Перейти к полной версии