我在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
。
答案 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'");
}
}