[求助]一个关于LISP的问题
在R2000+版中,CAD可以把一个LISP编写的非系统命令变为系统命令。方法是:在最后一行(princ)之前加入(vlax-add-cmd "3darray" 'c:3darray)--以3darray为例。据此,我编写了一个基于系统命令的LISP:(DEFUN C:3AR () (COMMAND "3DARRAY" "L" "" "R"))用来“三维阵列最后一个物体”。但是我奇怪的发现,只有先运行3darray命令之后,3AR命令才好使。这是为什么?怎样避免这种情况?因为3DARRAY不是一个系统内部命令
明经通道没有高人
这么多天没有人回复.唉,看来明经通道没有高人啊!!!!Check first
(DEFUN C:3AR ();;; Added
(if (null C:3DARRAY)(load YourOwn3Darray.LSP))
;;; End
(COMMAND "3DARRAY" "L" "" "R"))
你没长眼睛啊,我的回答摆在下面都快10天了
你才没长眼睛呢
tomeflying:你才没长眼睛呢!
就你那种回答,也敢妄称高手?
狗屎!!
我这样理解
都消消气,这里不是吵架的地方。关于你的问题,可以看看acad2000doc.lsp中关于函数3darray、autoload、—_autoqload的定义过程,我们在Acad中执行3darray命令时需要经过一个初始化过程,这样才把3darray.lsp中的c:3darray外部函数提出来,也就是说,第一遍执行的命令3darray并不等于随后执行的3darray命令,所以你的定义也就不成立了。我说的不专业,只能表达点意思,你再理解理解。
发言不要发语伤人,“我飞”的回答是正确的,只是你对AutoCAD还不够了解
你可以查看acad2004doc.lsp或acad2000doc.lsp文件,里边有一句是:(autoload "3darray" '("3darray"))
也就是说该命令是外部程序定义的。
如果该程序还没有加载(在这里由于加载是自动的,也就是在第一次命令行中输入3darray时系统会加载3darray.fas。
所以如果你的程序需要利用该命令,必须先在你的程序中加载该程序。
可使用(load "3darray")来先加载该程序。
对不起
本帖最后由 作者 于 2003-6-7 17:47:36 编辑对不起,"我飞"兄,我只是等得着急,当时一时有没有看到你的帖子(也可能当时觉得你的回答过于简单),就说了那番话.明经通道小弟刚来不久,道行还浅,不懂规矩,出口不逊,得罪了大侠,望海涵.请今后在学习上多帮助.
页:
[1]