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

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

下面的实例实现内容:提示用户选择一个多线段实体,然后读取该多线段实体的属性、获取多线段顶点坐标
            //需要访问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..Runtime.Exception e)
            {
                Application.ShowAlertDialog(e.Message);
            }
            dlock.Dispose();
分享了...希望对后来者有用处!

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

代码有些小问题,你要判断pline不为null
这个没什么难度,最基础的
string isclosed = pline.Closed.ToString();//多线段是否闭合
这句干什么?
tran.Commit();
这句不需要,里面没有修改实体

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


非常感谢,受教了...

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

开始学习。

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

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