![]() |
【转帖】[kean]使用.net获取一个层上的所有实体 - 精华帖集合
[kean]使用.net获取一个层上的所有实体 - 精华帖集合
www.dimcax.com [kean]使用.net获取一个层上的所有实体 using autodesk.autocad.applicationservices; using autodesk.autocad.runtime; using autodesk.autocad.databaseservices; using autodesk.autocad.editorinput; namespace entityselection { public class commands { [commandmethod("eol")] static public void entitiesonlayer() { document doc = application.documentmanager.mdiactivedocument; editor ed = doc.editor; promptresult pr = ed.getstring("\nenter name of layer: "); if (pr.status == promptstatus.ok) { objectidcollection ents = getentitiesonlayer(pr.stringresult); ed.writemessage( "\nfound {0} entit{1} on layer {2}", ents.count, (ents.count == 1 ? "y" : "ies"), pr.stringresult ); } } private static objectidcollection getentitiesonlayer(string layername) { document doc = application.documentmanager.mdiactivedocument; editor ed = doc.editor; // build a filter list so that only entities // on the specified layer are selected typedvalue[] tvs = new typedvalue[1] { new typedvalue( (int)dxfcode.layername, layername ) }; selectionfilter sf = new selectionfilter(tvs); promptselectionresult psr = ed.selectall(sf); if (psr.status == promptstatus.ok) return new objectidcollection( psr.value.getobjectids() ); else return new objectidcollection(); } } } 我是菜鸟,刚开始学习c#,不知道我下面的这个和上面的有什么区别?感觉弄得挺复杂的。 // 访问autocad程序对象。 using autodesk.autocad.applicationservices; // 访问 the autocad 编辑器。 using autodesk.autocad.editorinput; // 命令注册。 using autodesk.autocad.runtime; // 访问数据库对象。 using autodesk.autocad.databaseservices; namespace entityselection { public class commands { [commandmethod("selectonlayer")] static public void selectent() { editor ed = application.documentmanager.mdiactivedocument.editor; promptresult pr = ed.getstring("\n请输入图层名称: "); if (pr.status == promptstatus.ok) { typedvalue[] fillist = new typedvalue[1]; fillist[0] = new typedvalue((int)dxfcode.layername, pr.stringresult); selectionfilter filter = new selectionfilter(fillist); promptselectionresult ssres = ed.selectall(filter); if (ssres.status == promptstatus.ok) { selectionset ss = ssres.value; int ncount = ss.count; ed.writemessage("在{0}层上找到{1}个实体", pr.stringresult, ncount); } } } } } 复制代码 [ ] kean的代码和你的代码完成的功能是一样的,但kean的代码写的更加规范些,主要的东西写成了一个函数,便于将来使用。 c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。 但是我还是有点儿不太理解,既然内部已经存在这样的功能,为什么还要自己重新写呢?可能他写的目的只是探讨一种方法。 |
所有的时间均为北京时间。 现在的时间是 12:28 PM. |