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

ADN Club => Revit API => Тема начата: Agens от 08-01-2020, 13:19:42

Название: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 08-01-2020, 13:19:42
Все добрый день. Если что, я только учусь...  :o
В Revit имеем "Параметр проекта", созданный "ручками"...

Как мне на C# получить список всех параметров комнаты и изменить добавленный, может пнет кто в нужную сторону?
ПС. Сам уже два дня пытаюсь достучатся до GetParameters... :(
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 08-01-2020, 14:00:55
Код - C# [Выбрать]
  1. foreach (Parameter spaceparameter in space.Parameters)
  2.  {
  3.    if (spaceparameter.Definition.Name == "AG.room.temp")
  4.     {
  5.        var temp = spaceparameter.AsValueString();
  6.        TaskDialog.Show(spaceparameter.Definition.Name, temp);
  7.        spaceparameter.SetValueString("22");
  8.     }
  9.  }
  10.  

Считать параметр получилось "spaceparametr.Definition.Name" и "spaceparametr.AsValueString()", а вот перезаписать не получается "spaceparametr.SetValueString("22")"...

В чем дело?

С статье https://adn-cis.org/rabota-s-parametrami.html (https://adn-cis.org/rabota-s-parametrami.html) все прекрасно описано...

Цитировать
Чтобы установить значение параметра, необходимо воспользоваться перегруженным методом Parameter.Set(). Аргумент зависит от того, какого типа параметр. В зависимости от этого нужно передать String, Double, Integer или ElementId. Если параметр успешно записан, то вернется значение true. Иначе – false.

Также есть метод Parameter.SetValueString(String). Метод в качестве аргумента принимает значение параметра в том виде, в котором его видит пользователь. Т.е. можно для записи длины передать 2 м и Revit сам попытается его распарсить и преобразовать во внутреннее значение. Данный метод нельзя применить для параметра типа ElementId.
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 09-01-2020, 13:59:57
1) Быстрее и правильнее будет использовать метод:
Код - C# [Выбрать]
  1. var spaceparameter = space.LookupParameter("AG.room.temp");

2) В зависимости от типа параметра, если численный, то:
Код - C# [Выбрать]
  1. spaceparameter.Set(22);
Или
Код - C# [Выбрать]
  1. spaceparameter.Set(22.75);
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 09-01-2020, 14:05:46
Если текстовый то:
Код - C# [Выбрать]
  1. spaceparameter.Set("22");

Но, видимо, не в этом случае, поскольку у тебя метод AsValueString(), видимо, возвращает правильное значение.
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 09-01-2020, 18:18:03
Александр, большое спасибо за ответ. Но проблема была в "Transaction", забыл...
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 09-01-2020, 18:31:22
Хах)

Ну там вроде бы понятный exception бросается, что-то вроде "Attempt to modify the model outside transaction" (на память, точный текст не помню)...
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 09-01-2020, 18:35:10
Может тогда подскажете, может в Revit 2020 решилась проблема с добавлением "Параметры проекта", а не общих...
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 09-01-2020, 18:38:17
Да ничего не изменилось, программно можно только общие параметры проекта создавать.
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 09-01-2020, 19:57:43
т.е. в Помещение и Пространство я не могу добавить свои свойства?
посмотрел я эту тему -> https://adn-cis.org/forum/index.php?topic=7129.0 (https://adn-cis.org/forum/index.php?topic=7129.0), общие добавляются, но дальше ни как...

Код - C# [Выбрать]
  1. CategorySet categorySet = doc.Application.Create.NewCategorySet();
  2. categorySet.Insert(Category.GetCategory(doc, BuiltInCategory.OST_MEPSpaces));
  3.         using (var t = new Transaction(doc, "Вставляем параметр"))
  4.         {
  5.             t.Start();
  6.             var binding1 =  doc.Application.Create.NewTypeBinding(categorySet);
  7.  
  8.             BuiltInParameterGroup builtInParameterGroup = new BuiltInParameterGroup();
  9.             //builtInParameterGroup.GetType()
  10.  
  11.  
  12.             bindingMap.Insert(def, binding);
  13.  
  14.             t.Commit();
  15.         }
  16.  

в OST_MEPSpaces нужно добраться...

в BindingMap есть еще один параметр Autodesk.Revit.DB BuiltInParameterGroup, добавил BuiltInParameterGroup.PG_TEXT.

Вообщем, нужно как-то поменять "Тип" на "Экземпляр"... Или это вообще по другому делается? Помогите плиз...

(https://i.postimg.cc/sBcvmZyN/pic-1.png) (https://postimg.cc/sBcvmZyN) (https://i.postimg.cc/N9CLqqK8/pic-2.png) (https://postimg.cc/N9CLqqK8)
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 10-01-2020, 09:38:21
NewInstanceBinding вместо NewTypeBinding
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 10-01-2020, 10:17:51
Спасибо огромное. Т.к. API только изучаю, постараюсь спрашивать меньше, уж простите...
РАБОТАЕТ!!!
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Александр Игнатович от 10-01-2020, 10:26:04
API только изучаю, постараюсь спрашивать меньше, уж простите...

Ну этот форум в общем-то и существует для того, чтобы спрашивать и получать ответы
Название: Re: Параметр проекта. Доступ и изменение.
Отправлено: Agens от 14-02-2020, 14:02:11
---