各种排序分组

简易排序方法如下: 

  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,一经查实,立即删除!

相关文章

svgicon大小问题(简单记录

Prob.: reactts下用类似import XxxIcon from "../icons/xxx.svg语句之后使用< XxxICon >标签&#xff0c;不能直接用style指定大小 &#xff08;viewbox好像是有效的&#xff0c;height和width类似只改了画布大小&#xff0c;没缩放里面的path&#xff09; 过程: 前…

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…

Vector和ArrayList

Vector和ArrayList都是Java集合框架中的一部分&#xff0c;它们提供了动态数组的功能&#xff0c;但在实现和使用场景上存在一些差异。以下是对Vector和ArrayList的详细比较&#xff1a; 一、线程安全性 Vector&#xff1a; 是线程安全的。Vector类的所有方法都使用了synchron…

css多列布局用法

文章目录 CSS多列布局详解与代码案例一、CSS多列布局介绍特点 二、CSS多列布局的用法1. 列数和宽度控制2. 列间距和规则3. 跨列和分列内容4. 列宽度自动调整5. 垂直对齐 三、CSS多列布局的代码案例示例一&#xff1a;基础多列布局示例二&#xff1a;响应式多列布局 CSS多列布局…

Js — 定时器

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

【大数据测试spark+kafka-详细教程(附带实例)】

大数据测试&#xff1a;Spark Kafka 实时数据处理与窗口计算教程 1. 概述1.1 大数据技术概述1.2 Apache Kafka 与 Spark 的结合 2. 技术原理与流程2.1 Kafka 简介2.2 Spark Streaming 简介2.3 数据流动与处理流程 3. 环境配置3.1 安装依赖项 4. 实例&#xff1a;实时数据处理与…

其他教程:如何设计一个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;跨平台使…

CSRF详解

CSRF&#xff0c;全称是Cross-Site Request Forgery&#xff0c;即跨站请求伪造&#xff0c;也被称为“one click attack”或者session riding&#xff0c;是一种网络攻击方式。它允许攻击者诱导用户在已登录的Web应用程序上执行非预期的操作。 工作原理CSRF攻击通常涉及三个主…

JSON格式

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人和机器阅读和解析。它基于JavaScript的对象表示法&#xff0c;但被广泛用于多种编程语言。 JSON中的数据类型 字符串&#xff08;String&#xff09;&#xff1a;用双引…

【开发】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;注意使用前需要…

算法求解-最大和子序列问题(C#)

1、算法目标&#xff1a; 题目描述 设数组a是有n个元素的整数数组&#xff0c;如何从中找出最大和子序列的和&#xff1f; 输入 第一行输入n 第二行输入n个数 输出 输出最大和子序列的和 样例输入 4 2 -1 3 -4 样例输出 4 2、算法实现&#xff1a; using System;class Progr…

深度学习-张量相关

一. 张量的创建 张量简介 张量是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 特…