明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1486|回复: 7

蔡鸟求助!!!!

[复制链接]
发表于 2006-7-28 10:20:00 | 显示全部楼层 |阅读模式
在cad上画条直线,利用arx输入一个命令,提取这条支线的坐标生成一个新文件,那位大哥能给个思路啊
发表于 2006-7-31 09:58:00 | 显示全部楼层

这个问题比较麻烦,问题的关键是如何检索连表.

 

发表于 2006-8-1 03:07:00 | 显示全部楼层

回复

简单来说就是:
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的时候很神速!

发表于 2006-8-1 11:55:00 | 显示全部楼层

注册扩展图元数据

发表于 2006-8-2 00:32:00 | 显示全部楼层
merak发表于2006-8-1 11:55:00 注册扩展图元数据

没有意义呀!直线而已
 楼主| 发表于 2006-8-2 20:26:00 | 显示全部楼层

to shinjikun:

你是用的arx2004+vs.2003么?

发表于 2006-8-3 01:01:00 | 显示全部楼层
arx2004+vs.2002
发表于 2006-8-3 01:01:00 | 显示全部楼层

2003的话会有问题

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 23:17 , Processed in 0.171836 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表