![]() |
【转帖】c#取得多段线中圆弧中点坐标 - 精华帖集合
c#取得多段线中圆弧中点坐标 - 精华帖集合
www.dimcax.com c#取得多段线中圆弧中点坐标 其实很简单的,但是不懂所以弄了好久才出来!现在贴出来和菜鸟们交流,高手请指教 c#取得多段线中圆弧中点坐标 搞了好久才弄明白怎么取得多段线中点的坐标值,以下是代码,和大家交流一下!其实还有更好的方法,我也是写出这段代码之后才在高手指导下知道第二种方法的,也一起贴出来。 using system; using autodesk.autocad.runtime; using autodesk.autocad.databaseservices; using autodesk.autocad.geometry; using autodesk.autocad.graphicsinterface; using autodesk.autocad.editorinput; using autodesk.autocad.applicationservices; [assembly: extensionapplication(typeof(classlibrary.lab8class))] [assembly: commandclass(typeof(classlibrary.lab8class))] namespace classlibrary { public class lab8class:iextensionapplication { public void initialize() { autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.editor.writemessage("\n调试程序命令lv");//初始化操作 } public void terminate() { //清除操作 } public lab8class() { // // todo: add constructor logic here // } editor ed = application.documentmanager.mdiactivedocument.editor; database db = autodesk.autocad.databaseservices.hostapplicationservices.workingdatabase; autodesk.autocad.databaseservices.transactionmanager tm = autodesk.autocad.databaseservices.hostapplicationservices.workingdatabase.transactionmanager; // define command "asdkcmd1" [commandmethod("lv")] public void getplpoint() // this method can have any name { try { transaction trans=tm.starttransaction(); // blocktablerecord btr; // blocktable bt; using(trans) { promptentityresult per = ed.getentity("请选择多段线"); if(per.status == promptstatus.ok) { dbobject obj = trans.getobject(per.objectid, openmode.forread); { polyline pl = obj as polyline; int vn = pl.numberofvertices; for(int i = 0; i<= vn; i++) { point3d pt3d = pl.getpoint3dat(i-1); double vbulge = pl.getbulgeat(i); if(vbulge != 0) { //方法一,比较笨的方法。 double len0 = pl.getdistatpoint(pl.getpoint3dat(i)); double len1 = pl.getdistatpoint(pl.getpoint3dat(i+1)); double midlen = (len0 + len1)/2; ed.writemessage("\n第二种方法计算的圆弧中点是:" + midp3d.tostring()); //方法二,但是速度比较慢好像,因为如果加上下面的代码,运行速度明显慢,前面是感觉不出来的,后面的要停顿一下,可能有异常 point3d midl = pl.getpointatparameter(i+0.5); ed.writemessage("\n第二种方法计算的圆弧中点是:" + midl.tostring()); } } } } trans.commit(); trans.dispose(); } } catch{} finally { } } } } 复制代码 很好,已经加精了。 c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。 getpointatparameter这个好用哦。。。楼主提供这么好的代码。。。 感谢楼主的分享 |
所有的时间均为北京时间。 现在的时间是 04:14 AM. |