CAD.net二次开发--找到与制定点最近的2个实体

public static class Class2
    {
        public static ObjectId[] fun(Point3d point)
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            Point3dCollection points = new Point3dCollection();
            List<string> wenben = new List<string>();
            List<double> distance = new List<double>();
            ObjectId[] s = new ObjectId[2];
            ObjectIdCollection textids = new ObjectIdCollection();
            TypedValue[] values = new TypedValue[]
            {
                new TypedValue((int)DxfCode.LayerName,"TK"),
                new TypedValue((int)DxfCode.Start,"TEXT")
            };
            SelectionFilter selfilter = new SelectionFilter(values);
            PromptSelectionResult psr = ed.SelectAll(selfilter);
            if (psr.Status == PromptStatus.OK)
            {
                SelectionSet ss = psr.Value;
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    foreach (ObjectId id in ss.GetObjectIds())
                    {
                        DBText mytext = trans.GetObject(id, OpenMode.ForRead) as DBText;
                        if (mytext != null)
                        {
                            points.Add(mytext.Position);
                            wenben.Add(mytext.TextString);
                            // mytext.TextString = "";
                            textids.Add(id);
                            distance.Add(point.DistanceTo(mytext.Position));
                        }
                    }
                    trans.Commit();
                }
            }
            else { ed.WriteMessage("错误"); return s; }
            ////冒泡
            double temp = 0; string wenbentemp = "";
            ObjectId tempid = new ObjectId();
            for (int i = distance.Count; i > 0; i--)
            {

                for (int j = 0; j < i - 1; j++)
                {

                    if (distance[j] > distance[j + 1])
                    {

                        temp = distance[j]; wenbentemp = wenben[j]; tempid = textids[j];

                        distance[j] = distance[j + 1]; wenben[j] = wenben[j + 1]; textids[j] = textids[j + 1];

                        distance[j + 1] = temp; wenben[j + 1] = wenbentemp; textids[j + 1] = tempid;

                    }

                }

            }
            /////冒泡结束
            s[0] = textids[0];
            s[1] = textids[1];
            return s;
        }
    }

学习点:找到与制定点最近的2个实体的ID;冒泡排序,选择集;以及基本的CAD二次开发过程

时间: 2024-08-10 21:29:29

CAD.net二次开发--找到与制定点最近的2个实体的相关文章

C++ CAD Arx二次开发用户交互

展开一.本节课程Arx二次开发用户交互二.本节要讲解的知识点1.用户交互的一些函数:acedGetXXX(acedGetString.acedGetPoint.acedGetInt acedGetKword.acedGetReal). 2.动态创建多段线的实现. 3.acedGetPoint函数中使用关键字. 三.具体内容1.acedGetString:获取用户输入的字符串 acedGetPoint:获取用户输入的点 acedGetInt:获取用户输入的整型 acedGetKword:获取用户输

CAD.net二次开发--自动调成图框位置

[CommandMethod("mm")] public void mm() { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; TypedValue[] values = new TypedValue[] { new TypedValue((int)DxfCode.LayerName,&quo

CAD.net 二次开发--输出点名和点坐标,点类型

[CommandMethod("aa", CommandFlags.UsePickSet)] public void aa() { Database db = HostApplicationServices.WorkingDatabase; Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = Application.DocumentManager.MdiActiveDocument.Edit

C#进行CAD二次开发环境配置

最近被公司分配到了做CAD二次开发.也是初次接触这方面的东西,其实是有些无从下手的感觉.因为公司这边也没有人有时间带我,只能是自己看书,然后再写一些Demo,再结合实际的应用来一点点的学习.废话不多说,推荐一本我入门的书籍,就是李冠亿先生的<深居浅出AutoCAD二次开发>,写的非常不错,把这本书中的Demo自己手写一遍大概就能知道CAD二次开发到底是个什么东西了. 开发环境配置 开发环境 Win10 x64 CAD 2010 Visual Studio 2012 环境配置 首先要安装CAD软

CAD二次开发控件,dwg控件,网页DWG控件,手机浏览编辑DWG控件

梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完成,经过多年的累积已经非常稳定可靠,功能完善.有关键的空间搜索算法,并使用汇编优化,可以处理50万级实体,图形的显示和处理效率比同类产品高出很多. 梦想绘图3d插件6.0(MxDraw6.03d),使用二维控件的显示核心,基于 OpenCASCADE 几何造型引擎, 创建锥.柱.环等基本几何体, 对

手机,平板当中浏览和编辑DWG的CAD控件出来啦!支持ARX二次开发

控件2014.06.30 安卓开发最新更新 发布时间:2014-06-30 22:22:42 开发包下载地址:http://www.mxdraw.com/MxDraw6.0Android(20140630)TryVersion.exe 安卓手机上的apk安装包: http://www.mxdraw.com/MxDrawApp60.apk 安卓快速入门文档: http://www.mxdraw.com/AndroidDev.doc 1. 优化dwg显示速度,现在可以极速显示dwg,比市面上的任何软

CAD二次开发中浮动面板不浮动的问题

CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides,这样就好了. ps = new PaletteSet("PSCollectPart"); ps.Style = PaletteSetStyles.NameEditable | PaletteSetStyles.ShowPropertiesMenu | PaletteSetStyles.S

AutoCAD二次开发&mdash;&mdash;AutoCAD.NET API开发环境搭建

AutoCAD二次开发--AutoCAD.NET API开发环境搭建 AutoCAD二次开发--AutoCAD.NET API开发环境搭建 AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(COM),1997年VBA,1998年Visual Lisp,2006年.net API(DLL). 趋势和方向:AutoCAD.net API(AutoCAD20

.NET AutoCAD二次开发之路(一、直线篇)

我以前只有一点VB的基础,C语言也只是看过,学这个CAD二次开发,也是借工作之余研究下,我到现在已经从事机械行业5年了,中国的工业设计环境区别太大,各行各业的技术现状也不尽相同,但有一点是可以肯定的,那就是自动化,国外都在工业4.0了,我们还在互联网+,哎太out了,我也赶紧进修下,要不就淘汰了.所以我选择了CAD二次开发,主要还是跟专业接近,希望能越学越精吧,未来就让未来的我去面对! 今天主要总结下直线的创建,要想能在CAD中生成直线或者其他图形,都必须遵循几个步骤,那就是: 1.获取当前图形