madbull 发表于 2003-5-24 19:23:00

[求助]一个关于LISP的问题

在R2000+版中,CAD可以把一个LISP编写的非系统命令变为系统命令。方法是:在最后一行(princ)之前加入(vlax-add-cmd "3darray" 'c:3darray)--以3darray为例。据此,我编写了一个基于系统命令的LISP:(DEFUN C:3AR () (COMMAND "3DARRAY" "L" "" "R"))用来“三维阵列最后一个物体”。但是我奇怪的发现,只有先运行3darray命令之后,3AR命令才好使。这是为什么?怎样避免这种情况?

meflying 发表于 2003-5-25 14:55:00

因为3DARRAY不是一个系统内部命令

madbull 发表于 2003-6-2 08:38:00

明经通道没有高人

这么多天没有人回复.唉,看来明经通道没有高人啊!!!!

mmmmmm 发表于 2003-6-3 16:36:00

Check first

(DEFUN C:3AR ()
;;; Added
(if (null C:3DARRAY)(load YourOwn3Darray.LSP))
;;; End
(COMMAND "3DARRAY" "L" "" "R"))

meflying 发表于 2003-6-3 18:19:00

你没长眼睛啊,我的回答摆在下面都快10天了

madbull 发表于 2003-6-6 18:16:00

你才没长眼睛呢

tomeflying:
你才没长眼睛呢!
就你那种回答,也敢妄称高手?
狗屎!!

ll_j 发表于 2003-6-6 19:59:00

我这样理解

都消消气,这里不是吵架的地方。
关于你的问题,可以看看acad2000doc.lsp中关于函数3darray、autoload、—_autoqload的定义过程,我们在Acad中执行3darray命令时需要经过一个初始化过程,这样才把3darray.lsp中的c:3darray外部函数提出来,也就是说,第一遍执行的命令3darray并不等于随后执行的3darray命令,所以你的定义也就不成立了。我说的不专业,只能表达点意思,你再理解理解。

mccad 发表于 2003-6-6 21:29:00

发言不要发语伤人,“我飞”的回答是正确的,只是你对AutoCAD还不够了解

你可以查看acad2004doc.lsp或acad2000doc.lsp文件,里边有一句是:
(autoload "3darray" '("3darray"))
也就是说该命令是外部程序定义的。
如果该程序还没有加载(在这里由于加载是自动的,也就是在第一次命令行中输入3darray时系统会加载3darray.fas。
所以如果你的程序需要利用该命令,必须先在你的程序中加载该程序。
可使用(load "3darray")来先加载该程序。

madbull 发表于 2003-6-7 17:47:00

对不起

本帖最后由 作者 于 2003-6-7 17:47:36 编辑

对不起,"我飞"兄,我只是等得着急,当时一时有没有看到你的帖子(也可能当时觉得你的回答过于简单),就说了那番话.明经通道小弟刚来不久,道行还浅,不懂规矩,出口不逊,得罪了大侠,望海涵.请今后在学习上多帮助.
页: [1]
查看完整版本: [求助]一个关于LISP的问题