首页 > 编程语言 >一键打断线(根据相交点打断)——CAD c# 二次开发

一键打断线(根据相交点打断)——CAD c# 二次开发

时间:2024-12-25 18:26:08浏览次数:13  
标签:c# List lines1 item Add 打断 二次开发 line Curve

多条相交线根据交点一键打断,如下图:

 部分代码如下:

finally

namespace IFoxDemo;
public class Class1
{
    [CommandMethod("ddx")]
    public static void Demo()
    {
       //"ifox可以了".Print();
        Database db = HostApplicationServices.WorkingDatabase;
        Editor ed = Env.Editor;
        try
        {

            if (!db.GetEntities(out List<Curve> curve, "请选择需要打断的线:")) return;
           // List<Curve> lines = new List<Curve>();
            List<Curve> lines1 = new List<Curve>();
            foreach (var item in curve)//多段线炸开成线段
            {
                if (item is Polyline pl)
                {
                    List<Curve> cus = ed.ExplodePolyLine(pl);
                    foreach (var cu in cus)
                    {
                        if (cu is Curve) lines1.Add(cu as Curve);
                    }
                }
                else if (item is Curve)
                {
                    if (item is Ellipse) return;
                    lines1.Add(item as Curve);
                }
            }
            //lines1.ForEach(line => line.ColorIndex = 1);
            //foreach (var item in lines1)
            //{
            //    db.AddEntityToModeSpace(item);
            //}

            return;
            Dictionary<Curve, List<Point3d>> pointsOnLine = new Dictionary<Curve, List<Point3d>>();
            foreach (var item in lines1)//创建线和对应点组成的字典
            {
                pointsOnLine.Add(item, new List<Point3d>());
            }
            for (int i = 0; i < lines1.Count -1; i++)
            {
                for (int j = i + 1; j < lines1.Count; j++)
                {
                    Point3dCollection pos = new Point3dCollection();//创建点集合
                    lines1[i].IntersectWith(lines1[j], Intersect.OnBothOperands, pos, IntPtr.Zero, IntPtr.Zero);
                    if (pos.Count > 0)
                    {
                        foreach (Point3d item in pos)
                        {
                            pointsOnLine[lines1[i]].Add(item);
                            pointsOnLine[lines1[j]].Add(item);//获取线段交点的坐标存入字典
                        }
                    }
                }
            }
            lines1.Clear();
            foreach (var item in pointsOnLine)//清理线
            {
                Curve line = item.Key;
                List<Point3d> points = item.Value;
                if (points.Count == 0)
                {
                    lines1.Add(line);
                }
                else
                {
                    if (points.Count > 0)
                    {
                        points = points.OrderBy(x => line.GetParameterAtPoint(x)).ToList();//点排序
                        Point3dCollection pos = new Point3dCollection();
                        points.ForEach(x => pos.Add(x));//点集合加点
                        DBObjectCollection dbs = line.GetSplitCurves(pos);//线上有多个点,按顺序打断线
                        foreach (var dbobject in dbs)
                        {
                            if (dbobject is Curve) lines1.Add(dbobject as Curve);//一个line被他上面的点打成多个line后加入列表
                        }
                    }
                }
            }
            db.AddEntityToModeSpace(lines1.ToArray());

            db.Erase(curve);
        }
        catch (Exception ex)
        {
        }
     

    }
}

 

 插件联系↓↓↓

标签:c#,List,lines1,item,Add,打断,二次开发,line,Curve
From: https://blog.csdn.net/yongshiqq/article/details/144695588

相关文章

  • [ARC127D] Sum of Min of Xor Solution
    题意给定两个长度为\(n\)的数组\(a,b\),求\[\sum_{i=1}^n\sum_{j=i+1}^n\min\{a_i\oplusa_j,b_i\oplusb_j\}\]其中\(\oplus\)表示按位异或。分析简单二进制分治题(看代码可能更好理解)。先将有序对转成无序对,最后答案为结果的一半。考虑去除\(\min\),于是拆位计算贡献......
  • Linux红旗系统下修改oracle11实例名
    原数据库实例名称为:orcl 修改为 project1.查询当前设置的实例名切换到Oracle用户下su-oracle(1)查询配置的实例名称echo${ORACLE_SID}(2)查询数据库中的实例名称sqlplus/nologsql>conn/assysdbasql>selectinstancefromv$thread;2.关闭数据服务(1)关......
  • 稀疏矩阵数据结构(如CSR、CSC格式)
    稀疏矩阵数据结构稀疏矩阵(SparseMatrix)是一种大多数元素为零的矩阵。在处理稀疏矩阵时,如果我们直接使用常规的二维数组来存储矩阵数据,将会浪费大量的存储空间,因为大部分元素都是零。为了解决这一问题,稀疏矩阵数据结构应运而生,通过只存储非零元素来大幅减少内存消耗。最常用的稀......
  • 【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7802969.html?templateId=1718516问题现象某客户在使用触发器将varchar(4000char)列的数据从表A复制到表B时,表B上列的数据与A上对应列的数据不同且为乱码。如下截图为A的数据及使用触发器复制到B的数......
  • 01Thingsboard中actor和RuleEngine的启动流程
    一、基本关系1、单体服务2、微服务3、创建流程Reference二、DefaultActorServiceDefaultActorService是整个规则引擎的初始化入口。DefaultActorService会初始化一个使用actor模型的规则引擎,共分为2步:①创建actorSystem;②处理应用初始化完成事件1、创建actorSystem......
  • 如何进行Converge许可分析
    随着企业规模的扩大和团队协作的复杂性增加,Converge许可分析成为了保障企业数据安全和提高协作效率的重要工具。通过进行深入的许可分析,企业可以了解其许可策略的实施情况,识别潜在风险,并优化策略以满足业务需求。本文将为您介绍如何进行Converge许可分析的关键步骤,帮助您轻松实现......
  • 发那科机器人R2000iC齿轮箱维修方法步骤归纳
    一、发那科机器人R2000iC齿轮箱常见故障类型及原因齿轮磨损:长时间的重载工作或润滑不良可能导致齿轮磨损,表现为噪音增大、振动加剧等。轴承故障:轴承承受了齿轮箱的径向和轴向载荷,其故障可能导致齿轮箱运转不平稳、温度升高。密封失效:发那科机器人R2000iC齿轮箱密封件的老化或损......
  • Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量
    引言容器技术的发展离不开Docker和Kubernetes的深度合作。Docker推动了容器化技术的普及,而Kubernetes则为大规模容器编排和自动化管理提供了强有力的支持。然而,随着Kubernetes逐步发展,尤其是在容器运行时(ContainerRuntime)方面的需求发生变化,Kubernetes在1.20版本中......
  • Application run failed .ParserException: while parsing a block mapping in 'reade
    [root@ecm-8cc1logs]#tail-f-n1000sys-error.log17:26:46.060[main]ERRORo.s.b.SpringApplication-[reportFailure,870]-Applicationrunfailedorg.yaml.snakeyaml.parser.ParserException:whileparsingablockmappingin'reader',line2,col......
  • jExcel-类似Excel的jquery电子表格插件
    jexcel.js是一款轻量级的类似Excel的jquery电子表格插件。你可以同js数组、json数据或CSV文件来为jexcel表格提供数据,你甚至可以直接从一个Excel表格中直接复制粘贴数据到jexcel表格中。在线预览  下载  使用方法在页面中引入jquery、jquery.jexcel.js和jquery.jexcel.c......