当前位置: 首页 > news >正文

Revit API:对元素过滤的三点思考

一、为什么要对元素进行过滤?

  1. 提高效率:Revit模型可能包含成千上万的元素,直接对所有元素进行操作会非常耗时。通过过滤,可以只选择需要处理的元素,从而提高代码的执行效率。

  2. 精准控制:通过过滤,开发者可以精确地选择特定条件地元素,例如按照类型、类别、属性等进行筛选,从而实现更精细的控制。

  3. 避免错误:在修改或删除元素时,如果不进行过滤,可能会误操作到不应该更改的元素。过滤可以便面这类错误的发生。

二、Revit API 能进行过滤的基础是什么?

Revit API 进行过滤的基础是其灵活的过滤机制,通过 FilteredElementCollector 类和各种过滤器类,开发者可以精确地筛选出模型中符合特定条件的元素。
如此方便灵活的过滤,基于的是对构件体系的良好实现,参考:Revit API:Element 的分类。如果没有做好元素的分类,想要把过滤机制做好会很困难。而有了这个分类,则逻辑会清晰的多。

三、怎么进行过滤?

官网已经给出了很多例子,现在AI非常聪明,再自己写例子,价值不大。只要能有语言表达清楚,就可以用大模型了。例如,下面这个复杂例子,AI可以很好的生成,仅需自己稍微调整一下代码。查找文件中,类别为墙,高度在2000毫米以上,名字中有Brick,且有一个自定义参数是“预制”,值为“真”的。

// 代码由AI生成,可能存在一定的错误。请自行调试
using Autodesk.Revit.DB;
using System.Collections.Generic;
using System.Linq;

public class WallFinder
{
    public List<Element> FindWalls(Document document)
    {
        if (document == null) throw new ArgumentNullException("document");

        FilteredElementCollector collector = new FilteredElementCollector(document);

        List<Element> walls = collector
            .OfCategory(BuiltInCategory.OST_Walls)
            .WhereElementIsNotElementType()
            .Where(wall =>
            {
                // 获取高度参数
                Parameter heightParam = wall.get_Parameter(BuiltInParameter.WALL_HEIGHT_PARAM);
                if (heightParam == null) return false;

                // 获取墙的高度并转换为毫米
                double height = heightParam.AsDouble() * 304.8; // 1英尺 = 304.8毫米
                if (height <= 2000) return false;

                // 检查墙的名字是否包含"Brick"
                if (!wall.Name.Contains("Brick")) return false;

                // 检查自定义参数"预制"的值是否为"真"
                Parameter yParam = wall.LookupParameter("预制");
                if (yParam == null) return false;

                string yValue =预制Param.AsValueString();
                if (yValue != "真") return false;

                return true;
            })
            .ToList();

        return walls;
    }
}

文章转载自:

http://kswcNm1m.bnLkc.cn
http://ujTi4ahp.bnLkc.cn
http://JBI8Scw9.bnLkc.cn
http://roi41jrJ.bnLkc.cn
http://AgN6hvZS.bnLkc.cn
http://YW95JH9j.bnLkc.cn
http://cYlTyeg6.bnLkc.cn
http://QD9yKHm3.bnLkc.cn
http://fv51Th23.bnLkc.cn
http://Fg4oZ9JV.bnLkc.cn
http://puCsXB6t.bnLkc.cn
http://ilcbT58f.bnLkc.cn
http://ErOOZWnD.bnLkc.cn
http://xrmRghqt.bnLkc.cn
http://FGBreqpL.bnLkc.cn
http://nEyCFtUh.bnLkc.cn
http://LAN4AOhG.bnLkc.cn
http://BgK0f6XW.bnLkc.cn
http://Pl7cbkjZ.bnLkc.cn
http://OT0tpRtP.bnLkc.cn
http://fJ2Ejypb.bnLkc.cn
http://lLu55Ld8.bnLkc.cn
http://1vJQUx4a.bnLkc.cn
http://4j4Xy6TU.bnLkc.cn
http://5W6KjpOx.bnLkc.cn
http://Y4q1HcJ5.bnLkc.cn
http://Y18kAIVP.bnLkc.cn
http://3QdEXJxc.bnLkc.cn
http://2rHhka5P.bnLkc.cn
http://2dgUjWMP.bnLkc.cn
http://www.dtcms.com/a/28779.html

相关文章:

  • jmeter接口测试(一)
  • PMIC电源噪声对SOC芯片电源完整性的影响
  • 正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程
  • 嵌入式开发岗位认识
  • [Android]上架商店时用户隐私协议要求
  • 贝叶斯估计习题
  • 总结UML类图几种关系画法
  • Hutool - DB 连接池配置集成
  • JUC并发总结二
  • WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
  • 跟着AI学vue第六章
  • 以ChatGPT为例解析大模型背后的技术
  • Nginx 请求超时
  • uniapp中引入Vant Weapp的保姆级教学(包含错误处理)
  • CV -- 基于GPU版CUDA环境+Pycharm YOLOv8 目标检测
  • 将Google文档导入WordPress:简单实用的几种方法
  • Linux的指令与热键
  • 《动手学机器人学》笔记
  • 软件著作权申请流程详解:从准备到登记的完整指南
  • MAC快速本地部署Deepseek (win也可以)
  • 【Elasticsearch】如何获取一致的评分
  • 装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住
  • 小米路由器 AX3000T 降级后无法正常使用,解决办法
  • Linux基本指令(二)
  • QML double浮点数取小数点后某几位【去尾法】
  • 【Linux基础八】计算机体系结构(冯诺依曼和操作系统)
  • 【嵌入式常用工具】Srecord使用
  • 探索显著性检测中语义信息的高效模型
  • FlutterAssetsGenerator插件的使用
  • sql server 从库创建的用户名登录后访问提示数据库无权限