Building Coder(Revit 二次开发) - 内置参数名称和LabelUtils类

来源:互联网 发布:2017淘宝实时交易数据 编辑:程序博客网 时间:2024/06/07 19:00

Building Code 链接:http://thebuildingcoder.typepad.com/blog/2011/08/built-in-parameter-name-and-labelutils.html

Revit二次开发论坛链接:http://revit.5d6d.com/viewthread.php?tid=1281&extra=


之前我曾经提到过Revit 2011引入了一个新的辅助类:LabelUtils。现在另外一个问题让我觉得有必要再讨论一下 LabelUtils 的使用。

问题:
我需要得到一个内置参数的 Autodesk.Revit.DB.Definition.Name 属性。我知道 Element 的 get_Parameter() 方法有一个以 BuiltinParameter 为参数的重载版本。
但我找不到一个元素可以让我取得参数的名称。我期望是一个类似 Document.Settings.Categories(提供全局性的内置类别集合)的属性。我尝试过 Document.ParameterBindings。
但是这个字典映射好像只包含外部定义(即共享参数的定义),而不是内置参数。

回答:
下面这段代码可以取得所有内置参数的枚举值。这是你需要的代码吗?

string s = string.Empty;foreach( BuiltInParameter bip in Enum.GetValues( typeof( BuiltInParameter ) ) ){s += "\r\n" + bip.ToString();}TaskDialog.Show( "arameter Names", s ); 

问题:
不,我想要的是显示在用户界面上的内置参数名称。而且它们需要是本地化了的。实际上 Parameter.Definition.Name 的值应该就是我需要的结果。但是我现在的问题是
找不到一种方法可以让我取得所有这些内置参数的 Parameter.Definition.Name 的集合。假设有元素“e”包含这个内置参数集合,我就可以利用下面这段代码创建一个内置
参数名称与它对应的显示字符串之间的字典映射。

Element e;Dictionary<BuiltInParameter, string> mapBipToName = new Dictionary<BuiltInParameter, string>();foreach( BuiltInParameter bip in Enum.GetValues( typeof( BuiltInParameter ) ) ){        // translate built-in enum to parameter name        Parameter p = e.get_Parameter( bip );        if( null != p )        {                mapBipToName.Add( bip, p.Definition.Name );        }}

回答:
请看看 LabelUtils 类,特别是它的 GetLabelFor(BuiltinParameter p) 方法。这个方法返回给定内置参数 p 的本地化显示字符串。

原创粉丝点击