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

ADN Club => Revit API => Тема начата: Антон Останин от 21-04-2015, 12:30:49

Название: ReplaceParameter
Отправлено: Антон Останин от 21-04-2015, 12:30:49
Здравствуйте, подскажите, пожалуйста, как изменить значение BuiltInParameterGroup у параметра?
Я использовал метод:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs7.postimg.org%2Ftj8nszht3%2F6666.jpg&hash=70cb7ffd8c34b120ca5307813bb97ea6) (http://postimg.org/image/tj8nszht3/)
 mgr.ReplaceParameter(mgr.get_Parameter(parameter), mgr.get_Parameter(parameter).Definition.Name, builtGroup, true);
Выдает исключение: Cannot replace a family parameter with another family parameter, use RenameParameter() instead.
С переименованием параметра у меня не возникает проблем, но мне нужно изменить группу.
Название: Re: ReplaceParameter
Отправлено: Александр Игнатович от 22-04-2015, 07:00:33
День добрый. Из описания метода в SDK:
Цитировать
Replace a shared family parameter with a new non-shared family parameter.

т.е. второй параметр должен быть новым,  mgr.get_Parameter(parameter).Definition.Name возвращает существующий. Кроме того, насколько я понял из SDK заменять параметры можно shared - non-shared или наоборот, я, конечно, не знаю Вашу задачу, но что-то мне подсказывает, что с этим возможны проблемы.

Наверное, Вам проще будет удалить и пересоздать параметр семейства с нужной группой
Название: Re: ReplaceParameter
Отправлено: Антон Останин от 22-04-2015, 10:28:13
Спасибо, придется так и сделать.
Код - C# [Выбрать]
  1. FamilyParameter param = mgr.get_Parameter(parameterName);
  2. FamilyParameter newParam = mgr.AddParameter(parameterName + "new", builtGroup, param.Definition.ParameterType, true);    
  3. mgr.RemoveParameter(param);
  4. mgr.RenameParameter(newParam, parameterName);
Название: Re: ReplaceParameter
Отправлено: Виктор Чекалин от 22-04-2015, 10:39:31
Антон Останин, добырый день.

В интерфесе это сделать можно, а, значит, и велика вероятность, что это можно сделать и через API.

Нужно копать в сторону метода BindingMap.ReInsert.

Попробовать реализацию смогу позже, а пока, попытайтесь сами. Вот эта (http://adn-cis.org/dostup-k-opredeleniyam-obshhix-parametrov-proekta.html) статья может помочь вам понять, как добраться до определений уже существующих параметров.
Название: Re: ReplaceParameter
Отправлено: Антон Останин от 22-04-2015, 10:48:13
Благодарю, Виктор.
Название: Re: ReplaceParameter
Отправлено: Виктор Чекалин от 23-04-2015, 17:00:29
Проверил. Предложенный мною метод не работает в реадкторе семейств.
Выходит решение только одно - создание нового параметра с нужной группой.