想问一下,如何lisp与arx进行数据传递,你采用什么方法!?
想问一下,如何lisp与arx进行数据传递(交互),你采用什么方法!?我试图用函数(如acedRetReal等函数)的方法来实现
但始终无法运行
你们有什么好的方法!?
版主,好,你能建议一下吗!? 放上来帮你看看 比如说你在Lisp 中调用
(Setq a (myarx 10))
在Arx中,
1. 定义一个命令myarx
2.在命令myarx中,提取到一个参数10(注意类型RTSHORT)
3.做你的运算,如10*5,返回50
可以用acedRT返回;
最后,Lisp中a就得到50了. 根据你所说的,那参数可要一个一个传递
比喻我要传一个数列,代码如下:
int fzg2() //fzg2为ads_defun定义的命令
{
resbuf* pArg = acedGetArgs();
CGearDialog Dlg;
short Z;
double c,Ha,M,a,bb,ds;
Z=Dlg.m_nZ;
.......
res_list=acutBuildList(RTSHORT,Z,
RTREAL,c,
RTREAL,Ha,
RTREAL,M,
RTREAL,ds,
RTREAL,bb,0);
if(res_list!=NULL){
acdbFail("创建表失败!\n");
return 0;}
acedRetList(res_list);
acutRelRb(res_list);
// TODO: Implement the command
return RTNORM;
}
在lisp里
(setq mylist (list '0,'0,'0,'0,'0,'0))
(setq aa1 (fzg2 mylist))
setq Z (nth 0 aa1)
c (nth 1 aa1)
Ha(nth 2 aa1)
M (nth 3 aa1)
ds(nth 4 aa1)
bb(nth 5 aa1)
错误是; 错误: 无效的数据类型或数据溢出: 0,(autocad命令行提示)
不解,尽请赐教!
看不出有多大的错误,思路上是对的.
下面这一句倒是不对
if(res_list!=NULL){
acdbFail("创建表失败!\n");
return 0;
}
改为if(res_list==NULL)
根据你所说的,我再次试了几次
还是出现上面的错误提示,数据溢出,或类型错误
是不是在lisp的定义方式有误,还在arz里程序不对!? 思路是对的,你可能要一点点查,可能有点小错误而已.
页:
[1]