注:本文转自公众号:BIMCoder梁老师
一、前言
在Revit二次开发中,参数是非常重要的组成部分,那么我们该如何从构件获取参数并修改该参数。
二、方法
首先得到一个Element后,有如下几个获取参数的方法:
1. e.Parameters
2. e.GetParameters(string name)
3. e.get_Parameter(BuiltInParameter parameterId)
4. e.LookupParameter(string name)
我们面对这么多获取Parameter的方法该如何选择呢?
首先第三种方式是最保险的,根据BuiltInParameter枚举来获取。
根据名字来获取的方式次之,就像一个班级里叫小明的有好几个,但是学号却是唯一的。注意并不是所有参数都是BuiltInParameter,我们最好在获取参数之前用LookUp查看一下。
我们以一堵墙为例
双击Parameters (Lookup此处用的就是e.Parameters来获取该Element所有参数)
选择你想获取的参数,然后点击Definition,可以看到此Built in param 为WALL_BASE_OFFSET。既然这该参数为BuiltInParameter,那么:
e.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET)
使用e.GetParameters(string name)或者e.LookupParameter(string name)一定要注意检查是否为null。
var ps = e.GetParameters("参数1");
因为名称叫“参数1”的参数可能没有(即为null),也可能有多个。
当该参数不是BuiltInParameter,你又不确定叫“参数1”的参数有几个时果断选择e.GetParameters("参数1");
var p = e.LookupParameter("参数1");
p也要检查是否为null.
*************************************************************************************
当我们获取到参数p,即Parameter对象时该如何获取其参数值呢?
这时候需要先判断该parameter的StorageType,即存储类型。
该属性是一个枚举类型
举例:
if(p.StorageType == StorageType.Integer)
{
var pvalue = p.AsInteger();
}
*************************************************************************************
该如何写入参数:
-
判断该参数是否是ReadOnly (p.IsReadOnly)
-
判断该参数交互时是否可修改(p.UserModifiable)
-
判断该参数的StorageType
-
将要写入该参数的值转换为相应的数据类型,然后Set().
简单示例:pvalue假设是一个string