Параметр проекта. Доступ и изменение.

Автор Тема: Параметр проекта. Доступ и изменение.  (Прочитано 417 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
Все добрый день. Если что, я только учусь...  :o
В Revit имеем "Параметр проекта", созданный "ручками"...

Как мне на C# получить список всех параметров комнаты и изменить добавленный, может пнет кто в нужную сторону?
ПС. Сам уже два дня пытаюсь достучатся до GetParameters... :(
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
Код - 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 все прекрасно описано...

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

Также есть метод Parameter.SetValueString(String). Метод в качестве аргумента принимает значение параметра в том виде, в котором его видит пользователь. Т.е. можно для записи длины передать 2 м и Revit сам попытается его распарсить и преобразовать во внутреннее значение. Данный метод нельзя применить для параметра типа ElementId.
« Последнее редактирование: 08-01-2020, 14:40:58 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
1) Быстрее и правильнее будет использовать метод:
Код - C# [Выбрать]
  1. var spaceparameter = space.LookupParameter("AG.room.temp");

2) В зависимости от типа параметра, если численный, то:
Код - C# [Выбрать]
  1. spaceparameter.Set(22);
Или
Код - C# [Выбрать]
  1. spaceparameter.Set(22.75);

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
Если текстовый то:
Код - C# [Выбрать]
  1. spaceparameter.Set("22");

Но, видимо, не в этом случае, поскольку у тебя метод AsValueString(), видимо, возвращает правильное значение.

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
Александр, большое спасибо за ответ. Но проблема была в "Transaction", забыл...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
Хах)

Ну там вроде бы понятный exception бросается, что-то вроде "Attempt to modify the model outside transaction" (на память, точный текст не помню)...

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
Может тогда подскажете, может в Revit 2020 решилась проблема с добавлением "Параметры проекта", а не общих...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
Да ничего не изменилось, программно можно только общие параметры проекта создавать.

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 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.

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


« Последнее редактирование: 10-01-2020, 09:53:22 от Александр Ривилис »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Отмечено как Решение Александр Ривилис 10-01-2020, 10:20:28

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
NewInstanceBinding вместо NewTypeBinding

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
Спасибо огромное. Т.к. API только изучаю, постараюсь спрашивать меньше, уж простите...
РАБОТАЕТ!!!
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 734
  • Карма: 240
  • Skype: alexandr.ignatovich.itc
API только изучаю, постараюсь спрашивать меньше, уж простите...

Ну этот форум в общем-то и существует для того, чтобы спрашивать и получать ответы

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

  • ADN OPEN
  • ***
  • Сообщений: 163
  • Карма: 0
---
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020