各种排序分组

简易排序方法如下: 

  public static  void XX(){var circles = Z.db.SelectEntities<Circle>();circles = circles.OrderByDescending(x => x.Center.Y).ThenBy(x => x.Center.X).ToList();for (int i = 0; i < circles.Count; i++){DBText text = new DBText() { Position = circles[i].Center, TextString = i.ToString(),Height = 1,ColorIndex= 1 };Z.db.AddEntityToModeSpace(text);}//Debugger.Break();}
 public static List<T> SelectEntities<T>(this Database db ) where T : Entity{List<T> result = new List<T>();Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;var pso = new PromptSelectionOptions();pso.MessageForAdding = "\n请选择:";PromptSelectionResult psr = editor.GetSelection(pso);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;}
 public static ObjectId AddEntityToModeSpace(this Database db, Entity ent){// 声明ObjectId 用于返回ObjectId entId = ObjectId.Null;// 开启事务处理using (Transaction trans = db.TransactionManager.StartTransaction()){// 打开块表BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);// 打开块表记录BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);// 添加图形到块表记录entId = btr.AppendEntity(ent);// 更新数据信息trans.AddNewlyCreatedDBObject(ent, true);// 提交事务trans.Commit();}return entId;}

调整后的效果:

   public static  void XX(){int k = 0;var circles = Z.db.SelectEntities<Circle>();List < List < Circle >> bigteam = Z.GroupEntities<Circle>(circles,Z.IsHorizontalOverlap);bigteam = bigteam.OrderByDescending(x => x[0].Center.Y).ToList();for (int i = 0; i < bigteam.Count; i++){bigteam[i] = bigteam[i].OrderBy(x => x.Center.X).ToList();for ( int j = 0; j < bigteam[i].Count; j++){k = k + 1;DBText text = new DBText() { Position = bigteam[i][j].Center, TextString = k.ToString(), Height = 0.8, ColorIndex = 1 };Z.db.AddEntityToModeSpace(text);}}}
  public static List<List<T>> GroupEntities<T>(List<T> entities,Func<Entity,Entity,bool>func)where T : Entity{List<List<T>> result = new List<List<T>>();List<Friend> friends = new List<Friend>();for (int i = 0; i < entities.Count; i++){Friend friend = new Friend(i);friends.Add(friend);}for (int i = 0; i < entities.Count - 1; i++){for (int j = 0; j < entities.Count; j++){if (func(entities[i], entities[j])){friends[i].Friends.Add(friends[j]);friends[j].Friends.Add(friends[i]);}}}while (friends.Count > 0){List<T> list = new List<T>();Queue<Friend> queue = new Queue<Friend>();queue.Enqueue(friends[0]);friends.RemoveAt(0);*****result.Add(list);}return result;}

之字形排序:

 public static  void XX(){int k = 0;var circles = Z.db.SelectEntities<Circle>();List < List < Circle >> bigteam = Z.GroupEntities<Circle>(circles,Z.IsHorizontalOverlap);bigteam = bigteam.OrderByDescending(x => x[0].Center.Y).ToList();for (int i = 0; i < bigteam.Count; i++){if (i % 2 != 0){bigteam[i] = bigteam[i].OrderByDescending(x => x.Center.X).ToList();for (int j = 0; j < bigteam[i].Count; j++){k = k + 1;DBText text = new DBText() { Position = bigteam[i][j].Center, TextString = k.ToString(), Height = 0.8, ColorIndex = 1 };Z.db.AddEntityToModeSpace(text);}}else{bigteam[i] = bigteam[i].OrderBy(x => x.Center.X).ToList();for ( int j = 0; j < bigteam[i].Count; j++){k = k + 1;DBText text = new DBText() { Position = bigteam[i][j].Center, TextString = k.ToString(), Height = 0.8, ColorIndex = 1 };Z.db.AddEntityToModeSpace(text);}}}}
 while (queue.Count > 0){Friend friend = queue.Dequeue();list.Add(entities[friend.Id]);foreach (Friend f in friend.Friends){if (friends.Contains(f)){queue.Enqueue(f);friends.Remove(f);}}}

规定组数分组法,区别与横向碰撞分组,一刀切分组。

[CommandMethod("CirsOrderBy")]
public void CirsOrderBy()
{double fenShu = 5;List<Circle> cirs = new List<Circle>();Editor ed = Tool.GetEditor();PromptSelectionOptions selectionOptions = new PromptSelectionOptions();SelectionFilter sf = new SelectionFilter(new TypedValue[] { new TypedValue((int)DxfCode.Start,"Circle")});PromptSelectionResult psr = ed.SelectAll(sf);if (psr == null) return;using (Transaction tr = Tool.GetCurDatabse().TransactionManager.StartTransaction()){ObjectId[] ids=psr.Value.GetObjectIds();for (int i = 0; i < ids.Length; i++) {Circle cir= tr.GetObject(ids[i],OpenMode.ForRead)as Circle;cirs.Add(cir);}tr.Commit();}cirs=cirs.OrderBy(c => c.Center.Y).ToList();double totalHeight=cirs.Last().Center.Y-cirs.First().Center.Y;double quJian = totalHeight / fenShu;int quJianShu =(int)Math.Ceiling(totalHeight / fenShu);List<List<Circle>>cirGroups= new List<List<Circle>>();List<Circle>cirGroup= new List<Circle>();for (int i = 0; i < quJianShu; i++) {cirGroup=cirs.Where(c=>c.Center.Y>=cirs.First().Center.Y+i*quJian&& c.Center.Y < cirs.First().Center.Y + (i+1) * quJian).ToList();if (i % 2 == 0){cirGroup = cirGroup.OrderBy(c => c.Center.X).ToList();}else{cirGroup = cirGroup.OrderByDescending(c => c.Center.X).ToList();}cirGroups.Add(cirGroup);}cirs.Clear();foreach (var item in cirGroups){foreach (var circle in item){ cirs.Add(circle);}}Database db = Tool.GetCurDatabse();using (Transaction tr = db.TransactionManager.StartTransaction()){BlockTable bt=tr.GetObject(db.BlockTableId,OpenMode.ForRead)as BlockTable;BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;for (int i = 0; i < cirs.Count; i++) {DBText txt= new DBText();txt.Position = cirs[i].Center;txt.VerticalMode = TextVerticalMode.TextVerticalMid;txt.HorizontalMode = TextHorizontalMode.TextMid;txt.AlignmentPoint = cirs[i].Center;txt.TextString=(i+1).ToString();txt.Height = 50;txt.ColorIndex = 2;btr.AppendEntity(txt);tr.AddNewlyCreatedDBObject(txt, true);}tr.Commit();}
}

 

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

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

相关文章

RK3288 android7.1 适配 ilitek i2c接口TP

一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…

DICOM图像知识:DICOM图像排序与坐标系解析

目录 引言 1. 概述 2. DICOM图像排序规则 2.1 Patient的Study按Study Date排序 2.2 Study的Series按Series Number排序 2.3 Series的SOP按Instance Number或Slice Location排序 2.3.1 Instance Number排序 2.3.2 Slice Location排序 2.3.3 使用Image Position (Patien…

Js — 定时器

有两种&#xff1a;setInterval 和 setTimeout 间隔时间单位为毫秒 setInterval 每隔指定的毫秒数重复执行一个函数或代码 开启定时器&#xff1a;setInterval(函数&#xff0c;间隔时间) 作用&#xff1a;每隔一段时间调用这个函数 注意&#xff1a;它不是立即执行&#x…

其他教程:如何设计一个App扫码登录功能,来实现免账号密码登录功能,仅供参考

–本次教程是给大家列举一下常见的扫码登录功能&#xff0c;小程序或app均可参考&#xff0c;如需更安全的模式可多次设计加工&#xff0c;本次只列举概念层面的实现方式

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

AWTK-HarmonyOS NEXT 发布

AWTK 全称为 Toolkit AnyWhere&#xff0c;是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎&#xff0c;支持跨平台同步开发&#xff0c;一次编程&#xff0c;到处编译&#xff0c;跨平台使…

【开发】Java的内存溢出

Java之内存溢出 Java之内存溢出 | OutOfMemoryError 我们都知道&#xff0c;在Java的世界里&#xff0c;由JVM管理着Java中的“垃圾对象”&#xff0c;也就是不被引用的对象&#xff1b;当一个对象不被其它对象引用的时候&#xff0c;该对象就会被垃圾回收器清理掉。但是在某些…

EasyExcel的AbstractColumnWidthStyleStrategy注入CellStyle不生效

设置背景色 CellStyle style workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex()); // 是设置前景色不是背景色style.setFillPattern(FillPatternType.SOLID_FOREGROUND)EasyExcel.writerTable(0).head(Head1.class).registerWriteHandl…

【51单片机】LED点阵屏 原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LED点阵屏显示原理74HC595 编码LED点阵屏显示笑脸LED点阵屏显示动画 LED点阵屏 点阵屏在开发板的右上角&#xff0c;注意使用前需要…

深度学习-张量相关

一. 张量的创建 张量简介 张量是pytorch的基本数据结构 张量&#xff0c;英文为Tensor&#xff0c;是机器学习的基本构建模块&#xff0c;是以数字方式表示数据的形式。 例如&#xff0c;图像可以表示为形状为 [3, 224, 224] 的张量&#xff0c;这意味着 [colour_channels, h…

使用vite构建一个react网站,并部署到Netlify上

这篇教程中&#xff0c;我会教你如何用vite快速构建一个react网站&#xff0c;并把网站免费部署到Netlify上&#xff0c;让别人可以经由网址访问你的react网站。 1. 使用vite构建基础框架 npm create vitelatestcd vite-project npm install npm run dev2. 网站内容设计 3. 构…

Fastify Swagger:自动化API文档生成与展示

在现代软件开发中&#xff0c;API文档的生成和维护是一个不可或缺的环节。Fastify Swagger 是一个专为 Fastify 框架设计的插件&#xff0c;它能够自动生成符合 Swagger&#xff08;OpenAPI v2 或 v3&#xff09;规范的文档&#xff0c;从而帮助开发者轻松创建和维护API文档。本…

【网络原理】万字详解 UDP 和 TCP

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. UDP1.1 UDP 报文格式1.1.1 源端口/目的端口1.1.2 报文长度1.1.3 校验和 2. TCP2.1 TCP 报文结构2.2 TCP 特…

Go 中的泛型,日常如何使用

泛型从 go 的 1.18 开始支持 什么是泛型编程 在泛型出现之前&#xff0c;如果需要计算两数之和&#xff0c;可能会这样写&#xff1a; func Add(a, b int) int {returb a b } 这个很简单&#xff0c;但是只能两个参数都是 int 类型的时候才能调用 如果想要计算两个浮点数…

IoTDB 与 HBase 对比详解:架构、功能与性能

五大方向&#xff0c;洞悉 IoTDB 与 HBase 的详尽对比&#xff01; 在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&#xff0c;开发者和决策者们需要选择…

单片机串口接收状态机STM32

单片机串口接收状态机stm32 前言 项目的芯片stm32转国产&#xff0c;国产芯片的串口DMA接收功能测试不通过&#xff0c;所以要由原本很容易配置的串口空闲中断触发DMA接收数据的方式转为串口逐字节接收的状态机接收数据 两种方式各有优劣&#xff0c;不过我的芯片已经主频跑…

词嵌入方法(Word Embedding)

词嵌入方法&#xff08;Word Embedding&#xff09; Word Embedding是NLP中的一种技术&#xff0c;通过将单词映射到一个空间向量来表示每个单词 ✨️常见的词嵌入方法&#xff1a; &#x1f31f;Word2Vec&#xff1a;由谷歌提出的方法&#xff0c;分为CBOW&#xff08;conti…

【go从零单排】实现枚举类型(Enum)

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在Go语言中&#xff0c;并没有内置的枚举类型&#xff08;Enum&#xff09;&…

Python爬虫如何处理验证码与登录

Python爬虫如何处理验证码与登录 Python 爬虫在抓取需要登录的网站数据时&#xff0c;通常会遇到两个主要问题&#xff1a;登录验证和验证码处理。这些机制是网站用来防止自动化程序过度抓取数据的主要手段。本文将详细讲解如何使用 Python 处理登录与验证码&#xff0c;以便进…

MOS管损坏原因

MOS管是什么&#xff1f; MOS管&#xff0c;全程就是MOSFET&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;&#xff0c;是一种场效应晶体管。‌ MOS管控制原理 MOS管的工作原理是通过栅极电压&#xff08;G&#xff09;来控制源极&#xff08…