0

我有一个共享参数UValue绑定到 Autodesk Revit Architecture 2010 中的Wall类型TypeBinding

我可以通过以下方式轻松访问参数:

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

4

1 回答 1

2

好的,我发现了问题:

使用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'");
    }
}
于 2009-10-08T07:05:20.697 回答