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

ADN Club => Revit API => Тема начата: enot от 05-03-2019, 15:33:28

Название: StorageType из BuiltInParameter
Отправлено: enot от 05-03-2019, 15:33:28
Возможно ли получить StorageType из BuiltInParameter ?

Что я конкретно пытаюсь сделать :
Вот код , получаю параметры спецификации

         
Код - C# [Выбрать]
  1. var ids = schedule.Definition.GetFieldOrder();
  2.                             foreach (ScheduleFieldId id in ids)
  3.                             {
  4.                                 ScheduleField field = schedule.Definition.GetField(id);                            
  5.                                     if (field.ParameterId.IntegerValue < -1)
  6.                                     {
  7.                                         BuiltInParameter bip =((BuiltInParameter)field.ParameterId.IntegerValue);
  8.                                     }


далее мне нужно из field или BuiltInParameter  получить StorageType параметра ?
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 05-03-2019, 15:56:00
Напрямую - никак. Но, у спецификации есть категория, достаточно из документа получить ровно один инстанс и ровно один тип этой категории, собрать из них все built-in-parameter-ы, например, в словарь.

А вообще, Ваш код в общем случае не будет работать на реальных спецификациях, где будут combined/calculated параметры, там доп. проверки нужны перед тем, как получать field.ParameterId
Название: Re: StorageType из BuiltInParameter
Отправлено: enot от 05-03-2019, 15:58:23
Но, у спецификации есть категория, достаточно из документа получить ровно один инстанс и ровно один тип этой категории, собрать из них все built-in-parameter-ы, например, в словарь
- мда, логично StorageType свойства параметра , а Parameter= element. get_Paraneter(BuiltInParameter ... , для ElementId>0 получаем SharedParameterElement - здесь проще


 - А это будет работать для спецификации из нескольких категорий?
 для такой спецификации schedule.Definition.CategoryId по моему возвращает null
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 05-03-2019, 16:02:48
Нет ))
Но можно взять категории из doc.Settings и по тому же алгоритму.

Вообще, что-то мне подсказывает, что Вы, вероятно, не по правильному пути идёте. Зачем вообще перебирать поля спецификации и получать Storage type параметров?
Название: Re: StorageType из BuiltInParameter
Отправлено: enot от 05-03-2019, 16:11:07
Вообще, что-то мне подсказывает, что Вы, вероятно, не по правильному пути идёте
все может быть...

Смотрите,
я далее буду создавать фильтры в спецификации для этих параметров.
При добавлении фильтра мне нужно указать значение, которое в свою очередь будет зависеть от StorageType параметра
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 05-03-2019, 16:16:05
А разве значения фильтров таки не от конкретного параметра зависит?
Название: Re: StorageType из BuiltInParameter
Отправлено: enot от 05-03-2019, 16:18:10
StorageType -  да , а значение может быть любое
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 05-03-2019, 16:21:10
Случайной чтоли?  :o

Вроде, по логике, значение создаваемого фильтра должно зависеть от того, по какому параметру фильтруется, а раз знаем перечень параметров для фильтров, то и знаем всё остальное
Название: Re: StorageType из BuiltInParameter
Отправлено: enot от 05-03-2019, 16:23:19
а раз знаем перечень параметров для фильтров, то и знаем всё остальное
В существующей спецификации мы можем получить не параметры , а  ParameterId , верно?

когда я буду создавать фильтр , то подаваемое значение Фильтра => value будет всегда String , зная StorageType параметра я конвертирую его в случае, например если StorageType параметра = StorageType.Double , а value="123":  convert_value = Convert.ToDouble("123")
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 05-03-2019, 16:29:00
Чтобы создать фильтр, нужно знать значение этого фильтра, должна же быть какая-то логика, а не случайное значение. Эта логика подразумевает, что мы знаем тип поля, по которому фильтруется спецификация, нет?
Название: Re: StorageType из BuiltInParameter
Отправлено: Александр Игнатович от 04-04-2019, 16:35:57
Напрямую - никак.

Простите, был неправ

Код - C# [Выбрать]
  1. var storageType = doc.get_TypeOfStorage(BuiltInParameter.SYMBOL_NAME_PARAM);
Название: Re: StorageType из BuiltInParameter
Отправлено: enot от 04-04-2019, 20:26:11
О!! Это отличная новость! Работает   :D

(https://i.postimg.cc/945HyVv9/Cool.jpg) (https://postimg.cc/945HyVv9)