14. Revit API: Selection(选择器)

news2024/11/19 18:18:51

前言

这篇写选择器,经过前面好些篇的讲解,总算把前置内容都写完了。
我们来回忆下都在哪里提到过…
算了,直接进入正文。


一、Selection 命名空间

选择器位于Autodesk.Revit.UI.Selection命名空间下,关系到交互嘛,所以在UI“子”空间下就理所当然了。
所以我们这篇,既是讲整个Selection命名空间下的成员,也会讲Revit选择器的运用。

先来看看都有些什么

Classes 类Interfaces 接口Enumerations 枚举
SelectionISelectionFilterObjectType
SelectableInViewFilterObjectSnapTypes
PickedBoxPickBoxStyle

这个过滤器,上篇已经讲了嗷,就是过滤指定视图的元素。

再瞧瞧,这个PickBox也讲过了嗷,看框选聚焦这篇,虽然是给的框选聚焦代码,但它真就只有那么点东西。没有构造函数,只能通过Selection的方法创建;属性就只有min、max这两个。

再看3枚举,

  1. PickBoxStyle指示怎么选,是接触就算,还是完全包裹才算。
  2. ObjectType指示在选择元素时,哪些能选,就类似可选择集过滤呗,但又不止,好像得放些图看看。
  3. ObjectSnapTypes指示在选择点时,点定位到哪里。比如是起点、终点还是中间啦,这样。

1.1. 选择枚举介绍

上图看效果。

1.1.1. PickBoxStyle(框选枚举)
PickBoxStyle 枚举说明示例
Crossing接触就选上14.pickbox1.png
Enclosing完全包围才选上14.pickbox2.png
Directional从左向右,是包围选择
从右向左,是接触选择
1.1.2. ObjectType(选元素枚举)
ObjectType 枚举说明示例
Nothing啥也不能选
Element啥都能选,返回元素
PointOnElement啥都能选,返回射线于模型的交点
Edge选边,有SolidEdge*才能选
Face选面,有Solid就能选
LinkedElement只有链入Revit的才能选
Subelement没发现和Element的区别

*:什么叫有Solid且有Edge才能选边?讲过了嗷,看这里《获取元素Solid和计算包围盒》。

1.1.3. ObjectSnapTypes(选点枚举)
ObjectSnapTypes 枚举说明示例
None啥也不能选
Endpoints只能选Edge/Curve的端点嗷14.pickpoint1.png
Points哪里都能点,空白处都能点,不知道点的啥东西,或许涉及到屏幕空间坐标转换,不确定。
Midpoints选边/线的中间点14.pickpoint2.png
Nearest选边/线上的最近点image.png
WorkPlaneGrid选工作面上的点。好像是面上的网格交点,搞不懂。image.png
Intersections射线交点呗
Centers(圆)弧的中心image.png
Perpendicular啥?
Tangents弧的切线?没选出来
Quadrants啥?

二、Selection 类

Selection类,不陌生吧,提了好多次了,直接获取

UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Selection selection = uiDoc.Selection;

没啥属性,只有方法,那就直接看看吧。

方法说明
GetElementIdsSetElementIds获取/设置 选择集,就选中变蓝变透明的效果
PickBoxx2框个范围,啥效果木有。可用来范围聚焦。
PickElementsByRectanglex4框个范围,获取框到的元素。向左接触,向右包含。
PickObjectx4,
PickObjectsx4
点选模型。
即可点选,又可框选。
PickPointx4选个点

没了没了,大体上是没了.jpg

2.1. 选择器的问题

哦~又想起来问题了🙃。

多选时,元素不是按选择顺序返回的,而是按ElementId 排序 后返回的。

这破玩意儿真令人头疼,我用的2018版本,不清楚更高版本有没有改变。
这可怎么办呢,凉拌。
我也莫得办法。
要么循环单选。

哎,就写到循环单选这会儿,突然想到 似乎 可以借助AdWindows.dll来模拟多选完成按钮,以此跳出循环单选。用材质变化,来模拟选中状态。

等我有空研究研究AdWindows.dll再来看看嗷。


三、ISelectionFilter(自定义可选范围)

单纯的选择元素是很难满足需求的,我们更希望的是在有限的、可自定义的范围内,让用户进行选择。

基于这个目标,Revit提供了ISelectionFilter这个接口,开发者可以通过是实现该接口,来指定哪些元素可选,哪些又不可选。

这里结合上一篇的过滤器,写一个较为通用的可指定过滤器。

直接看代码吧。

不要在ISelectionFilter里进行额外(文档相关、复杂耗时等)操作

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
internal class SelectionCommand : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        UIDocument uiDoc = commandData.Application.ActiveUIDocument;
        Document doc = uiDoc.Document;
        Selection selection = uiDoc.Selection;

        // 过滤器,获取Wall
        FilteredElementCollector collector = new FilteredElementCollector(doc);
        List<ElementId> wallIds = collector.OfCategory(BuiltInCategory.OST_Walls).ToElementIds().ToList();

        // ESC
        try
        {
            MySelectionFilter filter = new MySelectionFilter(wallIds);
            Reference objRef = selection.PickObject(ObjectType.Element, filter, "Select an element");
            Element ele = doc.GetElement(objRef);
            TaskDialog.Show("point", ele.Name);
        }
        catch { }

        return Result.Succeeded;
    }
}

// 自定义选择过滤器
internal class MySelectionFilter : ISelectionFilter
{
    private List<ElementId> _eleIds;  // HashSet

    public MySelectionFilter(List<ElementId> eleIds)
    {
        this._eleIds = eleIds;
    }

    public bool AllowElement(Element elem)
    {
        if (this._eleIds.Contains(elem.Id)) { return true; }
        return false;
    }

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

14.Selection.gif


总结

得了得了,这篇到这里了,UI基本完了。
下一个,回到DB,那就看看事务(Transaction)吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostMan Error:Maximum response size reached

一、问题描述 用postman本地测试&#xff0c;restful api接口导出文件&#xff0c;文件大小为190M&#xff0c;服务没问题&#xff0c;总是在导出时&#xff0c;抛出&#xff1a;Error:Maximum response size reached。开始以为是服务相应文件过大或者相应时间超时导致的。其实…

数字流的秩

题目链接 数字流的秩 题目描述 注意点 x < 50000 解答思路 可以使用二叉搜索树存储出现的次数以及数字的出现次数&#xff0c;方便后续统计数字x的秩关键在于构建树的过程&#xff0c;如果树中已经有值为x的节点&#xff0c;需要将该节点对应的数字出现次数加1&#xf…

14-8 小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

Redis深度解析:核心数据类型与键操作全攻略

文章目录 前言redis数据类型string1. 设置单个字符串数据2.设置多个字符串类型的数据3.字符串拼接值4.根据键获取字符串的值5.根据多个键获取多个值6.自增自减7.获取字符串的长度8.比特流操作key操作a.查找键b.设置键值的过期时间c.查看键的有效期d.设置key的有效期e.判断键是否…

免杀笔记 ---> PE

本来是想先把Shellcode Loader给更新了的&#xff0c;但是涉及到一些PE相关的知识&#xff0c;所以就先把PE给更了&#xff0c;后面再把Shellcode Loader 给补上。 声明&#xff1a;本文章内容来自于B站小甲鱼 1.PE的结构 首先我们要讲一个PE文件&#xff0c;就得知道它的结构…

Appium+python自动化(四十二)- 寿终正寝完结篇 - 结尾有惊喜,过时不候(超详解)

1.简介 按照上一篇的计划&#xff0c;今天给小伙伴们分享执行测试用例&#xff0c;生成测试报告&#xff0c;以及自动化平台。今天这篇分享讲解完。Appium自动化测试框架就要告一段落了。 2.执行测试用例&报告生成 测试报告&#xff0c;宏哥已经讲解了testng、HTMLTestRun…

springboot整合Camunda实现业务

1.bean实现 业务 1.画流程图 系统任务&#xff0c;实现方式 2.定义bean package com.jmj.camunda7test.process.config;import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.…

开源大模型和闭源大模型,打法有何区别?

现阶段&#xff0c;各个公司都有自己的大模型产品&#xff0c;有的甚至不止一个。除了小部分开源外&#xff0c;大部分都选择了闭源。那么&#xff0c;头部开源模型厂商选择开源是出于怎样的初衷和考虑&#xff1f;未来大模型将如何发展&#xff1f;我们来看看本文的分享。 在对…

Hi3861 OpenHarmony嵌入式应用入门--SNTP

sntp&#xff08;Simple Network Time Protocol&#xff09;是一种网络时间协议&#xff0c;它是NTP&#xff08;Network Time Protocol&#xff09;的一个简化版本。 本项目是从LwIP中抽取的SNTP代码&#xff1b; Hi3861 SDK中已经包含了一份预编译的lwip&#xff0c;但没有…

基于布雷格曼偏差校正技术的全变分一维时间序列信号降噪方法(MATLAB R2018A)

信号降噪是信号处理的重要步骤之一&#xff0c;目的是提高所获得信号数据的质量&#xff0c;以达到更高的定性和定量分析精度。信号降噪能提升信号处理其他环节的性能和人们对信息识别的准确率&#xff0c;给信号处理工作提供更可靠的保证。信号降噪的难点是降低噪声的同时也会…

如何压缩视频大小,怎么压缩视频

随着科技的进步&#xff0c;我们拍摄的视频质量越来越高。然而&#xff0c;视频带来的一个问题是文件体积巨大&#xff0c;这不仅占用大量存储空间&#xff0c;而且在传输和分享时也造成了不小的困扰。别担心&#xff0c;本文将为你详细介绍几种实用的视频压缩方法&#xff0c;…

xmind2testcase工具将测试用例从Xmind转为CSV导入禅道

使用xmind编写测试用例&#xff0c;使用xmind2testcase工具将测试用例从Xmind转为CSV导入禅道&#xff0c;便于管理。 1.工具准备 第一步&#xff1a;安装python 第二步&#xff1a;安装xmind2testcase工具 运行-cmd-打开命令提示符弹窗&#xff0c;输入安装命令 安装命令&…

粉丝问:教育机构首页UI,安排

教育机构的首页UI应该展现以下内容&#xff1a; 机构简介&#xff1a;在首页上展示教育机构的简介和核心价值观&#xff0c;包括机构的使命、愿景和教育理念。这有助于让访问者了解机构的背景和宗旨。课程和项目&#xff1a;展示机构提供的课程和项目&#xff0c;包括学科课程…

AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!

一、前言 2017年&#xff0c;谷歌团队推出一篇神经网络的论文&#xff0c;首次提出将“自注意力”机制引入深度学习中&#xff0c;这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时&#xff0c;Transformer也随之进入大众视野。一夜之间&…

PMP--知识卡片--波士顿矩阵

文章目录 记忆黑话概念作用图示 记忆 一说到波士顿就联想到波士顿龙虾&#xff0c;所以波士顿矩阵跟动物有关&#xff0c;狗&#xff0c;牛。 黑话 你公司的现金牛业务&#xff0c;正在逐渐变成瘦狗&#xff0c;应尽快采取收割策略&#xff1b;问题业务的储备太少&#xff0…

测量和检测二合一的劳易测解决方案

劳易测ODT3CL系列是一款基于TOF原理的具有测量功能的传感器。它具有很好的检测性能&#xff0c;能够非常可靠的检测亮色、深色以及高反光的物体。ODT 3CL系列的检测距离可达2000毫米&#xff0c;在量程范围内对目标物体的颜色检测不敏感&#xff0c;检测距离稳定输出。 针对工业…

浅析基于量子成像的下一代甚高灵敏度图像传感器技术

高灵敏度探测成像是空间遥感应用中的一个重要技术领域&#xff0c;如全天时对地观测、空间暗弱目标跟踪识别等应用&#xff0c;对于甚高灵敏度图像传感器的需求日益强烈。随着固态图像传感器技术水平的不断提高&#xff0c;尤其背照式及埋沟道等工艺的突破&#xff0c;使得固态…

相机光学(二十四)——CRA角度

CRA角度 0.参考资料1.什么是CRA角度2.为什么 CRA 会导致luma shading3.为什么 CRA 会导致color shading4.CRA相差过大的具体表现5.CRA Matching6.怎样选择sensor的CRA 0.参考资料 1.芯片CRA角度与镜头的匹配关系&#xff08;一&#xff09;   2.芯片CRA角度与镜头选型的匹配关…

谷粒商城学习-07-虚拟机网络设置

文章目录 一&#xff0c;找到配置文件Vagrantfile二&#xff0c;查询虚拟机网卡地址1&#xff0c;查看虚拟机网络配置2&#xff0c;查看宿主机网络配置 三&#xff0c;修改配置文件下的IP配置四&#xff0c;重新启动虚拟机即可生效五&#xff0c;Vagrantfile 的作用1&#xff0…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好&#xff1f;在这个快节奏的时代&#xff0c;护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明&#xff0c;还是针对孩子学习是改善光线质量环境&#xff0c;一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…