你以为AutoLISP搞cad二次开发很简单
AutoCAD的第1版,发布于1982年12月,到现在已经40多年的历史了。几年之后,1986年1月, 带有全功能的AutoLISP的AutoCAD 2.18版发布了。算起来,AutoLISP面世也快40年了。
从很多方面来讲,拿lisp作为二次开发的编程语言都是合理又恰当的选择。
当时那个年代,除了lisp,其实也没有太多其他的选择。今天红得发紫的javascript、python、lua, 要过好多年十来年才面世。连tcl,也是在1987年秋天,在autolisp发布一年多快两年之后,才有了构想, 1988年春才有了第1版tcl。
lisp语法简单,简单到几乎没有语法,有REPL,写代码的时候是“所见即所得”,非常适合作为二次开发的脚本语言。 事实上,AutoLISP到现在可能仍然是AutoCAD最受欢迎的二次开发语言,其官方论坛在所有的二次开发论坛当中是人气最旺的。
基本上,AutoLISP确实简单,这个结论本身是站得住脚的。
但是,经过几十年的发展变化之后,无论多简单的东西,都有可能变得十分复杂,AutoLISP也是如此。 这里给出几个简单的例子。
生成图元的方法
图元,粗略来讲,就是各种图形元素,比如1个点、1条线。AutoCAD的主要功能就是画图改图,生成图元自然是二次开发的根本需求。
在AutoLISP中,生成图元,至少有3种(类)方法,
- 调用AutoCAD内置命令,
- 使用
entmake, - 使用
vla-add***系列函数,
这里说的AutoLISP是包括 Visual LISP 在内的笼统的说法。
这其中,entmake函数,它还有一个变种entmakex。没错,函数式编程语言就是函数多,LISP就是最经典的函数式编程语言。
生成图元,这样的一件事,就有3中方法,和“只用一种方法做一件事”相比,是不是复杂得不要不要的?
调用AutoCAD内置命令的方法
在上面三种生成图元的方法当中,调用AutoCAD内置命令的方法,其实也有3种,
command函数vl-cmdf函数command-s函数
这个顺序是它们在AutoLISP中出现的顺序,vl-cmdf是跟着 Visual LISP一起引入的,command-s 是在AutoCAD 2012 版引入的。
调用内置命令,为什么要搞3个函数呢?
我也不知道实情。
我知道的是调用内置命令这个功能非常重要,重要到可以把其他的生成图元的方式都砍掉只保留这个。 有一些讲AutoLISP开发的书籍,就反复强调对这个功能的应用,用好了这个功能,足够做出来很好用的cad插件了。
所以,给重要的关键的功能,多提供几个函数,似乎也说得过去。
只是,做一件事情有三种方法,这终究是增加了这个事情的复杂性。
没那么简单
没那么简单。
这就是结论。
文章作者 Jack Hsu
上次更新 2023-11-20
许可协议 Copyright © Jack Hsu. All Rights Reserved.