简介
Revit 属性窗口之提供一组可以编辑的参数
在 Revit UI 中,某些图元参数在“图元特性”选项板中可见
在此示例中,所有三行代码都获取相同的参数
读取墙实例中注释参数的值
private void GetStringParameterValue(Wall wall)
{
string s1 = wall.LookupParameter("注释").AsString();
string s2 = wall.GetParameter(ParameterTypeId.AllModelInstanceComments).AsString();
string s3 = wall.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).AsString();
}
由于此参数类型为string因此该方法用于获取其值 AsString()
获取参数的其他方法包括:
通过循环访问元素的所有参数的 Element.Parameters 集合
通过循环访问 Element.GetOrderedParameters() 返回返回“属性”面板中可见的参数
通过 Element.ParametersMap 集合或 Element.GetParameters() 按名称访问参数
Element.LookupParameter()方法根据其本地化名称获取参数
注意不同参数分组下可能存在同名参数
如果要按名称查找参数可能会发生多个同名参数匹配
获取选定的元素参数
元素参数是通过循环访问元素参数集来检索
下面的代码示例演示如何从所选元素中检索所有参数
注意:示例使用一些参数成员,如 AsValueString 和 StorageType
void GetElementParameterInformation(Document document, Element element)
{
String prompt = "显示当前选择Element实例参数信息: \n\r";
StringBuilder st = new StringBuilder();
foreach (Parameter para in element.Parameters)
{
st.AppendLine(GetParameterInformation(para, document));
}
TaskDialog.Show("Revit", prompt + st.ToString());
}
String GetParameterInformation(Parameter para, Document document)
{
string defName = para.Definition.Name + "\t : ";
string defValue = string.Empty;
switch (para.StorageType)
{
case StorageType.Double:
defValue = para.AsValueString();
break;
case StorageType.ElementId:
Autodesk.Revit.DB.ElementId id = para.AsElementId();
if (id.IntegerValue >= 0)
{
defValue = document.GetElement(id).Name;
}
else
{
defValue = id.IntegerValue.ToString();
}
break;
case StorageType.Integer:
if (SpecTypeId.Boolean.YesNo == para.Definition.GetDataType())
{
if (para.AsInteger() == 0)
{
defValue = "False";
}
else
{
defValue = "True";
}
}
else
{
defValue = para.AsInteger().ToString();
}
break;
case StorageType.String:
defValue = para.AsString();
break;
default:
defValue = "Unexposed parameter.";
break;
}
return defName + defValue;
}
参数 Parameter
参数中包含的类型: Double Integer String ElementId
参数属性 StorageType 表示当前参数参数值的类型
设置参数值
/// <summary>
/// 更新墙底部偏移为-100mm时
/// SetParameter(el, "底部偏移", -100 / 304.8);
/// </summary>
/// <param name="el"></param>
/// <param name="parameterName"></param>
/// <param name="value"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public bool SetParameter(Element el, string parameterName, double value)
{
bool result = false;
var parameter = el.LookupParameter(parameterName);
if (null != parameter && !parameter.IsReadOnly)
{
if (StorageType.Double != parameter.StorageType)
{
throw new Exception("The storagetypes of value and parameter are different!");
}
result = parameter.Set(value);
}
return result;
}
Set() 方法返回值指示参数值已更改
如果参数值已更改,则返回 true,否则返回 false
并非所有参数都是可写的
如果参数为只读,则会引发异常
内置参数
Revit 平台 API 具有大量内置参数
内置参数在 Autodesk.Revit.Parameters.BuiltInParameter 枚举中定义
参数 ID 用于使用 Element.Parameter 属性从元素中检索特定参数
图片
代码示例演示如何使用内置参数 ID 获取特定参数:
public Parameter FindWithBuiltinParameterID(Wall wall)
{
// 底部偏移
BuiltInParameter paraIndex = BuiltInParameter.WALL_BASE_OFFSET;
Parameter parameter = wall.get_Parameter(paraIndex);
return parameter;
}