如何在 Autodesk Revit Architecture 2010 中使用类型绑定设置共享参数的值?
Posted
技术标签:
【中文标题】如何在 Autodesk Revit Architecture 2010 中使用类型绑定设置共享参数的值?【英文标题】:How to set the value of a shared parameter with type binding in Autodesk Revit Architecture 2010? 【发布时间】:2010-12-02 08:11:03 【问题描述】:我有一个共享参数 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
。
【问题讨论】:
【参考方案1】:好的,我找到了问题:
使用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'");
【讨论】:
以上是关于如何在 Autodesk Revit Architecture 2010 中使用类型绑定设置共享参数的值?的主要内容,如果未能解决你的问题,请参考以下文章
autodesk revit architecture 2015与2014区别大吗
Autodesk Forge 数据管理参考 API 未列出 Revit 参考
Revit API - 抛出异常:RevitAPI.dll 中的“Autodesk.Revit.Exceptions.InternalException” - 尝试两次运行按钮时