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

[CommandMethod("aa", CommandFlags.UsePickSet)]
        public void aa()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            // PromptSelectionOptions opt = new PromptSelectionOptions("\n请选择点名和点的牵引线");
            PromptSelectionResult psr = ed.GetSelection();
            if (psr.Status != PromptStatus.OK) return;
            SelectionSet ss = psr.Value;
            if (ss.Count != 2) { ed.WriteMessage("请选择 点名 和 点的牵引线"); return; }
            string pointname = "";
            string pointtype = "";
            Point3d pout = new Point3d();
            Polyline pointpl = new Polyline();
            Point3dCollection points = new Point3dCollection();
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                foreach (ObjectId id in ss.GetObjectIds())
                {
                    DBText text = trans.GetObject(id, OpenMode.ForRead) as DBText;
                    if (text != null) pointname = text.TextString;
                    Polyline pl = trans.GetObject(id, OpenMode.ForRead) as Polyline;
                    if (pl != null)
                    {
                        pointpl = pl;
                        for (int i = 0; i < pl.NumberOfVertices; i++)
                        {
                            points.Add(pl.GetPoint3dAt(i));
                        }
                    }

                }
                trans.Commit();
            }
            if (points.Count != 3) { ed.WriteMessage("请确保点的牵引线正确,是否仅有3个节点"); }
            if (points[0].Y == points[1].Y) { pout = points[2]; }

            if (points[0].Y == points[2].Y) { pout = points[1]; }

            if (points[1].Y == points[2].Y) { pout = points[0]; }
            else { ed.WriteMessage("请确保点的引线有一端水平"); return; }
            ///////导出点类型
            PromptKeywordOptions pkey = new PromptKeywordOptions("\n请选择点类型[弯头(1)/阀门(2)/直线点(3)/三通(4)/变颈(5)/上下翻(6)/其他(7)]<1>");
            pkey.Keywords.Add("1");
            pkey.Keywords.Add("2");
            pkey.Keywords.Add("3");
            pkey.Keywords.Add("4");
            pkey.Keywords.Add("5");
            pkey.Keywords.Add("6");
            pkey.Keywords.Add("7");
            pkey.Keywords.Default = "1";
            pkey.AppendKeywordsToMessage = false;
            here:
            PromptResult pr = ed.GetKeywords(pkey);
            //ed.WriteMessage("输入关键字"+pr.StringResult);

                switch (pr.StringResult)
                {
                    case "1":
                        pointtype = "弯头";
                        //ed.WriteMessage("hhhhhhhhhhhhhhhhhhhhhhh");
                        ed.WriteMessage("\n您选择的点类型为:"+pointtype);
                        break;
                    case "2":
                        pointtype = "阀门";
                        ed.WriteMessage("\n您选择的点类型为:" + pointtype);
                        break;
                    case "3":
                        pointtype = "直线点";
                        ed.WriteMessage("\n您选择的点类型为:" + pointtype);
                        break;
                    case "4":
                        pointtype = "三通";
                        ed.WriteMessage("\n您选择的点类型为:" + pointtype);
                        break;
                    case "5":
                        pointtype = "变径";
                        ed.WriteMessage("\n您选择的点类型为:" + pointtype);
                        break;
                    case "6":
                        pointtype = "上下翻";
                        ed.WriteMessage("\n您选择的点类型为:" + pointtype);
                        break;
                    case "7":
                        ed.WriteMessage("\n您选择的点类型为:空值");
                        break;
                    default:

                        ed.WriteMessage("\n输入了无效关键字,请重新输入:");
                      //  break;
                     goto here;

            }
            //ed.WriteMessage(pointtype);
            //////结果的输出///////////////
            string path = "D:\\新输出点.csv";
            FileStream fs = new FileStream(path, FileMode.Append);
            StreamWriter sw = new StreamWriter(fs,Encoding.GetEncoding("gb2312"));
            sw.WriteLine(pointname + "," + pout.X.ToString() + "," + pout.Y.ToString() + "," + pointtype);
            sw.Close();
            fs.Close();

学习点:

1、文本的输出,转码

2、用户互交,关键字的使用

3、疑问点,明明没有用pickfirst,为什么也有pickkfirst的效果????

时间: 2024-07-30 20:32:09

CAD.net 二次开发--输出点名和点坐标,点类型的相关文章

基于C#编程语言的CAD二次开发技术---展测量点坐标

一.引言       AutoCAD 是目前世界上功能最强大的绘图软件.在测绘行业,使用 AutoCAD 直接绘图,或用以 AutoCAD 为平台开发出的各种绘图软件来绘图,大大提高了绘图的精度.准度和速度.今天介绍一下如何用C#编写将野外测量点坐标展入到 AutoCAD 的.NET程序集. 二.知识准备      1.了解dat坐标文件的格式,本次以常用格式 “ 点名,编码,东坐标,北坐标,高程 ”  为例.      2.文件读取,字符串处理      3.AutoCAD .NET 开发基础

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

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

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(); Li

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

NX二次开发-NXOpen中Point3d类型转换成point类型

1 NX9+VS2012 2 3 #include <NXOpen/NXObject.hxx> 4 #include <NXOpen/Part.hxx> 5 #include <NXOpen/PartCollection.hxx> 6 #include <NXOpen/Point.hxx> 7 #include <NXOpen/PointCollection.hxx> 8 9 NXOpen::Session *theSession = NXOpe

Revit二次开发 屏蔽复制构件产生的重复类型提示窗

做了很久码农,也没个写博客的习惯,这次开始第一次写博客. 这个问题也是折腾了我接近一天时间,网上也没有任何的相关博文,于是决定分享一下,以供同样拥有此问题的小伙伴们参考. 内容源于目前在做的一个项目,已经封好的功能里,在生成构件时,会产生以 下弹窗. 原以为是前辈留下的信息提示,没想到是revit自带的信息提示,起因是在搜索构件时会查找当前文档的构件,查找到之后仅进行复制操作,于是就涉及到调用ElementTransformUtils.CopyElements()这个函数. API如下: 其中最

spss C# 二次开发 学习笔记(六)——Spss统计结果的输出

Spss的二次开发可以很简单,实例化一个对象,然后启用服务,接着提交命令,最后停止服务. 其中重点为提交命令,针对各种统计功能需求,以及被统计分析的数据内容等,命令的内容可以很复杂,但也可以简单的为一个字符串.命令的获取,可以类似于Office录制宏一样,操作的过程中,Spss输出应用程序会记录命令内容,然后可以参考命令语法手册,去完善命令内容. 而获取输出结果,即获取统计的图.表等内容,功能很强大,当然起初操作起来也有些不可思议.它不是常规的进行统计,然后执行输出命令获取输出结果.Spss的输

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,比市面上的任何软