Autolisp里边调用AutoCAD命令的3种方法
AutoLISP
这种脚本语言,从诞生之日起就是用作提高AutoCAD
的制图效率的。和autocad的srcript脚本相比,
它提供更高级一点功能,能够做到script做不到或者很难做到的一些功能。
autolisp历史太久了,快40年了,市面上各种各样的教材太多了。虽然简体中文的教材不太多,但是,质量都还不错, 不少教材,都强调了合理利用内置命令的做法。
在autolisp语言当中,调用autocad内置命令,现在(2023年)有3中方法,
- command
- vl-cmdf
- command-s
下面尝试做一些详细介绍。之前的一篇博客,也做了一点点介绍,有兴趣的可以去看看。
通过 command 调用autocad内置命令
没有去考证command
命令的历史沿革。可以想象的是,这个函数肯定是最早的那批函数之一。autolisp的作用,
就是提供扩展,最基本的扩展方式不就是使用autocad的内置命令吗?
所以,这个函数绝对是最原始的autolisp函数之一。
大概,正是由于command
贴近底层,导致它的兼容性不是很好。为什么呢?因为autocad的命令在不断地变化,
每一次的autocad版本升级,都有可能出现内置命令的改动。当然了,这种改动不是很明显,
尤其对于手动输入命令的方式来说,并不明显。可是,对于依赖于 command
函数 的add-on来说,
这种改动就是很大的兼容性问题了。
通过 vl-cmdf 调用autocad内置命令
vl-cmdf
与 command
几乎一模一样,唯一的区别,vl-cmdf
会提前计算每个传递过来的参数,如果有错,
会中断整个命令。command
的行为,是跟徒手使用键盘敲击命令一样的,提供1个参数就求值一次,有问题就中断,
这是command
的行为方式。
总的来说,这个函数没有什么出彩的地方,除了它是提前求值,然后,它还引入了一些复杂性。根据官方文档的说法,
有些命令在vl-cmdf
工作正常,但是,换到 command
就不正常了。所以,很难进这个函数到底是有用还是没用。
毕竟,在函数式编程的世界里,同一个函数有各种不同的变种这种事情是再常见不过的事情了。
通过 command-s 调用autocad内置命令
command-s
函数很年轻,autocad2012才引入的,是3个函数中最年轻的一个。根据官方文档的说法,
-s
后缀的意思是 subroutine
, subroutine是子程序的意思,在 fortran
和 lisp
的年代,
subroutine
是个很常见的说法。
具体的细节,官方文档并没有说明,可以猜测出来的是,autocad提供了一个专门的处理 command-s
的 “处理器”,
所以才会比 command
快得多!从我个人的实测结果来看, command-s
确实比 command
快多了,
跟 vl-cmdf
不相上下,比entmake
还是差一点。
后记
从性能角度来讲,能使用vl-cmdf
的场合就优先使用它。从兼容性来讲,能使用 command
的就尽量使用它。
至于 command-s
,只能是先通过 command
的验证,再尝试使用 command-s
提高性能。
文章作者 Jack Hsu
上次更新 2023-11-23
许可协议 Copyright © Jack Hsu. All Rights Reserved.