关于 AutoLISP 兼容性
AutoLISP 程序通常仅需很少的更改就能在最新版本上运行。
但是,AutoLISP 程序在最新版本上可能不再正确运行,因为已更改或已弃用 AutoLISP 函数或基于 AutoCAD 的产品命令或者系统变量。
注: 从基于 AutoCAD 2014 的产品开始,当 SECURELOAD 系统变量设置为 1 或 2 时,自定义应用程序必须在安全模式下工作。当在安全模式下进行操作时,基于 AutoCAD 的产品限制为从受信任的位置加载和执行包含代码的文件;受信任的位置由 TRUSTEDPATHS 系统变量指定。有关详细信息,请参见“关于安全性和病毒防护”。
概述
- 已废弃的命令和系统变量
-
查看自定义程序,查找指定为“已废弃”的命令和系统变量。在某些情况下,已废弃的命令或系统变量仍可供自定义程序使用,即使它在命令提示下无法直接输入或者无法从用户界面访问也是如此。
注: 即使已废弃的命令或系统变量仍可用于自定义程序,但不能保证在将来版本的产品中继续有效。建议您重写自定义程序以避免使用任何已废弃的命令或系统变量。
尝试在自定义程序中使用已废弃的命令或系统变量时,以下技术可能很有用:
- 在命令名称前添加句号作为前缀。例如,.BLIPMODE 允许使用 BLIPMODE 命令。
- 避免使用 COMMAND 函数执行已废弃的系统变量,因为这可能导致出现“未知命令”错误消息;请改用 GETVAR 和 SETVAR 函数。例如,(getvar "BLIPMODE") 返回 BLIPMODE 系统变量的当前值。
注: 使用上述技术无法恢复已从产品中删除的命令和系统变量。
基于 AutoCAD 2020 的产品
- INSERT 命令
-
INSERT 命令现在显示“块”选项板,而新的 CLASSICINSERT 命令显示“旧版”“插入”对话框。如果 AutoLISP 程序依赖于使用“插入”对话框,需要更改现有程序。以前,可能使用以下 AutoLISP 语句来显示“插入”对话框:
(initdia)
(command "insert")
若要继续使用 AutoLISP 程序显示“插入”对话框,需要更改现有程序才能利用以下方法之一:
基于 AutoCAD 2017 的产品及更高版本
- CDATE、DATE 和其他日期\时间相关的系统变量
-
CDATE 和 DATE 系统变量中存储的值不再将当前日期\时间精确表示到最接近的毫秒或百分之一秒。现在,这两个系统变量表示的值的最小时间单位是秒。如果需要追踪的时间间隔小于一秒,请考虑使用 MILLISECS 系统变量返回的值,该系统变量存储了工作站启动后的时间差(以毫秒为单位)。
以下日期\时间相关的系统变量也受毫秒删除的影响:
- TDCREATE
- TDINDWG
- TDUCREATE
- TDUPDATE
- TDUSRTIMER
- TDUUPDATE
如果任何现有的程序需要时间差异精确到最接近的毫秒,则您可以获取存储在 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)))
)
)
)
- EPDFSHX 系统变量
-
随 AutoCAD 2016 Update 1 引入的 EPDFSHX 系统变量已重命名为 PDFSHX。作为名称更改的结果,必须修改任何参照 EPDFSHX 系统变量的 AutoLISP 语句。在自定义程序中,这些函数最可能会受到此更改的影响:
- GETVAR - 将返回一个 nil 值,而不是 0 或 1 的整数值
- SETVAR - 可能会停止程序的执行并生成错误消息;错误:已拒绝 AutoCAD 变量设置:“epdfshx”
- COMMAND - 可能会停止程序的执行并生成错误消息 EPDFSHX 未知命令“EPDFSHX”
基于 AutoCAD 2016 的产品及更高版本
- 数字签名的文件
-
现在可以对 AutoLISP 文件进行数字签名。对 AutoLISP 文件进行数字签名允许将该文件加载到 AutoCAD 图形环境中,而不警告用户该文件不受信任。带数字签名的 VLX 文件无法在基于 AutoCAD 2015 或更早版本的产品中加载。
- osnap 函数
-
osnap 函数不再支持快速 (qui) 对象捕捉模式。必须从所有使用 AutoLISP 程序中的 osnap 函数的语句中删除 qui 模式的参照。如果未删除该模式,osnap 函数将返回 nil,而不是绘图区域中有效点的坐标值。
|