参数赋值
其实一直都是直接set方式赋值,今天从Revit SDK sample中的Reinforcement的ParameterUtil.cs文件中获取了样例中赋值参数的方式,觉得很多细节都没有考虑到,为了代码的健壮性,总结如下:
获取参数方式
// 1 lookup一个名称,返回一个参数,如果没有找到就返回null,如果是多个满足条件,只返回第一找到的
public Parameter LookupParameter(
string name
)
// 2 返回所有满足条件的参数
public IList<Parameter> GetParameters(
string name
)
// 3 通过guid查找
get_Parameter(Guid)
// 4 通过BuiltInParameter参数查找
get_Parameter(BuiltInParameter)
// 5 取出ParameterSet,自己通过名称遍历查找
ParameterSet parameters = element.Parameters;
Parameter findParameter = FindParameter(parameters, parameterName);
public static Parameter FindParameter(ParameterSet parameters, string name)
{
Parameter findParameter = null;
foreach (Parameter parameter in parameters)
{
if (parameter.Definition.Name == name)
{
findParameter = parameter;
}
}
return findParameter;
}
参数赋值考虑点
大概判断流程:
- 是否null
- 是否IsReadOnly
- 存储类型StorageType
- set赋值
public static bool SetParameter(Element element, string parameterName, ref Autodesk.Revit.DB.ElementId value)
{
ParameterSet parameters = element.Parameters;
Parameter findParameter = FindParameter(parameters, parameterName);
// 是否为空
if (null == findParameter)
{
return false;
}
// 是否只读
if (!findParameter.IsReadOnly)
{
StorageType parameterType = findParameter.StorageType;
// 存储类型:
if (StorageType.ElementId != parameterType)
{
throw new Exception("The types of value and parameter are different!");
}
// 最后才是赋值
findParameter.Set(value);
return true;
}
return false;
}
存储类型:
public enum StorageType
{
None = 0,
Integer = 1,
Double = 2,
String = 3,
ElementId = 4
}
BIM树洞
做一个静谧的树洞君
用建筑的语言描述IT事物;
用IT的思维解决建筑问题;
共建BIM桥梁,聚合团队。
本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!
-
微信公众号: BIM树洞
-
知乎专栏:BIM树洞
-
气氛组博客:http://www.31bim.com
-
BIM应用及咨询,CAD,Revit, OpenGL,图形开发交流,加Q群1083064224