AutoCAD 2008至今,发布了十几个大版本了,算上20xx.x这种小版本,可能已经二十多个三十个了。 这其中,有些版本引入了新特性,有些版本纯粹是商业策略上的考虑,毕竟,每个大版本的升级是可以收费的, 每个大版本的SDK的不兼容,大概也是类似的原因造成的。

从内置功能和autolisp的api上讲,2008版至今有几次大的升级,实质性的大,无法忽略的那种大。

2008版:引入了mleader

首先要说的就是2008版,mleader的引入绝对是一个很大的改进。

在此之前,autocad对leader的支持,只有leader这一种内置图元,而且,严格来讲, autocad的leader仅仅只是一个符号,算不上一个图元。因为,通过leader命令画出来的, 是1个箭头引线,以及1个text,两者是不关联的,是2个图元。2个图元带来的问题, 就是你无法一次性完成相关的编辑操作。

mleader则是完全不一样的东西,它才是真正意义上的引线标注,你标注出来的是1个图元,就像尺寸标注一样。

2009版:autolisp引入initcommandversion函数

这个函数解决的就是命令版本的引起的不兼容问题。

autocad太古老了,内置命令不可避免地存在修改的情况。这些修改,对于普通的用户来讲,不存在太多的问题, 通过命令行回显就可以把改动造成的影响消除掉。对于二次开发来说,命令的改动可能就是致命的问题, 因为,命令的行为如果无法预期,二次开发根本上来讲是无法进行下去的,假如你在开发当中调用内置命令的话。

2011版:autolisp引入4个操作property的函数

2011版引入了4个操作property的函数:

  • dumpallproperties
  • getpropertyvalue
  • ispropertyreadonly
  • setpropertyvalue

这4个函数,使得操作图元的属性变得更加简单了,以往通过entget或者vla-*系列函数实现的功能, 现在可以直接通过这4个函数直接做出来了。

根据autocad官网文档的说法,这4个函数是为了弥补autocad mac版没有activex进而没有vla-*系列函数的问题。

2012版:autolisp引入command-s函数

autocad 2012版的autolisp接口,引入了4个新函数,其中之一是 command-s 函数,其余的3个是错误处理方面的函数。

在我看来,autolisp在错误处理上确实很欠缺,实际操作上,基本上分成处理和不处理两个流派。我是倾向于不予处理的, 我大部分的代码都没有写错误处理,小部分写了最基本的恢复系统变量的错误处理。

所以,我觉得2012版最大的改进在于command-s函数。这个函数是一个特殊版的command函数的,-s 代表的是subroutine, subroutine就是子函数的意思。根据官方文档的说法,command-s 有自己的命令解释器,命令参数解释之后会直接发送给autocad, command 则使用的是autocad图形界面上命令行那个命令解释器,所以,command-s 速度更快性能更好。

2021版:autolisp引入对unicode的支持

客观来讲,对unicode的支持早就应该做出来了,不难猜测,出现这种局面肯定也是商业上的考虑,因为,autolisp不挣钱啊。

autolisp对unicode的支持,包括2个方面,

  • 字符串
  • lsp文件

可以直接处理utf-8编码的字符串,可以直接使用utf-8编码的lsp文件。

这个特性用处非常大,因为现在默认采用utf-8编码的文件格式太多了,比如json、markdown,根本就没法回避这些东西。 此前,想要读取这些文件,只能调用windows上的其他activex组件来曲线救国。