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

news2024/7/6 19:54:37

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.coloradmin.cn/o/1833293.html

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

相关文章

Spring Cloud Alibaba Nacos持久化配置

所谓的持久化就是将Nacos配置持久化存储到数据库里面&#xff0c;在0.7版本之前&#xff0c;在单机模式时nacos使用嵌入式数据库实现数据的存储&#xff0c;不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力。 ① 找到并执行sql脚本 这里路径为&#xff1a;n…

摄影构图:人像摄影和风景摄影的一些建议

写在前面 博文内容涉及摄影中人像摄影和风景摄影的简单介绍《高品质摄影全流程解析》 读书笔记整理理解不足小伙伴帮忙指正 &#x1f603; 生活加油 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样…

SpringBootWeb 篇-入门了解 Apache POI 使用方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Apache POI 概述 2.0 使用 Apache POI 读写 Excel 文件 2.1 写入 Excel 文件 2.2 写入 Excel 文件代码演示 2.3 读取 Excel 文件 2.4 读取 Excel 文件代码演示 1.…

胡说八道(24.6.9)——离散时间系统及simulink仿真

上回说道拉普拉斯变换的定义、性质以及在电路分析中的应用。今天先来谈谈simulink仿真&#xff0c;可为是让我非常的震惊&#xff0c;今天做了三种模型的应用。第一个是simulink中有限状态机的应用&#xff0c;用来解决一些复杂的逻辑问题&#xff0c;实现状态之间的转换。第一…

市场情绪周期2024-6-17(补涨回头潮视角验证)

竞价隔夜单 看长江通信&#xff0c;38亿涨到40亿又回落&#xff0c;那么周末最大的利好消息加持下&#xff0c;隔夜单不及预期&#xff0c;金溢科技 更是如此&#xff1b;空间板华闻集团8天7板&#xff0c;连扳5板&#xff0c;一字跌停&#xff0c;它也是有车联网的&#xff0c…

2V升6V升压恒流WT7012

2V升6V升压恒流WT7012 今天给大家介绍一款能驱动多达7串白光LED的升压转换器WT7012。 WT7012升压恒流应用&#xff1a;2V升6V升9V升12V恒流驱动。其通过外部电流检测电阻&#xff0c;采用电流控制模式以及固定的工作频率来控制LED电流&#xff0c;较低的反馈电压使得电流检测电…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口)&#xff1b;下载好对应的系统镜像&#xff1b;下载RUFUS或者软通碟U盘制作启动软件&#xff1b; 二、Windows操作系统下制作U盘启动&#xff08;这里以使用RUFUS软件…

Spring和SpringBoot(概述与功能)

目录 一、SpringBoot 概念 &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;部分注解 &#xff08;3&#xff09;其它介绍 ​编辑 二、 Spring 缺点 &#xff08;1&#xff09;配置繁琐 &#xff08;2&#xff09;依赖繁琐 三、SpringBoot 功能&#xff0…

常见的Redis使用问题及解决方案

目录 1. 缓存穿透 1.1 解决方案 2. 缓存击穿 2.1 解决方案 3. 缓存雪崩 3.1 概念图及问题描述 ​编辑3.2 解决方案 4. 分布式锁 4.1 概念 4.2 基于redis来实现分布式锁 4.3 用idea来操作一遍redis分布式锁 4.4 分布式上锁的情况下&#xff0c;锁释放了服务器b中的锁…

教育培训系统(FastAdmin+ThinkPHP+Unipp)

引领学习新风尚 &#x1f4da; 引言&#xff1a;教育新篇章 随着科技的不断发展&#xff0c;教育形式也在不断创新与变革。教育培训系统作为这一变革的重要载体&#xff0c;正逐渐改变着我们的学习方式。今天&#xff0c;就让我们一起探索教育培训系统的魅力&#xff0c;看看它…

[ARM-2D 专题]3. ##运算符

C语言的宏系统相当强大&#xff0c;它允许使用##符号来处理预处理期的文本替换。这种用法被称为标记连接&#xff08;token pasting&#xff09;操作&#xff0c;其结果是将两个标记紧紧地连接在一起&#xff0c;而省略掉它们之间的所有空格。在复杂的宏定义中&#xff0c;运用…

部分CVE复现Web(1)

Apache HTTP Server 路径穿越漏洞CVE-2021-41773 ​ 首先&#xff0c;先来看一下这个漏洞的官方描述&#xff1a; ​ CVE-2021-41773 是在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的…

三星(中国)投资公司线上入职测评笔试邀请数字推理语言逻辑真题题库

三星&#xff08;中国&#xff09;有限公司北京分公司 邀请您参加 SHL线上笔试 具体安排如下&#xff1a; 笔试时间&#xff1a;周三 9:00 笔试时长&#xff1a;1.5h ~ 2h 笔试内容及要求&#xff1a;数字推理限时30min&#xff1b;语言逻辑限时30min&#xff1b;性格测试不…

国内外典型的知识图谱项目

文章目录 早期的知识库项目互联网时代的知识图谱中文开放知识图谱垂直领域知识图谱 从人工智能的概念被提出开始&#xff0c;构建大规模的知识库一直都是人工智能、自然语言理解等领域的核心任务之一。下面分别介绍早期的知识库项目、互联网时代的知识图谱、中文开放知识图谱和…

什么是Vue开发技术

概述 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它设计得非常灵活&#xff0c;可以轻松地被集成到任何项目中。 vue是视图的发音&#xff0c;其目的是帮助开发者易于上手&#xff0c;提供强大的功能构建复杂的应用程序 示例 以下是vue基本的语法概述 声明式渲…

激活和禁用Hierarchy面板上的物体

1、准备工作&#xff1a; (1) 在HIerarchy上添加待隐藏/显示的物体&#xff0c;名字自取。如&#xff1a;endImage (2) 在Inspector面板&#xff0c;该物体的名称前取消勾选&#xff08;隐藏&#xff09; (3) 在HIerarchy上添加按钮&#xff0c;名字自取。如&#xff1a;tip…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号&#xff0c;发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成&#xff08;主机&#xff09;或&#xff08;从机&#xff09; 1.8 实现效…

HarmonyOS之自选股App

支持在 鸿蒙、安卓、苹果设备上运行。 1.界面效果展示 2.数据存储 数据存储采用的是官方的 ohos.data.relationalStore.relationalStore stock_code表用来存储A股市场5000多家公司的股票代码和名称等信息 const TAB_STOCK_CODE "stock_code" const CREATE_TABL…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

java面试(企业场景)

设计模式 工厂方法模式 简单工厂模式 简单工厂包括以下角色&#xff1a; 抽象产品&#xff1a;定义了产品的规范&#xff0c;描述了产品的主要特性和功能具体产品&#xff1a;实现或者继承抽象产品的子类具体工厂&#xff1a;提供了创建产品的机会&#xff0c;调用者通过该…