fzg_2000 发表于 2004-3-9 17:33:00

想问一下,如何lisp与arx进行数据传递,你采用什么方法!?

想问一下,如何lisp与arx进行数据传递(交互),你采用什么方法!?


我试图用函数(如acedRetReal等函数)的方法来实现


但始终无法运行


你们有什么好的方法!?


版主,好,你能建议一下吗!?

goldenshin 发表于 2004-3-10 16:28:00

放上来帮你看看

goldenshin 发表于 2004-3-10 16:34:00

比如说你在Lisp 中调用


(Setq a (myarx 10))


在Arx中,


1. 定义一个命令myarx


2.在命令myarx中,提取到一个参数10(注意类型RTSHORT)


3.做你的运算,如10*5,返回50


可以用acedRT返回;


最后,Lisp中a就得到50了.

fzg_2000 发表于 2004-3-10 18:56:00

根据你所说的,那参数可要一个一个传递


比喻我要传一个数列,代码如下:


int fzg2()                       //fzg2为ads_defun定义的命令<BR>{               <BR>                       resbuf* pArg = acedGetArgs();<BR>        CGearDialog Dlg;<BR>        short Z;<BR>        double c,Ha,M,a,bb,ds;<BR>                       Z=Dlg.m_nZ;


.......


        res_list=acutBuildList(RTSHORT,Z,<BR>                                                                                                                                                                               RTREAL,c,<BR>                                                                                                                                                                                                       RTREAL,Ha,<BR>                                                                                                                                                                                                       RTREAL,M,<BR>                                                                                                                                                                                                       RTREAL,ds,<BR>                                                                                                                                                                                                       RTREAL,bb,0);<BR>       if(res_list!=NULL){<BR>                                       acdbFail("创建表失败!\n");<BR>                                       return 0;}<BR>               acedRetList(res_list);<BR>               acutRelRb(res_list);<BR>        // TODO: Implement the command<BR>        return RTNORM;<BR>}


在lisp里


(setq mylist (list '0,'0,'0,'0,'0,'0))<BR>(setq aa1 (fzg2 mylist))<BR>setq Z (nth 0 aa1) <BR>        c (nth 1 aa1)<BR>        Ha(nth 2 aa1)<BR>        M (nth 3 aa1)<BR>        ds(nth 4 aa1)<BR>        bb(nth 5 aa1)


错误是; 错误: 无效的数据类型或数据溢出: 0,(autocad命令行提示)


不解,尽请赐教!<BR>

goldenshin 发表于 2004-3-11 09:53:00

看不出有多大的错误,思路上是对的.


下面这一句倒是不对       


if(res_list!=NULL){<BR>                                       acdbFail("创建表失败!\n");<BR>return 0;


}


改为if(res_list==NULL)


<BR>

fzg_2000 发表于 2004-3-11 12:50:00

根据你所说的,我再次试了几次


还是出现上面的错误提示,数据溢出,或类型错误


是不是在lisp的定义方式有误,还在arz里程序不对!?

goldenshin 发表于 2004-3-11 16:28:00

思路是对的,你可能要一点点查,可能有点小错误而已.
页: [1]
查看完整版本: 想问一下,如何lisp与arx进行数据传递,你采用什么方法!?