Revit二次开发数据参数读取、修改、选择过滤器、逻辑过滤器、单位转换的使用总结

【BIM二次开发】

很多新手朋友最近咨询我关于一些Revit二次开发基础但是使用频率较高的问题,因此安全人生哲理进行归纳总结,希望能给新手朋友带来一些帮助。这里针对BIM二次开发过程中关于参数的读取、修改、选择过滤器、逻辑过滤器以及单位转换的使用进行总结。

【读取修改Revit元素参数】

这里有两种方式可以读取,对于Parameter参数,可以用get_Parameter(BuiltInParameter.INSTANCE_HEAD_HEIGHT_PARAM)形式来读取、也可以用LookupParameter("顶高度")形式来读取,这两种方式需要配合LookUp工具进行查看使用。在修改参数的时候记得开启任务,用Set()函数进行修改。注意参数值的类型要与参数真实值的类型一致。

ISelectionFilter isf = new xuanzeFilter();//定义选择过滤器
Reference res = uidoc.Selection.PickObject(ObjectType.Element, isf, "请选择门");
Element men = doc.GetElement(res);
//方式1:这种通过内置参数名的形式来进行参数选择
Parameter pm = men.get_Parameter(BuiltInParameter.INSTANCE_HEAD_HEIGHT_PARAM);
//方式2:直接用LookupParameter()函数来进行参数选择
Parameter pm = men.LookupParameter("顶高度");
 //参数为:英尺
double l1 = pm.AsDouble();
//参数为:毫米
string l2 = pm.AsValueString();
TaskDialog.Show("长度", l1 + "\r\n" + l2);
using (Transaction ts = new Transaction(doc, "新高度"))
{
    ts.Start();//开启任务
    //单位转换:将毫米->英尺
    double ss = UnitUtils.ConvertToInternalUnits(2500, DisplayUnitType.DUT_MILLIMETERS);
    //修改参数
    pm.Set(ss);
    //提交任务
     ts.Commit();
}

【选择过滤器】

选择过滤器在BIM二次开发过程中使用非常频繁的一种过滤器,例如我们规定想选择门,结果用户选择了墙,这样就会容易出现一系列的问题。因此为了限制用户的选择范围,规定用户只选择门,我们就需要用到选择过滤器。顾名思义选择过滤器就是过滤要选择的元素。

//创建过滤器接口对象,并在PickObject()函数中进行引用。
ISelectionFilter isf = new xuanzeFilter();
Reference res = uidoc.Selection.PickObject(ObjectType.Element, isf, "请选择门");
Element men = doc.GetElement(res);

新建选择过滤器接口实现的类:

 public class xuanzeFilter : ISelectionFilter
    {
        public bool AllowElement(Element elem)
        {
            //根据元素的类别名称是否为门来判断是否为我们要选择的元素,如果是,那么久返回True,否则返回False。
            if (elem.Category.Name == "门")
            {
                return true;
            }

            return false;
        }

        public bool AllowReference(Reference reference, XYZ position)
        {
            return false;
        }
    }

通过以上设置即可实现只能选择类别为门的元素。

【逻辑过滤器】

这里推荐使用快速过滤器,不建议使用慢速过滤器,否则影响插件性能。

 UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            //定义收集器
            FilteredElementCollector coll = new FilteredElementCollector(doc);
            //定义过滤器
            ElementCategoryFilter doorCategoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            ElementClassFilter fsClassFilter = new ElementClassFilter(typeof(FamilyInstance));
            //定义逻辑过滤器
            LogicalAndFilter andFilter = new LogicalAndFilter(doorCategoryFilter, fsClassFilter);
            //过滤元素
            coll.WherePasses(andFilter);
            //说明LINQ语句用法
            List<ElementId> cs = (from ele in coll
                                  where ele.Id == new ElementId(328856)
                                  select ele.Id).ToList();
            //选中指定元素
            uidoc.Selection.SetElementIds(cs);

【单位转换】

关于BIM二次开发单位转换是很多新手朋友的难点,其实当你想明白以后就会非常清楚了。在Revit中我们使用的单位是毫米,而在API开发环境中我们使用的单位是英寸,因此我们要将英寸的单位转换成毫米才可以。这里有两种转换方式,一种是通过函数转换,一种是直接通过数字来转换。

 using (Transaction ts = new Transaction(doc, "新高度"))
            {
                ts.Start();
                //单位转换:将毫米->英尺
                //方式1:用API中单位转换函数转换
                double ss = UnitUtils.ConvertToInternalUnits(2500, DisplayUnitType.DUT_MILLIMETERS);
                //修改参数
                //方式2:等价于pm.Set(2500/304.8)直接数字运算;
                pm.Set(ss);
                //提交任务
                ts.Commit();
            }

 更多内容欢迎继续关注我的博客,想学习Revit二次开发可以来看一下revit二次开发课程

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIM开发大神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值