蔡鸟求助!!!!
在cad上画条直线,利用arx输入一个命令,提取这条支线的坐标生成一个新文件,那位大哥能给个思路啊 <P>这个问题比较麻烦,问题的关键是如何检索连表.</P><P> </P>
回复
<P>简单来说就是:<BR>1.让用户选取一条直线或者PICKFIRST<BR>2.获取直线的信息<BR>3.保存到文件</P><P>下面是简单的代码,在autoCAD 2004平台下通过,你可以加入自己的部分:</P>
<P> static void Line2File(void)<BR> {<BR> ads_name ssname,en;<BR> char name="LINE";<BR> resbuf rb;<BR> rb.restype=0;<BR> rb.resval.rstring=name;<BR> rb.rbnext=NULL;//只选择直线,即dxf0="LINE"<BR> acedSSGet("I",NULL,NULL,&rb,ssname);//寻找PICKFIRST集,关于acedSSGet的用法,请查SDK,如果你有一些LISP的基础会很简单的!<BR> long len;<BR> acedSSLength(ssname,&len);//得到选集大小<BR> while(len==0)//如果为0<BR> {<BR> acedSSFree(ssname);//取消选集<BR> acedSSGet(NULL,NULL,NULL,&rb,ssname);//让用户选择<BR> acedSSLength(ssname,&len);<BR> }<BR> acedSSName(ssname,0,en);//得到选集的第一个ads_name<BR> acedSSFree(ssname);//取消选集!注意,不要忘了取消选集!<BR> AcDbObjectId id;<BR> acdbGetObjectId(id,en);//从ads_name转为AcDbObjectId<BR> AcDbLine *ln;<BR> acdbOpenObject<AcDbLine>(ln,id,AcDb::kForRead);//打开这条直线,记住一定是没分配过内存的指针!<BR> FILE* f=fopen("C:\\1.txt","a");//打开文件,你要自己更改文件名和打开方式,C基础编程。。<BR> if(f)//打开成功<BR> {<BR> AcGePoint3d a=ln->startPoint(),b=ln->endPoint();<BR> fprintf(f,"(%lf,%lf,%lf)-(%lf,%lf,%lf)\n",a.x,a.y,a.z,b.x,b.y,b.z);//写入文件;<BR> fclose(f);//关文件<BR> }<BR> else//打开失败<BR> acutPrintf("Failed!");<BR> ln->close();//关直线!一定不要忘!<BR> }</P>
<P>另外我建议你使用SDK自带的工具ObjectArx Wizards,既好用,也易于命令的管理,尤其在做reactor和jig的时候很神速!</P> <P>注册扩展图元数据</P> merak发表于2006-8-1 11:55:00static/image/common/back.gif
注册扩展图元数据
<BR>没有意义呀!直线而已 <P>to shinjikun:</P>
<P>你是用的arx2004+vs.2003么?</P> arx2004+vs.2002 <P>2003的话会有问题</P>
页:
[1]