Параметры в спецификации

Автор Тема: Параметры в спецификации  (Прочитано 27819 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #30 : 10-12-2013, 14:28:34 »
Прямо мистика какая то.

Последнее что еще могу предложить, выполните простую команду, в которой не производится больше никаких действий, кроме как обновление параметра:
Код - C# [Выбрать]
  1.         public Result Execute(
  2.           ExternalCommandData commandData,
  3.           ref string message,
  4.           ElementSet elements)
  5.         {
  6.             UIApplication uiapp = commandData.Application;
  7.             UIDocument uidoc = uiapp.ActiveUIDocument;
  8.             Application app = uiapp.Application;
  9.             Document doc = uidoc.Document;
  10.  
  11.             FilteredElementCollector filteredElementCollectorWall = new FilteredElementCollector(doc);
  12.             var wall = filteredElementCollectorWall.OfClass(typeof(Wall)).FirstElement() as Wall;
  13.             Parameter widthParam = wall.get_Parameter("Ширина2");
  14.             double widthValue = widthParam.AsDouble();
  15.             Parameter heightParam = wall.get_Parameter("Длина2");
  16.             double heightValue = heightParam.AsDouble();
  17.             double areaValue = widthValue * heightValue;
  18.             using (Transaction t = new Transaction(doc, "Обновление параметра"))
  19.             {
  20.                 t.Start();
  21.                 var res = wall.get_Parameter("Площадь_стены2").Set(areaValue);
  22.                 t.Commit();
  23.  
  24.                 TaskDialog.Show("Запись значения в параметр", res.ToString());
  25.             }
  26.            
  27.  
  28.             return Result.Succeeded;
  29.         }

Также после выполнения команды вышлите мне файл журнала.
Он находится в папке C:\Users\<username>\AppData\Local\Autodesk\Revit\<Ваша версия ревит>\Journals. Мне нужен текстовый файл вида journal.XXXX.txt, где XXXX самый последний порядковый номер.

Есть ли у вас возможность проверить выполнение команды на другой версии Revit или еще лучше на другом компьютере?

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #31 : 10-12-2013, 15:08:23 »
Код возвратил true.
Также я вставил TaskDialog в свой проект и он тоже возвратил true. Но в параметр ответ не записывает(в моём проекте).

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #32 : 10-12-2013, 15:21:55 »
Код возвратил true.
Параметр при этом изменился в интерфейсе? Если в вашем не изменился, то изменился ли в моем простеньком проекте?

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #33 : 10-12-2013, 15:28:52 »
В моём нет,пустое поле.
В вашем да. 0 или больше, если увеличить ширину и длину.

В моём проекте несколько стен,у каждой Ширина2 = 5, Длина2= 6.

Так же , если я открываю другие проекты(примеры Ревит), и присваиваю такие же параметры для стен, то и там параметр не меняется в интерфейсе.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #34 : 10-12-2013, 15:38:55 »
В моём проекте несколько стен,у каждой Ширина2 = 5, Длина2= 6.

Так же , если я открываю другие проекты(примеры Ревит), и присваиваю такие же параметры для стен, то и там параметр не меняется в интерфейсе.

Так ведь код то меняет значение площади только для одной, первой попавшейся стены, а не у всех стен. А вы в интерфейсе выбираете скорее всего другую стену, не ту у которой меняли параметр.

Чтобы изменить параметр у всех стен вам нужен вот такой код:
Код - C# [Выбрать]
  1.  
  2.             FilteredElementCollector filteredElementCollectorWall = new FilteredElementCollector(doc);
  3.             var walls = filteredElementCollectorWall.OfClass(typeof(Wall));
  4.             using (Transaction t = new Transaction(doc, "Обновление параметра"))
  5.             {
  6.                 t.Start();
  7.  
  8.                 foreach (Wall wall in walls)
  9.                 {
  10.                     Parameter widthParam = wall.get_Parameter("Ширина2");
  11.                     double widthValue = widthParam.AsDouble();
  12.                     Parameter heightParam = wall.get_Parameter("Длина2");
  13.                     double heightValue = heightParam.AsDouble();
  14.                     double areaValue = widthValue * heightValue;
  15.                    
  16.                     var res = wall.get_Parameter("Площадь_стены2").Set(areaValue);
  17.                    
  18.                     Debug.Print("Стена: {0}; Результат: {1}", wall.Id, res);
  19.                 }
  20.  
  21.                 t.Commit();
  22.             }

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #35 : 10-12-2013, 15:47:33 »
Да, в таком случае всё работает.
Спасибо!