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

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#二次开发入门)

如下图所示&#xff0c;获取多个实体的最大包围盒&#xff0c;用红色线表示&#xff1a; 也可单独选圆的包围盒 部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using A…...

【Clickhouse 探秘】Clikchouse 有哪些表引擎?你都知道哪些?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

你好,C++并发世界

C并发编程的主要目的是任务隔离和提高性能 是的&#xff0c;C并发编程的主要目的是任务隔离和提高性能。具体来说&#xff0c;可以总结为以下几点&#xff1a; 任务隔离&#xff1a;通过并发编程&#xff0c;程序可以将不同的任务或计算分隔开&#xff0c;这样可以防止它们之间…...

windows10 安装 达梦数据库DM8

一. 前期工作 下载 https://www.dameng.com/list_103.html 通过百度网盘分享的文件&#xff1a;达梦数据库 链接&#xff1a;https://pan.baidu.com/s/1mJcT3UiwojeWIhXpAwh-RA 提取码&#xff1a;jyzi 点我: 想要 解压 双击iso文件 二. 安装步骤 1 .双击setup.ext安装 …...

ntp交叉编译 ntpdate时间同步

NTP(Network Time Protocol,网络时间协议)是一种用于在计算机系统之间同步时钟的协议,广泛覆盖网络环境中,确保网络设备和计算机上的时间保持一致。NTP 是基于 UDP 协议工作在123号端口上,能够在不同的网络条件下达到数千级别的精度同步时间。 实现windows上位机作为ntp服…...

微服务实战系列之玩转Docker(十六)

导览 前言Q&#xff1a;基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker&#xff0c;一个宠儿&#xff0c;一个云原生领域的…...

Solana 代币 2022 — Transfer Hook

从零到英雄的 Solana 代币 2022 — Transfer Hook Token 2022 计划引入了几项令人兴奋的扩展&#xff0c;增强了铸造和代币账户的功能。在这些功能中&#xff0c;我个人最喜欢的是Transfer Hook &#xff08;转账钩子&#xff09; 。 想象时间 让我们戴上想象的帽子&#xf…...

网络爬虫中的反爬虫技术:突破限制,获取数据

&#xff0c;网络爬虫已成为获取大量网络数据的重要工具。然而&#xff0c;随着爬虫技术的发展&#xff0c;许多网站也开始采用各种反爬虫措施来保护自己的数据。作为爬虫开发者&#xff0c;我们需要不断更新我们的技术&#xff0c;以应对这些反爬虫措施。本文将详细介绍一些常…...

【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生成

前几篇文章介绍了路由的相关知识&#xff0c;包括原理&#xff0c;模板和约束。围绕的一个点就是URL&#xff0c;那么URL是如何生成的呢&#xff1f; 在 ASP.NET CORE应用程序中&#xff0c;使用了一个叫 LinkGenerator的链接生成器来生成URL的。 LinkGenerator是一个中间件组件…...

使用 Java 实现从搜索引擎批量下载图片

在进行一些数据收集、图像处理或研究工作时&#xff0c;我们可能需要从网络上批量下载高质量的图片。本文将介绍如何使用 Java 和 Jsoup 库&#xff0c;从搜索引擎中抓取图片&#xff0c;解析详情页并过滤出高质量图片。通过以下几个步骤&#xff0c;您可以自动化这个图片收集的…...

基于Matlab GUI的说话人识别测试平台

基于Matlab GUI的说话人识别测试平台 摘 要&#xff1a;为了克服在Matlab中语音处理工具箱的不足&#xff0c;设计出基于Matlab图形用户界面&#xff08;GUI&#xff09;的说话人识别测试平台。系统框架设计&#xff1a;特征参数采用美尔倒谱系数及差分美尔倒谱系数&#xff0c…...

Leetcode 热题100之二叉树2

1.二叉树的层序遍历 思路分析&#xff1a;层序遍历是逐层从左到右访问二叉树的所有节点&#xff0c;通常可以使用广度优先搜索&#xff08;BFS&#xff09;来实现。我们可以使用一个队列&#xff08;FIFO&#xff09;来存储每一层的节点&#xff0c;并逐层访问。 初始化队列&a…...

<项目代码>YOLOv8 煤矸石识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章

GA/T1400视图库平台EasyCVR是一款综合性的视频管理工具&#xff0c;它兼容Windows、Linux&#xff08;包括CentOS和Ubuntu&#xff09;以及国产操作系统。这个平台不仅能够接入多种协议&#xff0c;还能将不同格式的视频数据统一转换为标准化的视频流&#xff0c;通过无需插件的…...

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&#xff1a;logical…...

xmuoj [蒙德里安的梦想] 状压dp个人笔记

本题是状压dp经典题目&#xff0c;很多人都是通过这一题开始对状压dp有所了解。 在进行讲解之前&#xff0c;我们先通过几个问答大致了解状压dp。 一、问答 1. 问题&#xff1a;什么是状压dp? 回答&#xff1a;状压dp即为状态压缩动态规划&#xff0c;何为状态压缩&#x…...

ubuntu22安装搜狗输入法不能输入中文

关闭Wayland 在/etc/gdm3/custom.conf文件内&#xff0c;取消注释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&#xff1a; 轻量且高效&#xff0c;适合进行常规的 H…...

基于SSM医院门诊互联电子病历管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;项目分类管理&#xff0c;项目信息管理&#xff0c;预约信息管理&#xff0c;检查信息管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&…...

从机翼到飞行:空气动力学核心概念与应用解析

1. 翼型&#xff1a;飞机飞行的秘密藏在形状里 第一次看到飞机机翼横截面时&#xff0c;我盯着那个水滴状的形状看了足足十分钟。这个被称为翼型的二维轮廓&#xff0c;藏着人类百年航空史最精妙的设计智慧。就像鱼类的流线型身体决定了游泳效率&#xff0c;翼型的每个曲线转折…...

LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义

LeaguePrank终极指南&#xff1a;3分钟掌握英雄联盟个人信息自定义 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟中千篇一律的个人资料展示&#xff1f;想要在召唤师峡谷中展示独特的自我形象&#xff…...

ESPHome安装后,你的第一个智能设备可以不是开关或灯

ESPHome创意实践&#xff1a;从温控风扇到植物管家&#xff0c;解锁智能设备的无限可能 当你完成ESPHome的基础安装后&#xff0c;脑海中浮现的第一个项目是什么&#xff1f;大多数人会想到开关或灯泡——这些确实是智能家居的经典起点。但ESP8266/ESP32开发板的潜力远不止于此…...

从订阅到命令面板:全面理解 SAP Business Application Studio 中的 SAP Fiori 开发入口

在很多 SAP Fiori 项目里,团队把精力都放在 SAPUI5、OData、Fiori elements、注解模型和部署流程上,却常常低估了开发环境本身对效率的影响。等到项目进入多人协作、跨系统联调、权限分配和模板生成阶段,大家才会发现,开发工具并不只是一个写代码的地方,它实际上决定了团队…...

Hi3516DV300鸿蒙时钟应用开发:从环境搭建到驱动调试全流程

1. 项目概述&#xff1a;从零到一&#xff0c;在Hi3516DV300上跑通一个鸿蒙时钟最近在捣鼓OpenHarmony&#xff0c;手头正好有一块海思的Hi3516DV300开发板。这块板子性能不错&#xff0c;带屏显&#xff0c;很适合做点有意思的应用。我琢磨着&#xff0c;与其跑个现成的Demo&a…...

内网手机远程桌面:解锁高效协同的数字密钥

在数字化办公与生活深度融合的当下&#xff0c;人们对于信息获取与设备操控的便捷性需求持续攀升。当我们身处内网环境&#xff0c;却渴望随时随地操控远端的电脑设备&#xff0c;内网手机远程桌面技术便如同一把精准的数字密钥&#xff0c;打破空间与网络的束缚&#xff0c;为…...

NotebookLM评论反馈功能全链路拆解(从Prompt响应延迟到语义锚定失效的7个致命断点)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM评论反馈功能的架构全景与设计初衷 NotebookLM 的评论反馈功能并非简单的 UI 层叠加&#xff0c;而是贯穿数据流、状态管理与协同语义理解的深度集成模块。其核心目标是让用户在阅读、引用或…...

TVA智能体范式的工业视觉革命(3)

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

别再手动发邮件了!用Power Automate为SharePoint列表搭建自动化审批流(保姆级教程)

别再手动发邮件了&#xff01;用Power Automate为SharePoint列表搭建自动化审批流&#xff08;保姆级教程&#xff09; 在快节奏的现代办公环境中&#xff0c;手动处理审批流程已成为效率的隐形杀手。想象一下&#xff1a;员工提交的请假申请需要HR手动转发邮件&#xff0c;采购…...

Sora-FullStack全栈开发框架:构建AI视频生成应用的工程实践

1. 项目概述&#xff1a;一个全栈式Sora应用开发框架的诞生最近在AI视频生成领域&#xff0c;Sora的横空出世无疑点燃了无数开发者和创业者的热情。但兴奋过后&#xff0c;一个现实问题摆在眼前&#xff1a;如何将Sora这类前沿模型的能力&#xff0c;真正落地成一个稳定、可用、…...