Как установить значение общего параметра с привязкой типа в Autodesk Revit Architecture 2010?
Вопрос
У меня есть общий параметр Значение привязанный к Wall
введите с TypeBinding
в Autodesk Revit Architecture 2010.
Я могу легко получить доступ к параметру с помощью:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");
Значение этого параметра можно посмотреть с помощью
var u = parameter.AsDouble();
Но когда я делаю
parameter.Set(0.8);
Я получаю сообщение об ошибке:
Исключение InvalidOperationException:Операция недопустима из-за текущего состояния объекта.
При проверке параметры ReadOnly
свойство установлено в false
.
Решение
Хорошо, я нашел проблему:
При использовании TypeBinding
, параметр отсутствует в Wall
сам объект, но в его WallType
собственность.Если вы делаете это полиморфным способом (не только стены, но и полы, крыши и т.д.), То вы можете использовать Element.ObjectType
собственность.
Таким образом, код в OP должен был быть:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");
Это вызывается из метода расширения, довольно аккуратного метода добавления параметров к объектам Revit.
Таким образом, настройка параметра может быть выполнена следующим образом:
public static void SetUValue(this Wall self, double uvalue)
{
Parameter parameter = self.ObjectType.get_Parameter("UValue");
if (parameter != null)
{
parameter.Set(uvalue);
}
else
{
throw new InvalidOperationException(
"Wall does not contain the parameter 'UValue'");
}
}