net调用cad内置命令 及 通过句柄取得图元
www.dimcax.com
net调用cad内置命令 及 通过句柄取得图元
/*师兄 qq 361865648 namespace classlibrary { /// /// summary description for class. /// public class class { enum ads:int { rtnorm=5100, rtnone=5000, rtreal=5001, rtpoint=5002, rtshort=5003, rtang=5004, rtstr= 5005, rtename=5006, rtpicks=5007, rtorint= 5008, rt3dpoint= 5009, rtlong = 5010, rtvoid = 5014, rtlb = 5016, rtle = 5017, rtdote = 5018, rtnil = 5019, rtdxf0 = 5020, rtt = 5021, rtresbuf = 5023, rtmodeless= 5027 , rterror = -5001, rtcan = -5002, rtrej = -5003, rtfail = -5004, rtkword =-5005, rtinputtruncated =-5008 } public static editor ed; public static database db; public class() { // // todo: add constructor logic here // } [dllimport("acad.exe",entrypoint ="acedcmd")] private static extern int acedcmd(intptr buf); [dllimport("acad.exe",entrypoint ="acedcommand")] private static extern int acedcommand(resultbuffer regs); [dllimport("acdb16.dll", charset = charset.ansi)] private static extern int acdbhandent(string handle,long[] ent); /*师兄 qq 361865648 // 定义命令名 static public void test() // this method can have any name { // put your command code here //构建链表 typedvalue[] vals={new typedvalue((int)ads.rtstr,"zoom"),new typedvalue((int)ads.rtstr,"all"),new typedvalue((int)ads.rtstr,"")}; resultbuffer bf=new resultbuffer(vals); typedvalue vl=new typedvalue((int)ads.rtnone,0); int rc=acedcmd(bf.unmanagedobject);//调用 if(rc!=(int)ads.rtnorm) return;//调用成功? ed=application.documentmanager.mdiactivedocument.editor; db=ed.document.database; aced.promptentityresult rs=ed.getentity("\n选择对象: "); if (rs.status!=promptstatus.ok) return;//选择了有效对象? long[] ename=new long[]{0,0};//图元名在c#为long数组 string hand=system.convert.tostring(rs.objectid.handle.value,16);//转成16位整数 ed.writemessage("\n图元句柄:"+hand);//在命令行显示句柄 rc=acdbhandent(hand,ename);//取得图元名即c#中的objectid if(rc!=(int)ads.rtnorm) return;//调用成功? objectid id=new objectid((int)ename[0]);//转换 transaction tr = db.transactionmanager.starttransaction(); using (tr) { entity ent = (entity)tr.getobject(id, openmode.forread); ed.writemessage("\n图元类型: "+ent.getrxclass().dxfname.tostring()); } tr.dispose(); return; } } } [
下载次数:51
好东西,不是每个人都能懂的
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
关键是c++,是好东西俺也不懂!
vb c# vlisp autocad gis
贴源程序哈~一般人都很懒下载呵呵顶起!
c#的源码,不是c++
自已顶
我也顶一下
我顶!支持……
路漫漫其修远兮,吾将上下而求索!
1