//aardio 调用 AutoCAD LISP 函数 import win; import com.cad; var cad = com.cad(); cad.ShowForeground(); //获取 Lisp 函数表 var lisp = cad.GetLispFunctions(); //AutoCAD 提供的这个接口不是太稳定,调用某些函数偶尔会出现异常(似乎不用绘图函数就行)。 //用这个接口必须用 vl-cmdf 替代 command 调用命令。 lisp.vl.cmdf("commandline") //调用 LISP 函数 var path = lisp.getFiled("打开文件:", "./", "*", 8); //调用 LISP 函数 lisp.print( /* lisp 自身可作为生成 LISP 表达式的函数调用。 可将 aardio 数组或点对表转换为 LISP 表达式。 */ lisp( { {car=12,cdr=23},//LISP 点对 {1,2,3,path},//LISP 列表 {name="Tom",age=23},//LISP 关联列表 "来自 aardio 代码的字符串", 123, false, true } ) ); //这样写也可以 lisp.print( lisp(`((1,2,3) (4 5 6 7 8 9))`) ); //执行 LISP 表达式(此接口基于 cad.GetLispFunctions,限制同上 ) cad.LispExp(`(print '() )` ); /* cad.LispExp 支持模板语法: doc://language-reference/templating/syntax.md LISP 模板由 com.cad.loadcode() 函数解析, 转换规则如下: 一、如果 aardio 输出非空数组或多个参数 , 所有参数按以下规则转换为字符串。 1、数值直接输输出,flase 转为 nil ,true 转为 T 2、数组或嵌套的数组参数都会转换为 LISP 表(首尾有括号), 如果 cons 字段为 true 则转换为点对(首尾有括号)。 3、包含 car,cdr 成员的表会转换为点对(首尾有括号)。 其他名值对转换为关联列表。 4、其他类型统一调用 tostring() 转换为字符串, 然后按 LISP 语法进行转义,首尾加双引号。 最后将所有参数以空格分开输出到 LISP 代码(首尾不加括号) 二、单个表参数为包含 car,cdr 成员的表会转换为点对(首尾有括号)。 如果表参数为其他名值对则转换为关联列表(首尾有括号。 三、其他单个参数直接转为字符串并置入 LISP 代码。 */