明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4730|回复: 4

[基础] C#通过ObjectID获得该实体对象、获取多线段各顶点坐标

  [复制链接]
发表于 2013-7-30 11:20:15 | 显示全部楼层 |阅读模式
本帖最后由 7.兮♂贝 于 2013-7-30 16:11 编辑

下面的实例实现内容:提示用户选择一个多线段实体,然后读取该多线段实体的属性、获取多线段顶点坐标

            //需要访问Database的操作 需首先将该文档进行锁定,操作完成后,在最后进行释放
            DocumentLock dlock = Application.DocumentManager.MdiActiveDocument.LockDocument();
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            Database db=HostApplicationServices.WorkingDatabase;

            try
            {
                using (Transaction tran = db.TransactionManager.StartTransaction())
                {
                    //选择多线段实体
                    PromptEntityOptions EntityOpts = new PromptEntityOptions("请选择一个多线段实体:");
                    PromptEntityResult EntityResult = ed.GetEntity(EntityOpts);
                    //判断是否选择成功
                    if (EntityResult.Status == PromptStatus.OK)
                    {
                        //实体类型,可以进行判断是不是Polyline                        //Entity ent =(Entity)tran.GetObject(EntityResult.ObjectId, OpenMode.ForRead);
                        //Application.ShowAlertDialog(ent.GetType().ToString());

                        //得到该实体
                        Polyline pline = (Polyline)tran.GetObject(EntityResult.ObjectId, OpenMode.ForRead);
                        //多线段是否闭合 pline.Closed
                        //多线段起始点 pline.StartPoint
                        //多线段结束点 pline.EndPoint
                        //多线段的顶点数
                        int VNumber=pline.NumberOfVertices;
                        Point2d pnt;
                        //多线段各顶点坐标
                        for(int i=0;i<VNumber;i++)
                        {
                            pnt=pline.GetPoint2dAt(i);
                            ed.WriteMessage("\n"+pnt.ToString());
                        }
                    }
                    tran.Commit();
                }
            }
            catch(Autodesk.AutoCAD.Runtime.Exception e)
            {
                Application.ShowAlertDialog(e.Message);
            }
            dlock.Dispose();

分享了...希望对后来者有用处!


发表于 2013-7-30 13:00:28 | 显示全部楼层
代码有些小问题,你要判断pline不为null
这个没什么难度,最基础的

string isclosed = pline.Closed.ToString();//多线段是否闭合
这句干什么?

tran.Commit();
这句不需要,里面没有修改实体
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2013-7-30 15:10:53 | 显示全部楼层
liuxu042 发表于 2013-7-30 13:00
代码有些小问题,你要判断pline不为null
这个没什么难度,最基础的

非常感谢,受教了...
发表于 2013-10-8 07:26:48 | 显示全部楼层
开始学习。
发表于 2014-7-31 08:04:00 | 显示全部楼层
学习,谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:00 , Processed in 0.152719 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表