如何在Autodesk Revit Architecture 2010中使用类型绑定设置共享参数的值?

时间:2009-09-29 14:03:32

标签: api autodesk revit

我在Autodesk Revit Architecture 2010中有Wall类型的共享参数 UValue 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

1 个答案:

答案 0 :(得分: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'");
    }
}