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;
 }

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

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

相关文章

【快速上手】pyspark 集群环境下的搭建(Yarn模式)

目录 前言&#xff1a; 一、安装步骤 安装前准备 1.第一步&#xff1a;安装python 2.第二步&#xff1a;在bigdata01上安装spark 3.第三步&#xff1a;同步bigdata01中的spark到bigdata02和03上 二、启动 三、可打开yarn界面查看任务 前言&#xff1a; 上一篇介绍的是…

sublime python出现中文乱码怎么办

一、乱码现象 利用sublime自带编译快捷方式ctrlB会出现中文乱码的情况。 print("没有循环数据!") print("完成循环!") 二、寻找原因 1、由于之前我已经安装了插件ConvertToUTF8&#xff0c;排除文本编码错误问题。 2、相同的代码在插件sublimerepl搭建的…

第三届北京国际水利科技博览会将于25年3月在国家会议中心召开

由中国农业节水和农村供水技术协会、北京水利学会、振威国际会展集团等单位联合主办的第三届北京国际水利科技博览会暨供水技术与设备展&#xff08;北京水利展&#xff09;将于2025年3月31日至4月2日在北京•国家会议中心举办&#xff01; 博览会以“新制造、新服务、新业态”…

RHCE DNS

DNS DNS1.1 DNS介绍1.2 安装bind&#xff0c;配置文件1.3 正向解析文件模板1.4 反向解析文件模板1.5 转发服务器实验1.6 解析web服务器实验1.7 区域传送克隆虚拟机 DNS 1.1 DNS介绍 DNS系统 域名系统&#xff08;DNS&#xff09;是一个分层的分布式数据库。它存储用于将Inter…

JSON交互处理

目录 一、什么是JSON 二、JSON和JavaScript对象互转 ​三、Controller返回JSON数据 3.1 使用Jackson 编写Controller 1. 一个对象 2. 多个对象 3. 输出时间对象 4. 优化&#xff1a;抽取为工具类 一、什么是JSON Json是JavaScript对象的字符串表示法&#xff0c;它用…

GeoSever发布图层(保姆姬)

发布服务的具体步骤。 1. 安装 GeoServer 下载 GeoServer 安装包&#xff1a;GeoServer 官网按照安装说明进行安装&#xff0c;可以选择 Windows、Linux 或其他平台。 2. 启动 GeoServer 启动 GeoServer 通常通过访问 http://localhost:8080/geoserver 进行。默认用户名和密…

Linux中断、软中断、MMU内存映射-深入理解

中断&#xff1a; Linux中&#xff0c;中断上半部不能嵌套&#xff0c;如果一直保存上下文&#xff0c;栈可能会溢出。中断上半部处理紧急事情&#xff0c;下半部处理非紧急事情。下半部通常通过软中断来实现。在上半部执行完后会执行下半部的软中断&#xff0c;如果囤积了A和…

讲讲 kafka 维护消费状态跟踪的方法?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲 kafka 维护消费状态跟踪的方法&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 讲讲 kafka 维护消费状态跟踪的方法&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中&#x…

CodeS:构建用于文本到 SQL 的开源语言模型

发布于&#xff1a;2024 年 10 月 29 日 #RAG #Text2 SQL #NL2 SQL 语言模型在将自然语言问题转换为 SQL 查询&#xff08;文本到 SQL &#xff09;的任务中显示出良好的性能。然而&#xff0c;大多数最先进的 &#xff08;SOTA&#xff09; 方法都依赖于强大但闭源的大型语言…

深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架

一、Shiro框架概念 &#xff08;一&#xff09;Shiro框架概念 1.概念&#xff1a; Shiro是apache旗下一个开源安全框架&#xff0c;它对软件系统中的安全认证相关功能进行了封装&#xff0c;实现了用户身份认证&#xff0c;权限授权、加密、会话管理等功能&#xff0c;组成一…

「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础

在应用开发中&#xff0c;动画效果可以增强用户体验。鸿蒙框架提供了 translate、scale 和 rotate 等动画功能&#xff0c;允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。 关键词 Animation 组件动画效果位置动画自动动画缩放动画 一…

详解:模板设计模式

模板设计模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;在软件设计中有着广泛的应用&#xff0c;旨在提高代码的可维护性和可复用性。 一、定义与特点 定义&#xff1a; 模板设计模式定义了一个算法的骨架&#xff0c;将某些步骤推迟到子类中实…

Java中的时区和带时区的时间对象:ZoneId类、ZonedDateTime类

在 Java 中&#xff0c;ZoneId 和 ZonedDateTime 是处理时区和带时区日期时间的重要类&#xff0c;它们属于 java.time 包&#xff0c;这个包是在 Java 8 中引入的&#xff0c;用于替代旧的日期和时间 API&#xff08;java.util.Date、java.util.Calendar 等&#xff09;。 1、…

微积分复习笔记 Calculus Volume 1 - 4.5 Derivatives and the Shape of a Graph

4.5 Derivatives and the Shape of a Graph - Calculus Volume 1 | OpenStax

Windows配置Nodejs及nmp简明教程(2024可用)

一、下载及安装Nodejs 下载 Node.js 中文网 (nodejs.com.cn)在此下载windows长期维护版本的.msi安装包&#xff0c;64位 安装&#xff1a; 双节安装包一直点击Next下一步&#xff0c;注意安装路径选择C盘默认路径&#xff08;C:\Program Files\nodejs\&#xff09;即可&#x…

MATLAB实现蝙蝠算法(BA)

MATLAB实现蝙蝠算法(BA) 1.算法介绍 蝙蝠算法&#xff08;简称BA&#xff09;是一种受微型蝙蝠回声定位机制启发的群体智能算法&#xff0c;由Xin-She Yang于2010年提出。这种算法模拟了微型蝙蝠通过向周围环境发出声音并监听回声来识别猎物、避开障碍物以及追踪巢穴的行为。…

JavaStream流

认识 在java.util.stream util包下的新增API&#xff0c;可以用于操作集合或者数组的数据。 功能强大&#xff08;提供了很多结合Lambda的API)&#xff0c;性能高效&#xff08;有很多优化&#xff09;&#xff0c;代码简洁&#xff08;Lambda&#xff09;&#xff0c;可读性好…

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程&#xff0c;其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…

HarmonyOS鸿蒙开发入门,常用ArkUI组件学习(二)

书接上回&#xff0c;让我们继续来学习ArkUI的其他组件 目录&#xff0c;可以点击跳转到想要了解的组件详细内容 组件四&#xff1a;Button组件五&#xff1a;Slider组件六&#xff1a; Column & Row组件七&#xff1a;循环控制组件八&#xff1a; List 组件四&#xff1a;…

四、k8s快速入门之Kubernetes资源清单

kubernetes中的资源 ⭐️ k8s中所有的内容都抽象为资源&#xff0c;资源实列化之后&#xff0c;叫做对象 1️⃣名称空间级别 ⭐️ kubeadm在执行k8s的pod的时候会在kube-system这个名称空间下执行&#xff0c;所以说当你kubectl get pod 的时候是查看不到的查看的是默认的po…