ObjectARX 2010 函数详解之一
通过一个多月的教学,感觉大家普遍希望掌握函数及其用法,从今天起,利用这里,给大家详细的介绍ObjectARX 2010的全局函数及示例,希望大家能够把这个呢弄懂、学透,大部分的全局函数都在LISP中有对应,不妨让我们对比着学习。这个不是按照什么顺序而是按照分类来讲解,这个我认为与英语水平没有什么关系,以acdbEntSel函数为例,我们一般可以这么来看这个全局函数,前面4个均为小写,是前缀例如aced——编辑相关,acdb—数据库相关等等.中间凡是大写字母开头呢都是某一单词的缩写,很容易记忆比如Ent就是代表实体,Sel是选择等等,方便我们记忆。特别是有了VC助手之后呢可以更加方便我们的应用。
今天呢就先向大家介绍有关实体操作的几个Ent族函数—acedEntSelacdbEntGetacdbEntMake acdbEntNext acdbEntLastacdbEntDel acdbEntMakeX.
首先登场的是函数 acedEntSel.
这个函数呢,含义就是接受用户的选择,返回图元名和用户选择时鼠标的位置。
参数定义如下:int acedEntSel (const ACHAR *str, ads_name entres, ads_point ptres)
第一个参数:字符串,如果为NULL,则默认提示选择对象,如果定义呢则按用户的文字提示进行选择。
第二个参数:图元名,选择成功后,返回的图元名.
第三个参数:坐标点,选择成功后,返回的鼠标拾取点。
返回值:返回RTNORM代表成功,返回值需要用if语句或者Acad::ErrorStatus进行容错处理,否则出现崩溃。
Lisp中对应的函数(entsel),实际就是由这个全局函数定义的。
示例,根据选择对象,在鼠标选定位置画圆。
void xqlMyEntSel()
{
ads_name ename;//声明图元名
ads_point pt;//声明点
if (acedEntSel(NULL,ename,pt)!=RTNORM)
{
return;//选择失败退出
}
acedCommand(RTSTR,_T("CHANGE"),RTENAME,ename,RTSTR,_T(""),RTSTR,_T("P"),RTSTR,_T("C"),RTSTR,_T("1"),RTSTR,_T(""),0);//调用命令
}
示例二定义一个自己的LISP函数(myentsel)[时间紧未经测试大家可以试验一下]
static int ads_myentsel(void)
{
//----- Remove the following line if you do not expect any argument for this ADS function
struct resbuf *rb =acedGetArgs () ;
ads_name s1;ads_point pt;
struct resbuf *lis;
// TODO: add your code here
if (rb== NULL)
{
if (acedEntSel(NULL,s1,pt)!=RTNORM)
{
return RTERROR;
}
lis = acutBuildList(RTENAME,s1,RT3DPOINT,pt,0);
}
else
{
if (rb->restype == RTSTR)
{
if (acedEntSel(rb->resval.rstring,s1,pt)!=RTNORM)
{
return RTERROR;
}
lis = acutBuildList(RTENAME,s1,RT3DPOINT,pt,0);
}
else
{
acdbFail(_T("参数错误"));
return RTERROR;
}
}
rb = rb->rbnext;
if (rb!=NULL)
{
acdbFail(_T("参数太多"));
return RTERROR;
}
// TODO: Replace the following line by your returned value if any
acedRetList( lis);
acutRelRb(lis);
return (RSRSLT) ;
}
上面呢就是ARX全局函数acedEntSel的介绍,下面在LISP中是怎么实现的呢,如下所示:
(defun c:myentsel()
(setq en(entsel))
(if(/= en nil)
(progn
(setq pt(cadr en))
(command "circle" pt 5)
))
(princ)
)
希望大家对此能了解这个函数,下一讲我们讲讲acdbEntGet.
讲的很细致,不过上面的函数了解acedEntSel就足够了,其他的用的太少。
页:
[1]