明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 32713|回复: 56

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

  [复制链接]
发表于 2007-3-14 14:29 | 显示全部楼层 |阅读模式

在使用CAD中, 我们常常要把很多根头尾相连的ARC呀LINE呀连接成一根PLINE对象,我们都是常常用CAD的PEDIT来做,我以前只能在LISP中写出来, 今天把他用ARX把这个简易的动作写出来,

    还望以后大家多多指导,我将用心学好ARX, 谢谢!

 // ----- BDYCommEE._EE command (do not rename)
 static void BDYCommEE_EE(void)
 {
  struct resbuf cmd, rb1,rb2 , *dxf;
  ads_name Ename;
  ads_point pt1 ;
  int m,n,k;
  //acedGetVar("osmode", & os);
  cmd.restype = RTREAL;
  cmd.resval.rreal = 0;
  acedSetVar("cmdecho", &cmd);//(SETVAR "CMDECHO" 0)
  if(acedEntSel("\n请选择要串接的线:",Ename,pt1) != RTNORM)
  {acutPrintf("\n没有选到对象,请再试一次。");}
  else
  {
   acedCommand(RTSTR ,"PEDIT",RTLB,RTENAME,Ename ,RTPOINT,pt1,RTLE, RTSTR, "" ,RTSTR,"J",RTSTR,"ALL",RTSTR,"",RTSTR,"",0);
   acutPrintf("\n选到对象,自动进行连接对象了。");
  }
  // Add your code for command BDYCommEE._EE here
 }

发表于 2007-3-22 15:32 | 显示全部楼层

是用sendcommand的方式啊?还以为是arx的方式呢。不过也顶一下,楼主继续努力。

 楼主| 发表于 2007-4-5 10:45 | 显示全部楼层
本帖最后由 作者 于 2007-4-5 10:49:31 编辑

20070405

今天又学习一点点ARX, 写个中心点式画距形的小功能.呵呵,

//ads_real 可以和c++自带的double 或float 换着用
//ads_real  a,b,a2,b2;
double a,b,a2,b2;
 ads_point pt1,pt2,ptc;
 acedGetReal("\n请输入长度:",&a);
 acedGetReal("\n请输入宽度:",&b);
 acedGetPoint(NULL,"\n请输入中心点:",ptc);
 a2=a*0.5;
 b2=b*0.5;
 pt1[X]=ptc[X]-a2;
 pt1[Y]=ptc[Y]-b2;
 //pt1.x=ptc.x-a2;不是类,不能这么用
 //pt1.y=ptc.y-b2;
 pt2[X]=ptc[X]+a2;
 pt2[Y]=ptc[Y]+b2;
 acedCommand(RTSTR ,"RECTANGLE",RTPOINT,pt1,RTPOINT, pt2,0);
 acutPrintf("\n以中心点画出距形\n长度的一半%f ;\n宽度的一半%f 。",a2,b2);


 楼主| 发表于 2007-4-11 17:23 | 显示全部楼层

改一个选集里面所有对象的颜色的ARX代码

//编写BDYCAD
//时间:2007-04-11

static void bdy_chdxf62(ads_name en)
{
 struct resbuf *pArgs =acedGetArgs () ,*ed,*cb,*cd;
 int a=0;
 ed= acdbEntGet(en);
 for(cb=ed;cb!=NULL;cb=cb->rbnext)
 {
  if(cb->restype== 62)
  {
   cb->resval.rint=1;//我想把对象改为红色
   if(acdbEntMod(ed)!=RTNORM)
   {
    acutRelRb(ed);
    //return 0;
   }
   a=1;
   break;//处理好就跳出循环,节省时间。
  }
 }
 if(a==0)
{
 for(cd=ed;cd->rbnext!=NULL;cd=cd->rbnext);//在链表尾部添加节点
 struct resbuf *rb=NULL;
 if((rb=(struct resbuf*)malloc(sizeof(struct resbuf)))!=NULL)
 {
  rb->rbnext=NULL;
  rb->restype=62;
  rb->resval.rint=1;
  cd->rbnext=rb;
  if(acdbEntMod(ed)!=RTNORM) acutPrintf("\nERR");
 }
 a=1;
}
// 释放内存
if(ed!=NULL) acutRelRb(ed);
ed=NULL;
acutRelRb(ed);
}
static int ads_sstest(void)
{
 //----- Remove the following line if you do not expect any argument for this ADS function
 struct resbuf *pArgs =acedGetArgs (),*dxf ;

 // TODO: add your code here
 ads_name ss;
 if ((acedSSGet(NULL,NULL,NULL,NULL,ss))!=RTNORM)
 {
  acutPrintf("\n对不起,选不到对象");
 }
 else
 {
  int i=0;
  long sslen;
  acedSSLength(ss,&sslen);
  acutPrintf("\n选到了%d个对象",sslen);
  ads_name en1;
  for(i;sslen>i;i++)
  {
   acedSSName(ss,i,en1);
   bdy_chdxf62(en1);

  }
 }
 // TODO: Replace the following line by your returned value if any
 acedRetVoid () ;
 return (RSRSLT) ;
}

 楼主| 发表于 2007-4-12 16:13 | 显示全部楼层

学习一下WHILE在ARX里面的用法

//2007-01-12
static int ads_pointlistdraw(void)
{
 //----- Remove the following line if you do not expect any argument for this ADS function
 struct resbuf *pArgs =acedGetArgs (),*entlist;

 // TODO: add your code here
 ads_point pt1;
 ads_real rad=2.0;
 int a,b;
 a=acedGetPoint(NULL,"\n输入一个点:",pt1);
 b=0;
 while(a== RTNORM)//((acedGetPoint(NULL,"\n输入一个点:",pt1))==RTNORM);
 {
  //acedCommand(RTSTR ,"CIRCLE",RTPOINT,pt1,RTREAL,rad,0);
  entlist=NULL;
  entlist=acutBuildList(RTDXF0,"CIRCLE",8,"0",10,pt1,40,rad,62,1,0);
  acdbEntMake(entlist);
  b++;
  a=acedGetPoint(NULL,"\r输入一个点:",pt1);

 }
 acutPrintf("\n报告:在0层画了%d个红色的小圆圆,\n谢谢使用!",b);
 // TODO: Replace the following line by your returned value if any
 acedRetVoid () ;

 return (RSRSLT) ;
}

 楼主| 发表于 2007-4-24 21:41 | 显示全部楼层
要使用VS2005 + ARX2007 的一些要做的设置如下:
1  ,先按ADMIN说的:
将.NET2002中的如下文件mfc70.lib        mfc70d.lib mfc70u.lib mfc70ud.lib mfcs70.li mfcs70.pdb        mfcs70d.lib mfcs70d.pdb mfcs70u.lib        mfcs70u.pdbnmfc70ud.lib mfc70ud.pdb
复制到\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib。
2  新建ARX程序:
3   设计程序属性如下:
  a、在配置下拉框中选择“所有配置”;
   b、找到左端树结构中“配置属性->C/C++->常规”,在其右端“附加包含目录”项中填入Object

ARX2007下的inc文件夹路径和自己的附加文件夹的路径;警告等级选择1级(/w1)
   c、找到左端树结构中“配置属性->链接器->常规”,在其右端“附加库目录”项中填入

ObjectARX2007下的lib文件夹路径;
   d、找到左端树结构中“配置属性->链接器->输入”,在其右端“附加依赖项”项中填入

“acad.lib AcCamera.lib acdb17.lib AcDblClkEditPE.lib acdbmgd.lib AcDbMPolygon17.lib acedapi.lib AcFdEval.lib AcFdUi.lib acge17.lib acgiapi.lib achapi17.lib acismobj17.lib AcSceneOE.lib AcTc.lib AcTcUi.lib acui17.lib adui17.lib aNav.lib aseapi17.lib asiapi17.lib axdb.lib oleaprot.lib rxapi.lib”;
发表于 2007-4-30 10:12 | 显示全部楼层
基础倒是学得挺扎实的.
发表于 2007-5-5 00:26 | 显示全部楼层

厚街男孩 版主:

你好,我需要.NET2002中的

mfc70.lib mfc70d.lib mfc70u.lib mfc70ud.lib mfcs70.li mfcs70.pdb  

mfcs70d.lib mfcs70d.pdb mfcs70u.lib  mfcs70u.pdbnmfc70ud.lib mfc70ud.pdb

等12个文件

你能帮帮我么?

我的信箱是jiaoxufei2005@163.com

把这12个文件发给我吧!谢谢!

 楼主| 发表于 2007-5-6 09:30 | 显示全部楼层
以发到你的E-MAIL了,请查收.
发表于 2007-5-15 17:30 | 显示全部楼层

这个帖子真不错

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

本版积分规则

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

GMT+8, 2024-4-20 20:53 , Processed in 0.204772 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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