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

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

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

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #15 : 09-12-2013, 16:21:41 »
Давайте тогда определимся что значит "не считает". Посчитать площадь прямоугльника - это простая арифметическая операция умножения и ошибиться тут сложно. Если переменные не равны 0, то значение площади в любом случае посчитается.

Все же скажите мне чему равны переменные widthValue, heightValue и areaValue?

Или площадь же считается, но не происходит сохранение площади в параметр Площадь_стены?

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #16 : 09-12-2013, 16:32:11 »
widthValue и  heightValue равны 5 и 6. В дебагере также отображается. areaValue - просто пустое поле(в дебагере 0)
Ширина1, Длина1 и Площадь_стены это общие параметры созданные вручную в revit

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #17 : 09-12-2013, 16:40:40 »
Виктор,
areaValue считает в дебагере, но не записывает в Revit

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #18 : 09-12-2013, 16:44:48 »
Уже интереснее. Т.е. выходит что операции умножения не просходит.
Я как то сталкивался с таким, что дебагер показывает неверное значение. Скорее всего это глюк дебагера.

У меня есть подозрение что ошибка в записи результата в параметр (8 строка).
После выполнения вашего когда, чему равен параметр Площадь_стены в интерфейсе?

Попробуйте исправить код вот так:
Код - C# [Выбрать]
  1.             bool res = wall.get_Parameter("Площадь_стены").Set(areaValue);
  2.  
  3.             TaskDialog.Show("Тест", string.Format("Ширина: {0}\r\nДлина: {1}\r\nПлощадь: {2}\r\nРезультат: {3}",
  4.                 widthValue,
  5.                 heightValue,
  6.                 areaValue,
  7.                 res));
  8.  

Выполните и скажите что поулчилось.

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #19 : 09-12-2013, 16:59:36 »
Дебагер считает, ваш код также возвращает правильное значение.
Не записывает значение в параметр Площадь_стены

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #20 : 09-12-2013, 17:18:17 »
Как я и думал. Подвох именно в записи параметра.
Проверьте тип параметра Площадь_стены. В интерфейсе вы в этот параметр можете записать значение?

Ради эксперимента попробуйте заменить .Set(areaValue); на .Set(areaValue.ToString()); и на .SetValueString(areaValue.ToString());

Транзакция как открывается: автоматически или вручную?


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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #21 : 09-12-2013, 17:23:13 »
В интерфейсе значения записываются, формулы считаются.
Приведение к строке также не помогло.

Транзакция вручную.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #22 : 09-12-2013, 17:30:05 »
В таком случае хочется видеть весь код внешней команды, где вы записываете площадь в параметр.

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #23 : 10-12-2013, 10:32:50 »
Помимо площади там создаётся таблица, но создание полей для неё я закомментил.
 

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #24 : 10-12-2013, 11:13:06 »
Попробовал выполнить. Вот такой код у меня сработал
Код - C# [Выбрать]
  1.             double heightValue = heightParam.AsDouble();
  2.             double areaValue = widthValue * heightValue;
  3.             var res = wall.get_Parameter("Площадь_стены2").Set(areaValue);

Результат равен true.
Тип параметров Длина2 и Ширина2 - Длина.
Тип параметра Площадь_стены2 - Площадь.

Заметил правда вот что. Если Длина2 = 6 и Ширина2 = 5, то площадь будет равна 0.

Все дело в том, что по умолчанию длина и ширина устанавливается в миллиметрах, а площадь - в квадратных метрах. Т.е. площадь просто очень маленькая.

Попробуйте код, что я привел выше. Чему равна переменная res? Чему равно значение параметра Площадь_стуны в интерфейсе после этого?

На всякий случай - какую версию Revit используете?

« Последнее редактирование: 10-12-2013, 11:41:36 от Виктор Чекалин »

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #25 : 10-12-2013, 13:03:17 »
res выдаёт false,а revit 2014.
А компилятор считает площадь правильно, но переводит значения в дюймы.
« Последнее редактирование: 10-12-2013, 13:22:31 от Alexander »

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #26 : 10-12-2013, 13:25:51 »
Попробуйте на вот этом проекте.
Я также в 2014 Ревите пробовал.

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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #27 : 10-12-2013, 13:42:13 »
В вашем проекте считает
res - false

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры в спецификации
« Ответ #28 : 10-12-2013, 13:51:04 »
В этом случае становится ситуация становится еще более непонятной.

Попробуйте еще тогда с моей надстройкой.


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

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Параметры в спецификации
« Ответ #29 : 10-12-2013, 14:14:36 »
Ваш так же считает правильно, но res по-прежнему false.