019集——获取CAD图中多个实体的包围盒(CAD—C#二次开发入门)
如下图所示,获取多个实体的最大包围盒,用红色线表示:

也可单独选圆的包围盒
部分代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AcTools;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Colors;
using System.Runtime.CompilerServices;
using Wform = System.Windows.Forms;
using System.IO;
using System.Windows.Forms;
//using Excel = NetOffice.ExcelApi;namespace AcTools
{public class Class1{#region //Polyline pl = new Polyline(3);//pl.AddVertexAt(0, new Point2d(10, 2), 0, 0, 0); // 起点 //pl.AddVertexAt(1, new Point2d(30, 5), 0, 0, 0); // 起点 //pl.AddVertexAt(2, new Point2d(50, 25), 0, 0, 0); // 起点 //Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;//db.AddEntityToModeSpace(line);#endregion[CommandMethod("xx")]public void XX(){ var db = Z.db;/// 包围盒List<Entity> ents = db.SelectEntities<Entity>();List<double> lis = Getboxs(ents);Polyline pl = new Polyline();if (lis.Count == 0 ){Z.ed.WriteMessage("未选择对象!");return;}pl.AddVertexAt(0, new Point2d(lis[0], lis[1]),0,0,0);pl.AddVertexAt(1, new Point2d(lis[2], lis[1]), 0, 0, 0);pl.AddVertexAt(2, new Point2d(lis[2], lis[3]), 0, 0, 0);pl.AddVertexAt(3, new Point2d(lis[0], lis[3]), 0, 0, 0);pl.Closed = true;pl.ColorIndex = 1;db.AddEntityToModeSpace(pl);List< Point2d> pt = new List<Point2d> { new Point2d(lis[0]+1000, lis[1]+1000),new Point2d(lis[2]+1000, lis[1] + 1000),new Point2d(lis[2]+1000, lis[3] + 1000),new Point2d(lis[0]+1000, lis[3]+1000)};db.AddPolyLineToModeSpace(true, 0, pt.ToArray());db.Zoom();//var ed = Z.ed;#region// 声明数据库对象//Database db = HostApplicationServices.WorkingDatabase;//db.EraseAll();// db.AddTable(6,6);//db.Zoom();//List<Entity> ents = new List<Entity>();//for (int i = 0; i < 5; i++)//{// Line line = new Line(Point3d.Origin, new Point3d(100 * i, 100, 0));// ents.Add(line);//}//ObjectId oid = db.AddAttBlock("属性块1", ents, new Point3d(0, 100, 0), "图号", "图号内容:", "2024-100", 20);ObjectId oid = db.AddAttBlock("属性块2", ents,new Point3d(100,100,0),"tag2","提示","显示文本",10);ObjectId bid = db.InsertAttrBlock(oid, Point3d.Origin, 0, 1, 1, 1);//Dictionary<string,string> dic= new Dictionary<string,string> ();// dic.Add("tag2","修改后的值3");//bid.ChangeBlockAttr(dic);db.ChangeBlockColor(oid, 5);ObjectId bref = db.InsertAttrBlock(oid, new Point3d(200, 0, 0), 0, 1, 1, 1);oid.EraseBlock();bref.EraseEntity();// db.DataToTableDemo();//db.Zoom();db.Savefd();db.EraseBlockSelectonScreen();BlockData blockData = new BlockData();//db.TxtToDwg();//SaveFileDialog savefd;//DialogResult saveDlgRes;//db.Sfd(out savefd, out saveDlgRes);//if (saveDlgRes == Wform.DialogResult.OK)//{// BlockData[] data = new BlockData[2];// data[0].layerName = "0的图层名";// data[1].blockName = "1的块名";// string[] contents = new string[data.Length];// for (int i = 0; i < data.Length; i++)// {// contents[i] = data[i].blockName + data[i].layerName + ",";// }// //string[] contents = new string[] { "1111", "dzb" };// File.WriteAllLines(savefd.FileName, contents);// db.DwgToTxt();//db.TxtToDwg();//OpenFileDialog ofd = new OpenFileDialog();//DialogResult ofdr = ofd.ShowDialog();//db.Ofd(out ofd, out ofdr );//SaveFileDialog sfd;//= new SaveFileDialog();//DialogResult sfdr;//` = sfd.ShowDialog();//db.Sfd(out sfd, out sfdr);//db.DwgToTxt();//db.TxtToDwg();//Excel.Application excelAPP = new Excel.Application();//Excel.Workbook book = excelAPP.Workbooks.Add() ;//Excel.Worksheet sheet = (Excel.Worksheet) book.Worksheets[0] ;// sheet.Cells["A1"].Value = "dzb";//excelAPP.Visible = true ;//excelAPP.Worksheets.Add(book) ;//excelAPP.Worksheets.Add(book);#endregion//db.DDwgToTxt();// db.TxtToDwg();//ed.WriteMessage("1");}private List<double> Getboxs(List<Entity> entities){List< double> lis = new List< double>();if (entities.Count ==0){return lis;}double minx = entities.Min(x => x.Bounds.Value.MinPoint.X);double miny = entities.Min(x => x.Bounds.Value.MinPoint.Y);double maxx = entities.Max(x => x.Bounds.Value.MaxPoint.X);double maxy = entities.Max(x => x.Bounds.Value.MaxPoint.Y);lis.Add(minx);lis.Add(miny);lis.Add(maxx);lis.Add(maxy);return lis;}}
}
public static List<T> SelectEntities<T>(this Database db) where T : Entity{List<T> result = new List<T>();Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;PromptSelectionResult psr = editor.GetSelection();if (psr.Status == PromptStatus.OK){ObjectId[] objectids = psr.Value.GetObjectIds();Database database = HostApplicationServices.WorkingDatabase;using (Transaction tran = database.TransactionManager.StartTransaction()){foreach (var item in objectids){Entity entity = item.GetObject(OpenMode.ForRead) as Entity;if (entity is T){result.Add(entity as T);}}}}return result;}
相关文章:
019集——获取CAD图中多个实体的包围盒(CAD—C#二次开发入门)
如下图所示,获取多个实体的最大包围盒,用红色线表示: 也可单独选圆的包围盒 部分代码如下: using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using A…...
【Clickhouse 探秘】Clikchouse 有哪些表引擎?你都知道哪些?
👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…...
你好,C++并发世界
C并发编程的主要目的是任务隔离和提高性能 是的,C并发编程的主要目的是任务隔离和提高性能。具体来说,可以总结为以下几点: 任务隔离:通过并发编程,程序可以将不同的任务或计算分隔开,这样可以防止它们之间…...
windows10 安装 达梦数据库DM8
一. 前期工作 下载 https://www.dameng.com/list_103.html 通过百度网盘分享的文件:达梦数据库 链接:https://pan.baidu.com/s/1mJcT3UiwojeWIhXpAwh-RA 提取码:jyzi 点我: 想要 解压 双击iso文件 二. 安装步骤 1 .双击setup.ext安装 …...
ntp交叉编译 ntpdate时间同步
NTP(Network Time Protocol,网络时间协议)是一种用于在计算机系统之间同步时钟的协议,广泛覆盖网络环境中,确保网络设备和计算机上的时间保持一致。NTP 是基于 UDP 协议工作在123号端口上,能够在不同的网络条件下达到数千级别的精度同步时间。 实现windows上位机作为ntp服…...
微服务实战系列之玩转Docker(十六)
导览 前言Q:基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker,一个宠儿,一个云原生领域的…...
Solana 代币 2022 — Transfer Hook
从零到英雄的 Solana 代币 2022 — Transfer Hook Token 2022 计划引入了几项令人兴奋的扩展,增强了铸造和代币账户的功能。在这些功能中,我个人最喜欢的是Transfer Hook (转账钩子) 。 想象时间 让我们戴上想象的帽子…...
网络爬虫中的反爬虫技术:突破限制,获取数据
,网络爬虫已成为获取大量网络数据的重要工具。然而,随着爬虫技术的发展,许多网站也开始采用各种反爬虫措施来保护自己的数据。作为爬虫开发者,我们需要不断更新我们的技术,以应对这些反爬虫措施。本文将详细介绍一些常…...
【ROS2】cv_bridge:ROS图像消息和OpenCV的cv::Mat格式转换库
1、简述 cv_bridge可以实现ROS图像消息(sensor_msgs::msg::Image)和OpenCV的cv::Mat格式的转换。 cv_bridge支持各种常见的图像编码格式,包括JPEG、PNG、BMP等。 2、互转 1)cv::Mat转sensor_msgs::Image cv::Mat image; sensor_msgs::ImagePtr pMsg = cv_bridge::CvIma…...
【Web.路由】——URL生成
前几篇文章介绍了路由的相关知识,包括原理,模板和约束。围绕的一个点就是URL,那么URL是如何生成的呢? 在 ASP.NET CORE应用程序中,使用了一个叫 LinkGenerator的链接生成器来生成URL的。 LinkGenerator是一个中间件组件…...
使用 Java 实现从搜索引擎批量下载图片
在进行一些数据收集、图像处理或研究工作时,我们可能需要从网络上批量下载高质量的图片。本文将介绍如何使用 Java 和 Jsoup 库,从搜索引擎中抓取图片,解析详情页并过滤出高质量图片。通过以下几个步骤,您可以自动化这个图片收集的…...
基于Matlab GUI的说话人识别测试平台
基于Matlab GUI的说话人识别测试平台 摘 要:为了克服在Matlab中语音处理工具箱的不足,设计出基于Matlab图形用户界面(GUI)的说话人识别测试平台。系统框架设计:特征参数采用美尔倒谱系数及差分美尔倒谱系数,…...
Leetcode 热题100之二叉树2
1.二叉树的层序遍历 思路分析:层序遍历是逐层从左到右访问二叉树的所有节点,通常可以使用广度优先搜索(BFS)来实现。我们可以使用一个队列(FIFO)来存储每一层的节点,并逐层访问。 初始化队列&a…...
<项目代码>YOLOv8 煤矸石识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章
GA/T1400视图库平台EasyCVR是一款综合性的视频管理工具,它兼容Windows、Linux(包括CentOS和Ubuntu)以及国产操作系统。这个平台不仅能够接入多种协议,还能将不同格式的视频数据统一转换为标准化的视频流,通过无需插件的…...
LVM与磁盘配额
文章目录 LVM与磁盘配额1 LVM概述1.1 名词解释1.2 LVM优势 2 LVM相关命令2.1 创建逻辑卷过程2.2 对逻辑卷扩容 3 磁盘配额3.1 磁盘配额的特点3.2 磁盘配额的命令3.3 查看配额使用情况3.4 验证磁盘配额3.5 实验 LVM与磁盘配额 1 LVM概述 1.1 名词解释 LVM:logical…...
xmuoj [蒙德里安的梦想] 状压dp个人笔记
本题是状压dp经典题目,很多人都是通过这一题开始对状压dp有所了解。 在进行讲解之前,我们先通过几个问答大致了解状压dp。 一、问答 1. 问题:什么是状压dp? 回答:状压dp即为状态压缩动态规划,何为状态压缩&#x…...
ubuntu22安装搜狗输入法不能输入中文
关闭Wayland 在/etc/gdm3/custom.conf文件内,取消注释WaylandEnable cat /etc/gdm3/custom.conf | grep WaylandEnable WaylandEnablefalse 其它步骤参考搜狗官方教程 https://pinyin.sogou.com/linux/help.php...
HtmlAgilityPack 操作详解
目录 1.安装 HtmlAgilityPack 2. 示例 HTML 3. 使用 HtmlAgilityPack 进行 HTML 解析与操作 4. 代码详解 1.加载html文档 2.选择元素 3. 提取属性 4.修改属性 5.常用的几种获取元素的 XPath 写法 HtmlAgilityPack: 轻量且高效,适合进行常规的 H…...
基于SSM医院门诊互联电子病历管理系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,医生管理,项目分类管理,项目信息管理,预约信息管理,检查信息管理,系统管理 用户账号功能包括:系统首页&…...
从机翼到飞行:空气动力学核心概念与应用解析
1. 翼型:飞机飞行的秘密藏在形状里 第一次看到飞机机翼横截面时,我盯着那个水滴状的形状看了足足十分钟。这个被称为翼型的二维轮廓,藏着人类百年航空史最精妙的设计智慧。就像鱼类的流线型身体决定了游泳效率,翼型的每个曲线转折…...
LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义
LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟中千篇一律的个人资料展示?想要在召唤师峡谷中展示独特的自我形象ÿ…...
ESPHome安装后,你的第一个智能设备可以不是开关或灯
ESPHome创意实践:从温控风扇到植物管家,解锁智能设备的无限可能 当你完成ESPHome的基础安装后,脑海中浮现的第一个项目是什么?大多数人会想到开关或灯泡——这些确实是智能家居的经典起点。但ESP8266/ESP32开发板的潜力远不止于此…...
从订阅到命令面板:全面理解 SAP Business Application Studio 中的 SAP Fiori 开发入口
在很多 SAP Fiori 项目里,团队把精力都放在 SAPUI5、OData、Fiori elements、注解模型和部署流程上,却常常低估了开发环境本身对效率的影响。等到项目进入多人协作、跨系统联调、权限分配和模板生成阶段,大家才会发现,开发工具并不只是一个写代码的地方,它实际上决定了团队…...
Hi3516DV300鸿蒙时钟应用开发:从环境搭建到驱动调试全流程
1. 项目概述:从零到一,在Hi3516DV300上跑通一个鸿蒙时钟最近在捣鼓OpenHarmony,手头正好有一块海思的Hi3516DV300开发板。这块板子性能不错,带屏显,很适合做点有意思的应用。我琢磨着,与其跑个现成的Demo&a…...
内网手机远程桌面:解锁高效协同的数字密钥
在数字化办公与生活深度融合的当下,人们对于信息获取与设备操控的便捷性需求持续攀升。当我们身处内网环境,却渴望随时随地操控远端的电脑设备,内网手机远程桌面技术便如同一把精准的数字密钥,打破空间与网络的束缚,为…...
NotebookLM评论反馈功能全链路拆解(从Prompt响应延迟到语义锚定失效的7个致命断点)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM评论反馈功能的架构全景与设计初衷 NotebookLM 的评论反馈功能并非简单的 UI 层叠加,而是贯穿数据流、状态管理与协同语义理解的深度集成模块。其核心目标是让用户在阅读、引用或…...
TVA智能体范式的工业视觉革命(3)
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
别再手动发邮件了!用Power Automate为SharePoint列表搭建自动化审批流(保姆级教程)
别再手动发邮件了!用Power Automate为SharePoint列表搭建自动化审批流(保姆级教程) 在快节奏的现代办公环境中,手动处理审批流程已成为效率的隐形杀手。想象一下:员工提交的请假申请需要HR手动转发邮件,采购…...
Sora-FullStack全栈开发框架:构建AI视频生成应用的工程实践
1. 项目概述:一个全栈式Sora应用开发框架的诞生最近在AI视频生成领域,Sora的横空出世无疑点燃了无数开发者和创业者的热情。但兴奋过后,一个现实问题摆在眼前:如何将Sora这类前沿模型的能力,真正落地成一个稳定、可用、…...
