Как установить значение общего параметра с привязкой типа в Autodesk Revit Architecture 2010?

StackOverflow https://stackoverflow.com/questions/1492756

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть общий параметр Значение привязанный к 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'");
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top