|
在 Visual LISP IDE 中,\r 转义字符不能作为回车符使用,文字会紧跟在最后一个打印文字后面显示。解决方法是用 (CHR 13) 代替 \r。
在某些情况下,一个系统变量更改将触发多次 vlr-sysVarWillChange 和 vlr-sysVarChanged 通知。
不再支持未选中对象上的夹点。因此,AutoLISP sssetfirst 函数的 gripset 参数将被忽略,而 ssgetfirst 为第一个返回的选择集返回 nil。
要设置“命令”窗口中的行数,请手动将窗口拉伸到合适的大小,然后再次固定它。不能使用 DockedVisibleLines 特性来设置行数。
如果完全安装了 AutoCAD,则用于使用“真彩色”的实用程序位于 \Sample\VisualLISP 文件夹中的 color-util.lsp 文件中。这些实用程序用于与真彩色相关的操作,例如获取某个真彩色颜色编号的部件,将颜色索引或颜色名转换为真彩色值,返回 DXF 组码列表,以及使用图元列表。
以下 AutoLISP 函数提供了对“真彩色”用户界面的访问:
(acad_truecolordlg color [allowbylayer] [currentlayercolor])。通过对话框提示输入颜色。颜色参数是一个说明默认颜色的点对;点对的第一个元素必须是颜色相关 DXF 组码(62、420 或 430)之一。如果 allowbylayer 参数存在且不为 nil,则显示“随层”和“随块”按钮。如果操作成功,该函数返回说明选定颜色的一个或多个点对的列表。列表中最后一个点对指示选定的颜色。如果用户取消对话框,则该函数返回 nil。
(acad_truecolorcli color [allowbylayer] [alternatePrompt])。在命令行提示输入颜色。前两个参数与 acad_truecolordlg 相同,第三个参数是一个可选提示字符串。如果省略此字符串,则默认值为“新颜色”。
在 AutoCAD 2004 中,entmod 和 entmake 函数现在在颜色操作中具有新的行为。DXF 组码 62 保留 AutoCAD 颜色索引 (ACI) 值,而组码 420 保留真彩色值。如果真彩色值与 ACI 值冲突,AutoCAD 将使用 420 值,因此在试图使用组码 62 值之前应删除组码 420 值。详细信息,请执行 AutoCAD 的完全安装并查看 \Sample\VisualLISP 文件夹中的 color-util.lsp 文件。
当 AutoLISP 例程不再使用 AutoCAD 以外的对象(如 Microsoft Excel 对象)时,请调用 (vlax-release-object) 函数以确保关联的应用程序已正确关闭。使用 (vlax-release-object...) 释放的对象不会立即释放。直到下一个自动空闲内存收集发生时才会进行实际的释放。可以在代码中的特定位置直接调用 (gc) 以强制发生空闲内存收集。然而,调用 (gc) 可能会降低性能,并且建议避免将对 (gc) 的调用放在可能被多次调用的位置,例如循环内。
如果在调用 (gc) 函数之后对象关联的应用程序没有关闭,则表明没有为 AutoCAD 以外的所有对象调用 (vlax-release-object) 函数。
如果 LOAD 加载独立名称空间 VLX 时出现错误,某些函数可能在检测到错误之前已输出到当前的文档名称空间中。必须确保修复此错误、重新编译并重载 VLX,才能确保所有函数的正确版本输出到当前文档。
当 MENULOAD 命令在 MDI 中加载局部菜单时,该菜单的 MNL 文件为每个打开的文档加载一次,同时所有用户交互操作都发生在当前文档中。为避免在用 AutoCAD 打开多个图形时出现多余的打印信息或用户提示,建议在设置 MNL LISP 代码时不要包含任何用户交互操作。请使用 MNL 代码为后续的菜单项选择加载任何所需的 LISP 文件。使用 acad.lsp 或 acaddoc.lsp 文件执行打开图形时要处理的 LISP 代码。
如果用单个正斜杠作为分隔符,则使用 vla-unloadDVB 无法将文件名参数传递到 ActiveX UnloadDVB 方法中。调用 vla-loadDVB、
vla-RunMacro 和 vla-unloadDVB 时,建议用双反斜杠作为分隔符来指定文件名参数。
用于防止文档被标记为“已更新”的函数
两个新函数 acad-push-dbmod 和 acad-pop-dbmod 可用于挂起和恢复 AutoCAD 用于跟踪图形更改的 $DBMOD 记录机制。这些函数使应用程序将更改文档作为其初始化过程的一部分,无需设置 $DBMOD 标志,也不触发不需要的保存图形查询。
(acad-push-dbmod) 将文档的 $DBMOD 系统变量的当前值推入内部堆栈。该函数始终返回 T。
(acad-pop-dbmod) 将 $DBMOD 的值恢复为文档的内部堆栈上最近入栈的值。对于成功的出栈,该函数返回 T;如果堆栈为空,则返回 nil。
acad-push-dbmod 和 acad-pop-dbmod 函数在 acapp.arx 中实现,acapp.arx 默认情况下在 AutoCAD 启动时加载,但是可以禁用(如果需要)。
要使用新函数,请在执行程序操作(该操作应不影响 $DBMOD 值)之前,通过调用使 $DBMOD 值入栈,然后在执行完此操作后将该值出栈。下面是一个简单的 LISP 样例:
(acad-push-dbmod)
(setq new_line '((0 ."LINE") (100 ."AcDbEntity") (8 . "0")
(100 . "AcDbLine") (10 1.0 2.0 0.0) (11 2.0 1.0 0.0)
(210 0.0 0.0 1.0)))
(entmake new_line) ; 设置 $DBMOD 1 标志
(command "_color" "2") ; 设置 $DBMOD 4 标志
(command "_-vports" "_SI") ; 设置 $DBMOD 8 标志
(command "_vpoint" "0,0,1") ; 设置 $DBMMOD 16 标志
(acad-pop-dbmod) ; $DBMOD 将再次具有调用
; acad-push-dbmod 之前的值 |
|