学习ARX,编个初组的命令,呵呵
在使用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
}
是用sendcommand的方式啊?还以为是arx的方式呢。不过也顶一下,楼主继续努力。
20070405
今天又学习一点点ARX, 写个中心点式画距形的小功能.呵呵,
//ads_real 可以和c++自带的double 或float 换着用
//ads_reala,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=ptc-a2;
pt1=ptc-b2;
//pt1.x=ptc.x-a2;不是类,不能这么用
//pt1.y=ptc.y-b2;
pt2=ptc+a2;
pt2=ptc+b2;
acedCommand(RTSTR ,"RECTANGLE",RTPOINT,pt1,RTPOINT, pt2,0);
acutPrintf("\n以中心点画出距形\n长度的一半%f ;\n宽度的一半%f 。",a2,b2);
改一个选集里面所有对象的颜色的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) ;
}
学习一下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) ;
}
要使用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”; 基础倒是学得挺扎实的. 厚街男孩 版主:
你好,我需要.NET2002中的
mfc70.lib mfc70d.lib mfc70u.lib mfc70ud.lib mfcs70.li mfcs70.pdb
mfcs70d.lib mfcs70d.pdb mfcs70u.libmfcs70u.pdbnmfc70ud.lib mfc70ud.pdb
等12个文件
你能帮帮我么?
我的信箱是jiaoxufei2005@163.com
把这12个文件发给我吧!谢谢!
以发到你的E-MAIL了,请查收. 这个帖子真不错
页:
[1]