CAD二次开发(9)- CAD中对象的实时选择

1. 点的拾取

有时候我们需要在CAD画布上实时选取起始点和结束点,然后绘制出来一条直线。实现如下:

public void getPoint()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            var editor = doc.Editor;
            var docDatabase = doc.Database;
            PromptPointOptions ppo = new PromptPointOptions("拾取线段起点:");
            //获取线段起点的输入
            PromptPointResult pointResult = editor.GetPoint(ppo);
            var start = pointResult.Value;
            
            //基点到光标的虚线标识
            ppo.BasePoint = start;
            ppo.UseBasePoint=true;
            ppo.UseDashedLine=true;
            //如果用户设置了起始节点,再让用户获取结束节点
            if (pointResult.Status == PromptStatus.OK)
            {
                ppo.Message = "拾取线段终点:";
                pointResult = editor.GetPoint(ppo);
                var end = pointResult.Value;
                if (pointResult.Status == PromptStatus.OK)
                {
                    //方式一:绘制临时向量,并不存储到数据库中
                    // editor.DrawVector(start,end,1,false);
                    //方式二:提交到数据库
                    docDatabase.AddEnityToModelSpace(new Line(start, end));
                }
            }
        }

AddEnityToModelSpace方法见我前面文章封装的工具类

效果如下:
在这里插入图片描述
在这里插入图片描述

2. 角度的拾取

 public void getAngle()
        {
            var editor = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptAngleOptions pao = new PromptAngleOptions("拾取角度:");
            pao.AllowNone = false;
            pao.UseDashedLine = true;
            pao.UseAngleBase=false;
            PromptDoubleResult startAngle = editor.GetAngle(pao);
            if (startAngle.Status == PromptStatus.OK)
            {
                editor.WriteMessage("\n角度:{0}", startAngle.Value);
            }
        }

最终效果:
在这里插入图片描述

3. 单个实体对象的拾取

public void getOneEntity()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Editor editor = doc.Editor;
            PromptEntityResult per = editor.GetEntity("\n拾取任意实体:");
            if (per.Status == PromptStatus.OK)
            {
                var perObjectId = per.ObjectId;
                using (Transaction ts = doc.Database.TransactionManager.StartTransaction())
                {
                    var entity = (Entity)ts.GetObject(perObjectId, OpenMode.ForRead,true);
                    editor.WriteMessage("\n拾取实体对象:{0},类型:{1}", entity.ToString(),entity.GetType().FullName);
                    ts.Commit();
                }
            }
        }

4. 特定实体对象的拾取

利用过滤器进行选择。

 public void getSpecificEntity()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Editor editor = doc.Editor;
            PromptEntityOptions peo = new PromptEntityOptions("\n拾取线条:");
            peo.SetRejectMessage("\n 选择的对象类型不是线条,请重新选择!");
            peo.AddAllowedClass(typeof(Line), true);
            PromptEntityResult per = editor.GetEntity(peo);
            if (per.Status == PromptStatus.OK)
            {
                var perObjectId = per.ObjectId;
                using (Transaction ts = doc.Database.TransactionManager.StartTransaction())
                {
                    var entity = (Entity)ts.GetObject(perObjectId, OpenMode.ForRead,true);
                    editor.WriteMessage("\n拾取实体对象:{0},类型:{1}", entity.ToString(),entity.GetType().FullName);
                    ts.Commit();
                }
            }
        }

5. 利用选择集拾取多个实体对象

/// <summary>
        /// 利用选择集选择多个实体对象
        /// </summary>
        [CommandMethod("selectEntities")]
        public void selectEntitiesTest()
        {
            List<Entity> entities = selectEntities();
        }
        
        public List<Entity> selectEntities()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Editor editor = doc.Editor;
            var docDatabase = doc.Database;

            SelectionSet selectionSet;
            //清空选择集
            var objectIds = new ObjectId[0];
            editor.SetImpliedSelection(objectIds);
            //请求从图形区域选择对象
            PromptSelectionResult psr = editor.GetSelection();
            if (psr.Status == PromptStatus.OK)
            {
                selectionSet = psr.Value;
                var objectIdList = selectionSet.GetObjectIds().ToList();
                List<Entity> entities = new List<Entity>();
                using (Transaction tr = docDatabase.TransactionManager.StartTransaction())
                {
                    foreach (var objectId in objectIdList)
                    {
                        var entity = (Entity)objectId.GetObject(OpenMode.ForRead);
                        entities.Add(entity);
                    }
                    tr.Commit();
                    return entities;
                }
            }
            return null;
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国银行信息科技运营中心、软件中心春招笔试测评面试体检全记录

本文介绍2024届春招中&#xff0c;中国银行下属各部门统一笔试&#xff0c;以及信息科技运营中心与软件中心各自的面试&#xff0c;以及编程能力测评、体检等相关环节的具体流程、相关信息等。 2024年04月投递了中国银行的信息科技类岗位&#xff0c;一共投递了4个岗位&#xf…

API接口设计的艺术:如何提升用户体验和系统性能

在数字时代&#xff0c;API接口的设计对于用户体验和系统性能有着至关重要的影响。良好的设计可以显著提升应用程序的响应速度、可靠性和易用性。以下是几个关键点&#xff0c;帮助改善API接口的设计&#xff1a; 1. 理解并定义清晰的要求 用户研究&#xff1a;与最终用户进行…

python 集合

文章目录 一、什么是集合1.1 创建集合的方式1.2 集合的增删改查操作1.2.1 集合的元素删除操作1.2.2 集合的元素修改操作 1.3 集合中运算符的使用 一、什么是集合 集合&#xff1a; 用来存储数据&#xff0c;和字典一样&#xff0c;都是用 {}表示&#xff0c;只是集合中的数据是…

java中的ThreadLocal

ThreadLocal是线程局部变量&#xff0c;同一份变量在每一个线程中都保存一份副本&#xff0c;彼此线程之间操作互不影响 测试ThreadLocal package com.alibaba.fescar.core.protocol.test;public class TestThreadLocal {private static ThreadLocal<Integer> threadLoc…

泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例

文章链接&#xff1a;17基于Ecology短信平台&#xff0c;实现后端自定义二开短信发送方案及代码示例

图像分割——U-Net论文介绍+代码(PyTorch)

0、概要 原理大致介绍了一下&#xff0c;后续会不断精进改的更加详细&#xff0c;然后就是代码可以对自己的数据集进行一个训练&#xff0c;还会不断完善&#xff0c;相应其他代码可以私信我。 一、论文内容总结 摘要&#xff1a;人们普遍认为&#xff0c;深度网络成功需要数…

全面了解三大 AI 绘画:Midjourney、Stable Diffusion、DALL·E 的区别和特点

大家好&#xff0c;我是设计师阿威 在当前&#xff0c;比较流行的 AI 绘画软件主要有三个&#xff0c;分别是&#xff1a;StabilityAI 公司的 Stable Diffusion&#xff0c;OpenAI 公司的 DALLE2&#xff0c;以及更为大众所熟知的&#xff0c;Leap Motion公司创始人 David Hol…

大前端 业务架构 插件库 设计模式 属性 线程

大前端 业务架构 插件库 适配模式之(多态)协议1对多 抽象工厂模式 观察者模式 外观模式 装饰模式之参考catagory 策略模式 属性

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹&#xff0c;做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…

性能测试、负载测试、压力测试、稳定性测试简单区分【超详细】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 性能测试是一个总称&#xff0c;可细分为性能测试、负载测试、压力测试、稳定性测试。 性能测试…

大量用户中招,远控木马已经潜伏各类在线会议平台

从 2023 年 12 月开始&#xff0c;研究人员发现有攻击者创建虚假 Skype、Google Meet 和 Zoom 网站来进行恶意软件传播。攻击者为安卓用户投递 SpyNote 远控木马&#xff0c;为 Windows 用户投递 NjRAT 和 DCRAT 远控木马。 攻击行动概述 攻击者在单个 IP 地址上部署了所有的虚…

LabVIEW电表改装与校准仿真系统

LabVIEW开发的电表改装与校准仿真实验平台不仅简化了传统的物理实验流程&#xff0c;而且通过虚拟仿真提高了实验的效率和安全性。该平台通过模拟电表改装与校准的各个步骤&#xff0c;允许学生在没有实际硬件的情况下完成实验&#xff0c;有效地结合了理论学习和实践操作。 项…

RAG未来的出路

总有人喊RAG已死,至少看目前不现实。 持这个观点的人,大多是Long context派,老实说,这派人绝大多数不甚理解长上下文的技术实现点,就觉得反正context越长,越牛B,有点饭圈化 ,当然我并不否认长上下文对提升理解力的一些帮助,就是没大家想的那么牛B而已(说个数据,达到…

Hazelcast 分布式缓存 在Seatunnel中的使用

1、背景 最近在调研seatunnel的时候&#xff0c;发现新版的seatunnel提供了一个web服务&#xff0c;可以用于图形化的创建数据同步任务&#xff0c;然后管理任务。这里面有个日志模块&#xff0c;可以查看任务的执行状态。其中有个取读数据条数和同步数据条数。很好奇这个数据…

Playwright鼠标悬浮元素定位方法

优点&#xff1a;你把鼠标点烂&#xff0c;把它从20楼丢下去&#xff0c;元素定位就在那&#xff0c;他不动&#xff0c;我说的偶像&#xff01; F12打开浏览器的调试页面 点击源代码Sources 右侧找到事件监听器断点&#xff08;Event Listener breakpoints&#xff09;&#…

Excel 常用技巧(六)

Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件&#xff0c;可以用来制作电子表格、完成许多复杂的数据运算&#xff0c;进行数据的分析和预测&#xff0c;并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…

分享:大数据信用报告查询哪家好?

在现代社会&#xff0c;个人信用报告对于个人信用评估、贷款申请以及金融服务的获取至关重要。随着大数据技术的发展&#xff0c;越来越多的平台提供了便捷的大数据信用报告查询服务。那么&#xff0c;到底应该选择哪家平台来查询大数据信用报告呢?以下是一些选择标准和推荐。…

标准立项 | 给水中试基地建设导则

结合近几年在已设计、建设和运维的不同规模的给水中试基地&#xff0c;凝练建设实践中所获得的实际经验和关键指标及参数&#xff0c;编制《给水中试基地建设导则》&#xff0c;以填补标准空白&#xff0c;统一建设标准。

LabVIEW共享变量

共享变量简介 LabVIEW​为​创建​分布​式​应用使用​共享​变量​可以简化​此类​应用的编程。​ 借助​共享​变量&#xff0c;​您​可以​在​同​一个​程序​框​图​的​不同​循环​之间​或者网络上​的​不同VI之间​共享​数据。与LabVIEW中的许多​其他数据​共…

GPT-4o的视觉识别能力,将绕过所有登陆的图形验证码

知识星球&#x1f517;除了包含技术干货&#xff1a;《Java代码审计》《Web安全》《应急响应》《护网资料库》《网安面试指南》还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 我们来看一下市面上常见的图形验证…