7.兮♂贝 发表于 2013-7-30 11:20:15

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

本帖最后由 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();

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


liuxu042 发表于 2013-7-30 13:00:28

代码有些小问题,你要判断pline不为null
这个没什么难度,最基础的

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

tran.Commit();
这句不需要,里面没有修改实体

7.兮♂贝 发表于 2013-7-30 15:10:53

liuxu042 发表于 2013-7-30 13:00 static/image/common/back.gif
代码有些小问题,你要判断pline不为null
这个没什么难度,最基础的



非常感谢,受教了...

3xxx 发表于 2013-10-8 07:26:48

开始学习。

mycad 发表于 2014-7-31 08:04:00

学习,谢谢分享!
页: [1]
查看完整版本: C#通过ObjectID获得该实体对象、获取多线段各顶点坐标