AutoLISP 程序通常仅需很少的更改就能在最新版本上运行。
但是,AutoLISP 程序在最新版本上可能不再正确运行,因为已更改或已弃用 AutoLISP 函数或基于 AutoCAD 的产品命令或者系统变量。
查看自定义程序,查找指定为“已废弃”的命令和系统变量。在某些情况下,已废弃的命令或系统变量仍可供自定义程序使用,即使它在命令提示下无法直接输入或者无法从用户界面访问也是如此。
尝试在自定义程序中使用已废弃的命令或系统变量时,以下技术可能很有用:
CDATE 和 DATE 系统变量中存储的值不再将当前日期\时间精确表示到最接近的毫秒或百分之一秒。现在,这两个系统变量表示的值的最小时间单位是秒。如果需要追踪的时间间隔小于一秒,请考虑使用 MILLISECS 系统变量返回的值,该系统变量存储了工作站启动后的时间差(以毫秒为单位)。
以下日期\时间相关的系统变量也受毫秒删除的影响:
如果任何现有的程序需要时间差异精确到最接近的毫秒,则您可以获取存储在 MILLISECS 系统变量中的值的最后两位或三位数字,并将它们附加到由 CDATE 系统变量返回的值,该值将产生一个与基于 AutoCAD 2016 产品及更早版本中的 CDATE 系统变量所返回的值相当的值。以下代码示例显示了如何基于目标 AutoCAD 版本获取包含毫秒的日期/时间值:
; Returns a CDATE value that includes milliseconds based on release
; Usage: (CDate)
; Replaces (rtos (getvar "CDATE") 2 8)
(defun CDate ( / ms)
; Check to see which AutoCAD release is being used
(if (<= (atof (getvar "ACADVER")) 22.0)
(rtos (getvar "CDATE") 2 8)
(progn
; Get the current milliseconds and append it to the CDATE value
(setq ms (itoa (getvar "MILLISECS")))
(strcat (rtos (getvar "CDATE") 2 6)(substr ms (- (strlen ms) 2)))
)
)
)
随 AutoCAD 2016 Update 1 引入的 EPDFSHX 系统变量已重命名为 PDFSHX。作为名称更改的结果,必须修改任何参照 EPDFSHX 系统变量的 AutoLISP 语句。在自定义程序中,这些函数最可能会受到此更改的影响:
现在可以对 AutoLISP 文件进行数字签名。对 AutoLISP 文件进行数字签名允许将该文件加载到 AutoCAD 图形环境中,而不警告用户该文件不受信任。带数字签名的 VLX 文件无法在基于 AutoCAD 2015 或更早版本的产品中加载。
osnap 函数不再支持快速 (qui) 对象捕捉模式。必须从所有使用 AutoLISP 程序中的 osnap 函数的语句中删除 qui 模式的参照。如果未删除该模式,osnap 函数将返回 nil,而不是绘图区域中有效点的坐标值。