江湖远人 发表于 2011-12-25 11:49:58

进入CAD二次开发的世界——cad.lisp文件(转)


acad.pgp的设置只是CAD二次开发万里长征的第一步,二次开发的目的是什么这个问题很深刻,不同的人有不同的答案,我总结下来无外乎是这么几条:
1、提高画图的效率
2、减少图样的错误率
3、改变软件操作习惯
4、系列化设计
这些都是表面现象,我认为二次开发的终极目标是全自动设计,短期目标是提高个人的绘图速度,提高业务的竞争力。本着这些目的有一些命令就值得商榷了,比如copy命令,cad下默认的命令是co,我认为copy命令的使用频率是很高的,远远高于园命令,使用频率高的命令建议用单字,所以命令的设定一定要考虑两个方面 A、容易记忆 B、输入速度快

下面来说说acad.lsp文件,在cad中还有个文件与这个文件有同等效力,就是acadXXXX.lsp ,这里的XXXX是版本号

节选部分acad.lsp文件内容如下:
(VMON)
(COMMAND "LAYER" "M" "0" "c" "7" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "1" "c" "1" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "2" "c" "2" "" "lw" "0.25" "" "")
(COMMAND "LAYER" "M" "5" "c" "5" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "-" "c" "7" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "6" "c" "6" "" "lw" "0.09" "" "")
(COMMAND "LAYER" "M" "3" "c" "3" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "8" "c" "30" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "4" "c" "4" "" "lw" "0.05" "" "")

(COMMAND "OSNAP" "int,cen,mid,endp,nea")
(command "mirrtext" "0")
(command "fillet" "R" "0")


(DEFUN C: L0 () (COMMAND "LAYER" "M" "0" "c" "7" "" "lw" "0.05" "" ""))
(DEFUN C: L1 () (COMMAND "LAYER" "M" "1" "c" "1" "" "lw" "0.05" "" ""))
(DEFUN C: L2 () (COMMAND "LAYER" "M" "2" "c" "2" "" "lw" "0.25" "" ""))
(DEFUN C: L3 () (COMMAND "LAYER" "M" "3" "c" "3" "" "lw" "0.15" "" ""))
(DEFUN C: L4 () (COMMAND "LAYER" "M" "4" "c" "4" "" "lw" "0.05" "" ""))
(DEFUN C: L5 () (COMMAND "LAYER" "M" "5" "c" "5" "" "lw" "0.15" "" ""))
(DEFUN C: L6 () (COMMAND "LAYER" "M" "6" "c" "6" "" "lw" "0.09" "" ""))
(DEFUN C: L8 () (COMMAND "LAYER" "M" "8" "c" "30" "" "lw" "0.09" "" ""))
(DEFUN C: L- () (COMMAND "LAYER" "M" "-" "c" "7" "" "lw" "0.05" "" ""))

(DEFUN C:O1 () (COMMAND "OSNAP" "int,cen,mid,endp,nea"))
(DEFUN C:O2 () (COMMAND "OSNAP" "endp,per,qua,ins,nod"))
(DEFUN C:O3 () (COMMAND "OSNAP" "endp,int,tan,ins"))
(DEFUN C:OW () (COMMAND "OSNAP" "NONE"))
=====================无敌分割线===========================

下面做解释
Visual LISP 为 AutoLISP 应用程序提供三种文件格式选项:

LSP 文件 (.lsp) — 包含 AutoLISP 程序代码的 ASCII 文本文件。
FAS 文件 (.fas) — LSP 程序文件的二进制编译版本。
VLX 文件 (.vlx) — 一个或多个 LSP 文件和/或对话框控制语言 (DCL) 文件的编译集合。

上面的每一行语句都是lisp语句
细心的朋友会发现lisp语句是用括号括起来的,而且括号是成对出现的。这就是lisp语言的一个重要特点

(DEFUN C:O1 () (COMMAND "OSNAP" "int,cen,mid,endp,nea"))
这一句里面括号可以套括号
“defun c:”是用来定义命令的
后面的 (COMMAND "OSNAP" "int,cen,mid,endp,nea")是单纯的lisp语句,这个语句可以直接放到CAD命令行下运行的。
http://au.autodesk.com.cn/bbs/images/default/attachimg.gif http://au.autodesk.com.cn/bbs/attachments/forumid_43/110827115570cca581cd10dafa.jpg
如上图所示
那么这条命令的意思是什么呢?
如果在CAD命令行下面直接用osnap命令,会弹出以下窗口的
http://au.autodesk.com.cn/bbs/images/default/attachimg.gif http://au.autodesk.com.cn/bbs/attachments/forumid_43/1108271205f7ba598784f1812c.jpg
后面的参数"int,cen,mid,endp,nea" 就是这个窗口中的不同种的对象捕捉点,
int----交点
cen---中心点(园)
mid---中点(直线)
endp--端点
nea---最近点
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在lisp语言中仅仅用这样一条简单的命令就能直接设置不同种的捕捉点,不是很简单的一件事吗?
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
提出个问题:为什么直接在CAD下输入osnap命令会弹出窗口,而用lisp命令条来执行,不会出现窗口呢?
其实在旧版本的CAD里面osnap是不会出现窗口的,包括layer也是没有窗口的,只是在windows大行其道后,cad的windows版本才出现窗口的。
所以大家不要被窗口的假象所迷惑。cad内部的运行机制十多年来并没有根本性的变化。

拿出点举一反三的精神,我们接下来讨论下面一个语句
(COMMAND "LAYER" "M" "0" "c" "7" "" "lw" "0.05" "" "")
从字面解释来说,就是在命令行直接输入layer命令,然后用m命令新建立一个层,层的名字是0,用C这个命令指定层的颜色为7,用lw命令指定线宽为0.05.
这个命令串里面连续两个""为回车,等于enter。
上面说了layer命令在以前的cad下是不出窗口的,所以用这个命令串以前比较好解释,而现在出来窗口反而难以解释了。不知道是不是这样的。
实际上就是输入一个命令,软件自动出现下一个提示,按照提示一步步做就是了,碰到没提示的地方,多加一个回车,只是现在软件出窗口没提示了。
==================无敌分割线====================
按照上面的内容:
(COMMAND "LAYER" "M" "0" "c" "7" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "1" "c" "1" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "2" "c" "2" "" "lw" "0.25" "" "")
(COMMAND "LAYER" "M" "5" "c" "5" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "-" "c" "7" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "6" "c" "6" "" "lw" "0.09" "" "")
(COMMAND "LAYER" "M" "3" "c" "3" "" "lw" "0.15" "" "")
(COMMAND "LAYER" "M" "8" "c" "30" "" "lw" "0.05" "" "")
(COMMAND "LAYER" "M" "4" "c" "4" "" "lw" "0.05" "" "")
这些语句前面没有定义语句defun c: (),那么只要载入acad.lsp就会自动运行,
上面这九句实际上是给一个新开的图纸加上了九个层,也就是说以后不论打开任何一个文件CAD均会在文件中增加九个层
(说明: 8号层可以不加,8号层与笔者的行业有关)

那么为什么要这样设置层呢?
一般情况下1-6号为带颜色的,0层是白色的,在机械中可以定义0层为细线,其他层为粗线。这样定义之下,层名等于颜色号,只要记住几个颜色号就可以了。记忆的工作量非常小。
很多朋友定义层是很怪的,“粗实线” “细实线”“中心线”等等,这样定义很不利于快速绘图。

江湖远人 发表于 2011-12-25 11:51:46

在autodesk主页上转的,和大家一起学学,很适合初学者,希望斑竹不要删我的贴!

vlisp2012 发表于 2012-1-2 10:31:25

很好,很适合lisp初学者!!!!!

icefire 发表于 2012-2-1 08:59:19

很好,很有启发,很有帮助,我研究了一段时间,你的更精辟

江湖远人 发表于 2012-2-1 14:15:35

我也是在欧特克官网上看见的,觉得很好,就转了

lqt464028599 发表于 2015-3-29 14:48:01

很不错的东东

huisguiji 发表于 2023-4-7 14:41:13

想学cad插件开发,我学历小学,不知道从哪开始:(

橙子,冲冲冲 发表于 2023-4-7 15:15:09

很细的一条信息,这么多年过去了,这个论坛发表的人越来越少了,我看到好多都是以往的帖子
页: [1]
查看完整版本: 进入CAD二次开发的世界——cad.lisp文件(转)