Изменение значения параметра семейства

Автор Тема: Изменение значения параметра семейства  (Прочитано 1314 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Здравствуйте.
Прошу помощи.
Dim sdff As Parameter
 sdff = obj.LookupParameter("Описание")

в данном коде я пытаюсь в текущей транзакции после создания семейства obj найти значение параметра Описание и потом его изменить,
но не получается даже его найти, значение sdff возвращается пустое (nothing).


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

  • Administrator
  • *****
  • Сообщений: 1084
  • Карма: 319
  • Skype: alexandr.ignatovich.itc
Эммм... Судя по картинке, ты хочешь изменить параметр типоразмера, а не экземпляра семейства, а в коде ищешь параметр именно экземпляра. Ещё рекомендую везде, где можно, получать параметры либо используя перечисление BuiltInParameter для встроенных параметров или GUID для общих. Рекомендация #2 - поставить и использовать RevitLookup, сильно помогает в разработке.

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Спасибо за ответ.
Действительно revitlookup в парметрах семейства не отобразил параметр Описание. Я решил попробовать поработать с отображаемым параметром Марка

obj.LookupParameter("Марка").SetValueString("Фм")
этот код не вызвал ошибку, но и не присвоил значение Фм параметру  Марка.





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

  • Administrator
  • *****
  • Сообщений: 1084
  • Карма: 319
  • Skype: alexandr.ignatovich.itc
Используй метод Parameter.Set взамен.

Здесь не очень ясно отображено в документации, исходим из логики, представленной API в классе Parameter. У него есть методы .AsString() и .AsValueString(), если тип параметра строковой, то AsString вернёт значение параметра, .AsValueString() - вернёт null. Если, например, параметр типа "Да/Нет", то результат AsString() будет null, AsValueString(), например, "Да", (AsInteger() == 1)

Таким образом, например, для параметра типа "Да/Нет" будет рабочим код parameter.SetValueString("Да") (ну, пока пользователь не запустит Revit на английском языке, по этой же причине не рекомендую использовать метод LookupParameter). Возможно, американцам он удобен с их имперскими "1 1/2 дюйма", но лучше пользоваться одним из overload-ов метода Parameter.Set

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Большое спасибо за ответ.
код
obj.LookupParameter("Марка").Set("Фм")сработал.