如何在 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使用WinForm和WPF编程范式

Revit API - 抛出异常:RevitAPI.dll 中的“Autodesk.Revit.Exceptions.InternalException” - 尝试两次运行按钮时

可以使用 Autodesk Forge 将 Inventor 装配体转换为 Revit 项目或族吗?

使用 Revit API(或任何其他方法)获取 Autodesk Docs 本地文件夹