简单来说就是: 1.让用户选取一条直线或者PICKFIRST 2.获取直线的信息 3.保存到文件
下面是简单的代码,在autoCAD 2004平台下通过,你可以加入自己的部分:
static void Line2File(void) { ads_name ssname,en; char name[10]="LINE"; resbuf rb; rb.restype=0; rb.resval.rstring=name; rb.rbnext=NULL;//只选择直线,即dxf0="LINE" acedSSGet("I",NULL,NULL,&rb,ssname);//寻找PICKFIRST集,关于acedSSGet的用法,请查SDK,如果你有一些LISP的基础会很简单的! long len; acedSSLength(ssname,&len);//得到选集大小 while(len==0)//如果为0 { acedSSFree(ssname);//取消选集 acedSSGet(NULL,NULL,NULL,&rb,ssname);//让用户选择 acedSSLength(ssname,&len); } acedSSName(ssname,0,en);//得到选集的第一个ads_name acedSSFree(ssname);//取消选集!注意,不要忘了取消选集! AcDbObjectId id; acdbGetObjectId(id,en);//从ads_name转为AcDbObjectId AcDbLine *ln; acdbOpenObject<AcDbLine>(ln,id,AcDb::kForRead);//打开这条直线,记住一定是没分配过内存的指针! FILE* f=fopen("C:\\1.txt","a");//打开文件,你要自己更改文件名和打开方式,C基础编程。。 if(f)//打开成功 { AcGePoint3d a=ln->startPoint(),b=ln->endPoint(); fprintf(f,"(%lf,%lf,%lf)-(%lf,%lf,%lf)\n",a.x,a.y,a.z,b.x,b.y,b.z);//写入文件; fclose(f);//关文件 } else//打开失败 acutPrintf("Failed!"); ln->close();//关直线!一定不要忘! }
另外我建议你使用SDK自带的工具ObjectArx Wizards,既好用,也易于命令的管理,尤其在做reactor和jig的时候很神速! |