当前位置: 首页 > 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;系统首页&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...