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 的本地化显示字符串。