明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: BDYCAD

学习ARX,编个初组的命令,呵呵

  [复制链接]
 楼主| 发表于 2007-6-3 13:33:00 | 显示全部楼层

转自: http://bbs.caddev.cn/dispbbs.asp?boardID=5&ID=2&page=1

(一)   ObjectARX 2002 + AutoCAD 2002 + VC6.0 + Assist 6.0 + VSS 6.0C

配置文件:rxapi.lib acrx15.lib acdb15.lib acutil15.lib acge15.lib acgiapi.lib achapi15.lib acISMobj15.lib acad.lib

acedapi.lib acsiobj.lib adui15.lib acui15.lib (GeomathD.lib或者./../GeomathD.lib 或者./../GeoCadBase/GeomathD.lib )

                   比较经典的组合。

(二)   ObjectARX 2004/2005 + AutoCAD 2004/2005 + VC.Net 2002

                 ObjectARX2006 + AutoCAD2006 + VC.NET2002

配置文件:rxapi.lib      acdb16.lib      acge16.lib      acad.lib      acedapi.lib      acui16.lib      adui16.lib     

achapi16.lib

                   目前较稳定的组合。

(三)   ObjectARX 2005 + AutoCAD 2004/2005 + VC.Net 2003

                   需调用或验证大量VC7.0的库,否则编译不过。

                   解决方案:拷贝VC2002安装目录下/VC7\atlmfc\lib下 70 的文件到VC2003下,主要有:
                     mfc70.lib、       mfc70d.lib、mfc70u.lib、mfc70ud.lib

                mfcs70.lib、mfcs70.pdb、mfcs70d.lib、mfcs70d.pdb

                mfcs70u.lib、mfcs70u.pdb、mfcs70ud.lib、mfcs70ud.pdb

(四)   ObjectARX 2006 + AutoCAD 2006 + VC.Net 2003 + Assist X + VSS 6.0D

                  同样需要VC7.0的库。

                  简要方法:(1) 复制VC2003的相关库文件如:mfc71.lib、mfcs71.lib并改名为 70 的文件如:      mfc70.lib、

mfcs70.lib。

                                   (2) 拷贝VC2002的相关库文件到VC2003的对应安装目录下。

(五)   ObjectARX 2006 + AutoCAD 2006 + V#.Net 2003

                   .Net ARX编程组合。

                    编译的程序文件名为.dll,在AutoCAD中的加载命令为:NetLoad,但没有缷载命令,只有关闭AutoCAD。

                    调用ARX函数时using 相关命名空间,类似VC里include头文件。

(六)   ObjectARX 2007 + AutoCAD 2007 + VC.Net 2005 +Visual Assist v10.2.1442.0 + Visual SourceSafe 2005

 楼主| 发表于 2007-6-5 18:41:00 | 显示全部楼层
给LISP调用的画圆子程序
  1. static int ads_createcircle(void)
  2. {
  3.   //----- Remove the following line if you do not expect any argument for this ADS function
  4.   struct resbuf *pArgs =acedGetArgs () ,*n1;
  5.   // TODO: add your code here
  6.   ads_point pt1;
  7.   ads_real inrad;
  8.   pt1[X]=pArgs->resval.rpoint[X];
  9.   pt1[Y]=pArgs->resval.rpoint[Y];
  10.   pt1[Z]=0;
  11.   n1=pArgs->rbnext;
  12.   inrad=n1->resval.rreal;
  13.   AcDbCircle *nc=new AcDbCircle();
  14.   AcGePoint3d cpt=asPnt3d(pt1);
  15.   nc->setCenter(cpt);
  16.   nc->setRadius(inrad);
  17.   AcDbBlockTable *blocktable;
  18.   acdbHostApplicationServices()->workingDatabase()->getSymbolTable(blocktable,AcDb::kForRead);
  19.   AcDbBlockTableRecord *blocktablerecord;
  20.   blocktable->getAt(ACDB_MODEL_SPACE,blocktablerecord,AcDb::kForWrite);
  21.   AcDbObjectId cirid;
  22.   blocktablerecord->appendAcDbEntity(cirid,nc);
  23.   blocktable->close();
  24.   blocktablerecord->close();
  25.   nc->close();
  26.   acedRetVoid () ;
  27.   return (RSRSLT) ;
  28. }
复制代码
 楼主| 发表于 2007-6-9 10:21:00 | 显示全部楼层
  1. // ----- ads_drawfristars command
  2. //编写:BDYCAD;
  3. //时间:2007-06-09
  4. //加载后在LISP里面这样调用(drawfristars(GETPOINT)20.0)进行画五角星
  5. static int ads_drawfristars(void)
  6. {
  7.   //----- Remove the following line if you do not expect any argument for this ADS function
  8.   struct resbuf *pArgs =acedGetArgs (),*n1;
  9.   // TODO: add your code here
  10.   ads_point cpt,pt1,pt2;
  11.   int co1;
  12.   ads_real inrad,pi,ang1,pi5;
  13.   pi=3.14159;
  14.   ang1=pi/2.0;
  15.   pi5=pi*2.0/5;
  16.   co1=5;
  17.   const int co2=co1-1;
  18.   double pointlist[1000][3];
  19.   cpt[X]=pArgs->resval.rpoint[X];
  20.   cpt[Y]=pArgs->resval.rpoint[Y];
  21.   cpt[Z]=0;
  22.   n1=pArgs->rbnext;
  23.   inrad=n1->resval.rreal;
  24.   for (int i=0;5>i;i++) {
  25.    acutPolar(cpt,ang1,inrad,pt1);
  26.    pointlist[i][X]=pt1[X];
  27.    pointlist[i][Y]=pt1[Y];
  28.    pointlist[i][Z]=pt1[Z];
  29.    //AcGePoint3d cpt=asPnt3d(pt1);
  30.    //bdyads_createcircle(cpt,1.0);
  31.    ang1=ang1+pi5;
  32.   }
  33.   int b;
  34.   for (int i=0;5>i;i++) {
  35.    b=i+2;
  36.    if (i==4){
  37.     b=1;
  38.    }
  39.    if (b==5) {
  40.     b=0;
  41.    }
  42.    pt1[X]=pointlist[i][X];
  43.    pt1[Y]=pointlist[i][Y];
  44.    pt1[Z]=pointlist[i][Z];
  45.    pt2[X]=pointlist[b][X];
  46.    pt2[Y]=pointlist[b][Y];
  47.    pt2[Z]=pointlist[b][Z];
  48.    bdyads_createline(cpt,pt1);
  49.    bdyads_createline(pt1,pt2);
  50.   }
  51.   // TODO: Replace the following line by your returned value if any
  52.   acedRetVoid () ;
  53.   return (RSRSLT) ;
  54. }
  55. static AcDbObjectId bdyads_createline(ads_point spt,ads_point ept)
  56. {
  57.   AcGePoint3d pt1=asPnt3d(spt), pt2=asPnt3d(ept);
  58.   AcDbLine *nl=new AcDbLine;
  59.   nl->setStartPoint(pt1);
  60.   nl->setEndPoint(pt2);
  61.   AcDbBlockTable *blocktable;
  62.   acdbHostApplicationServices()->workingDatabase()->getSymbolTable(blocktable,AcDb::kForRead);
  63.   AcDbBlockTableRecord *blocktablerecord;
  64.   blocktable->getAt(ACDB_MODEL_SPACE,blocktablerecord,AcDb::kForWrite);
  65.   AcDbObjectId lineid;
  66.   blocktablerecord->appendAcDbEntity(lineid,nl);
  67.   blocktable->close();
  68.   blocktablerecord->close();
  69.   nl->close();
  70.   return lineid;
  71. }
复制代码
 楼主| 发表于 2007-6-9 13:49:00 | 显示全部楼层

第13楼和14楼是2007-06-09日学习ARX编写一个画星星[五角星]的ARX程序,第13楼的代码是生成由LISP调用的ARX程序代码。

现在上传的是制作成命令使用的程序代码和程序编写教程序还有该程序的源码,上传到这里给大家做个交流,还望各位朋友多多指点:)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-7-8 11:15:00 | 显示全部楼层
本帖最后由 作者 于 2007-7-8 11:38:04 编辑

根据nameld001朋友的要求我们用ARX写一段画PLINE的程序MAKE方法:)代码如下:


//时间:2007-07-08
struct resbuf* re;
ads_point pt1={10,10,0};
ads_point pt2 ={20,20,0};
re=acutBuildList(RTDXF0,"lwpolyline",100,"AcDbEntity",100,"AcDbPolyline",
     90,2,10,pt1,10,pt2,70,0,0);
acdbEntMake(re);

发表于 2007-7-13 12:50:00 | 显示全部楼层
发表于 2007-7-16 16:50:00 | 显示全部楼层
真是好心人呀,VS2003+arx2006也能这样做吗?
 楼主| 发表于 2007-7-17 09:17:00 | 显示全部楼层
要VS2002+arx2006+AutoCAD R2004~2006的
发表于 2007-7-17 22:13:00 | 显示全部楼层

版主同志:你能否给我一些struct resbuf方面的资料,对这个东西比较模糊,不知道有什么用处。

发表于 2007-7-17 22:14:00 | 显示全部楼层
我的邮箱:liangdongfeng2003@yahoo.com.cn
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-28 03:57 , Processed in 0.164768 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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