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

ADN Club => Revit API => Тема начата: GIPPY от 20-06-2021, 16:49:20

Название: Изменение значения параметра семейства
Отправлено: GIPPY от 20-06-2021, 16:49:20
Здравствуйте.
Прошу помощи.
Dim sdff As Parameter
 sdff = obj.LookupParameter("Описание")

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

(https://i.ibb.co/0yWVNXy/Image1.jpg) (https://ibb.co/KxQzZGx)
Название: Re: Изменение значения параметра семейства
Отправлено: Александр Игнатович от 20-06-2021, 22:09:11
Эммм... Судя по картинке, ты хочешь изменить параметр типоразмера, а не экземпляра семейства, а в коде ищешь параметр именно экземпляра. Ещё рекомендую везде, где можно, получать параметры либо используя перечисление BuiltInParameter для встроенных параметров или GUID для общих. Рекомендация #2 - поставить и использовать RevitLookup, сильно помогает в разработке.
Название: Re: Изменение значения параметра семейства
Отправлено: GIPPY от 21-06-2021, 18:40:21
Спасибо за ответ.
Действительно revitlookup в парметрах семейства не отобразил параметр Описание. Я решил попробовать поработать с отображаемым параметром Марка

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

(https://i.postimg.cc/v4YYpV3W/Image1.jpg) (https://postimg.cc/v4YYpV3W)

(https://i.postimg.cc/PvfHBGMd/Image2.jpg) (https://postimg.cc/PvfHBGMd)
Название: Re: Изменение значения параметра семейства
Отправлено: Александр Игнатович от 21-06-2021, 18:57:11
Используй метод Parameter.Set взамен.

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

Таким образом, например, для параметра типа "Да/Нет" будет рабочим код parameter.SetValueString("Да") (ну, пока пользователь не запустит Revit на английском языке, по этой же причине не рекомендую использовать метод LookupParameter). Возможно, американцам он удобен с их имперскими "1 1/2 дюйма", но лучше пользоваться одним из overload-ов метода Parameter.Set
Название: Re: Изменение значения параметра семейства
Отправлено: GIPPY от 21-06-2021, 19:09:58
Большое спасибо за ответ.
код
obj.LookupParameter("Марка").Set("Фм")сработал.