明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2133|回复: 8

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

[复制链接]
发表于 2003-5-24 19:23:00 | 显示全部楼层 |阅读模式
在R2000+版中,CAD可以把一个LISP编写的非系统命令变为系统命令。方法是:在最后一行(princ)之前加入(vlax-add-cmd "3darray" 'c:3darray)--以3darray为例。据此,我编写了一个基于系统命令的LISP:(DEFUN C:3AR () (COMMAND "3DARRAY" "L" "" "R"))用来“三维阵列最后一个物体”。但是我奇怪的发现,只有先运行3darray命令之后,3AR命令才好使。这是为什么?怎样避免这种情况?
发表于 2003-5-25 14:55:00 | 显示全部楼层

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

 楼主| 发表于 2003-6-2 08:38:00 | 显示全部楼层

明经通道没有高人

这么多天没有人回复.唉,看来明经通道没有高人啊!!!!
发表于 2003-6-3 16:36:00 | 显示全部楼层

Check first

(DEFUN C:3AR ()
;;; Added
(if (null C:3DARRAY)(load YourOwn3Darray.LSP))
;;; End
(COMMAND "3DARRAY" "L" "" "R"))
发表于 2003-6-3 18:19:00 | 显示全部楼层

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

 楼主| 发表于 2003-6-6 18:16:00 | 显示全部楼层

你才没长眼睛呢

to  meflying:
你才没长眼睛呢!
就你那种回答,也敢妄称高手?
狗屎!!
发表于 2003-6-6 19:59:00 | 显示全部楼层

我这样理解

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

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

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

对不起

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

对不起,"我飞"兄,我只是等得着急,当时一时有没有看到你的帖子(也可能当时觉得你的回答过于简单),就说了那番话.明经通道小弟刚来不久,道行还浅,不懂规矩,出口不逊,得罪了大侠,望海涵.请今后在学习上多帮助.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 16:57 , Processed in 0.191804 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表