少量属性与几何对象优先直接 COM;批量循环可放进 LISP。是否更快应按同等图形和刷新条件实测,不能承诺固定倍数。 任务开始时固定 doc;默认不覆盖保存、不退出 CAD。实体身份记录为文档+Handle。明确单位、WCS/OCS、模型/布局,几何数据与图像分别验收。字符串参数用 内联 LoadLisp/RunLisp 直接发命令,不生成临时 LSP,不修改加载设置。NetLoad 在 CAD 允许时于同一次执行内临时调整并恢复;受限时保留原生提示或拒绝,不绕过锁定,不要求调用者管理安全选项。显式 LoadLispFile 仍遵守 CAD 的文件加载策略。命令使用英文全局名,如 自动化规则
选择接口
完成与错误
SendCommand 通常同步,但交互和事件上下文可能异步;PostCommand 是排队。二者都没有业务结果。超时不表示取消,禁止直接重放绘图、删除或保存操作。空闲状态与固定延时不是任务完成证明。数据与图纸
com.cad.lispValue 编码;单字符串模板输出是原样代码,不能直接嵌入不可信输入。安全与兼容
_.NETLOAD,不按产品年份猜测设置是否可写。
将 AutoCAD.Application 兼容对象(原生 COM 对象)封装为 com.cad 对象。
保留已有 ProgId;原生对象的接口类型在已知映射中时自动补齐 ProgId。未知接口不猜测产品。
连接已有 AutoCAD.Application 兼容实例,失败时尝试创建。
可选指定一个或多个 ProgID,
默认依次尝试 "AutoCAD.Application","GStarCAD.Application","ZWCAD.Application","BricscadApp.AcadApplication","IJCAD.Application", "AresCommander.Application"。
startIfMissing 默认 true:先连接 AutoCAD 兼容实例,再尝试创建。
startIfMissing=false:仅尝试连接例,不启动新实例。
后台启动(保持 Visible=false)仍在 ROT 可见并允许仅连接方式获取该对象。
可选指定一个或多个 ProgID,
默认依次尝试 "AutoCAD.Application" ... 等兼容 ProgID 。
AutoCAD 及兼容 CAD 的 COM 支持库;不依赖 Autos。
保留原生 COM 对象模型,按产品能力选择接口,不按窗口类名识别。
使用指南
连接或创建 AutoCAD.Application 兼容实例。
容跨 32/64 位 COM;不保证不同 CAD 产品的所有 API 一致。
成功返回对象;失败返回 null,错误信息;失败不会抛出异常。
调用fn(...),仅对已识别COM拒绝作有限重试,重试前按剩余预算延时,最多设为100毫秒。返回true,返回值...或false,错误。
timeout为从首次尝试起计的重试预算(毫秒),不是硬超时;2000不保证2秒内返回,不能打断阻塞的COM方法。timeout=0仍调用一次。
fn只能包无副作用查询或单个可重试调用,不能包装多步写操作。未知错误不重试,不是任务完成或业务成功的判断。
显式 UI 恢复:向前台 CAD 发送两次 Esc,返回 true 仅表示已发送按键。
优先使用空闲时从 cad.HWND 缓存的主窗口句柄,不用写死的类名。
activate=true 才尝试前置窗口;非目标前台或修饰键按下时拒绝。
不是任务级取消/回滚,不自动调用;随后应重新检查 CAD 状态和任务回执。
for app,interfaceName in com.cad.eachRunning() {
print(app.ProgId)/*查找与遍历 COM 运行时对象表中的 AutoCAD 兼容对象。
同一 CAD 始终单实例,后台启动(保持 Visible=false)仍在 ROT 可见。
参数 interfaces 可选指定要查找的接口名或接口名数组。
默认值为 ["IAcadApplication","IGcadApplication","IZcadApplication",
"IBricscadApp","IIJCadApplication","IAresCommanderApplication"]
IAcadApplication,IZcadApplication,IGcadApplication 始终单实例。
返回的迭代变量 app 为 com.cad 对象,interfaceName 为对象的接口名。
*/
}
只识别明确COM拒绝接收的0x80010001/0x8001010A HRESULT,忽略大小写。
普通null方法错误不能证明调用未执行,不属于此类。
状态接口适配;供内部原生doc.Application调用,通常使用cad.IsQuiescent()。
将一个数据值编码为 LISP 字面量。字符串转义并加引号;false/null 为 nil,true 为 T。
表转换为列表或关联列表;不把字符串视为符号或代码。
适合把路径和外部数据嵌入表达式,不能用于执行不可信代码。
表/数组转 LISP 列表。part=true 仅取消普通参数列表的外层括号。
car/cdr 表或 cons=true 数组转换为点对;点对与关联列表始终保留括号。
支持 null 值的点对、嵌套列表与循环引用检测。空表/数组为 ()。
列表索引上限 100000;末尾需要保留 LISP nil 时使用 false 占位,因为 aardio 不保存尾部 null 元素。
渲染 aardio 模板,返回字符串;失败返回 null,错误信息。
第一个模板参数同时作为 owner。单字符串输出为原样代码;字符串数据请用 lispValue 或数组。
单个布尔值也会转为 T/nil。错误发生后恢复 print,不弹出错误对话框。
WM_COPYDATA 兼容通道。默认 dataType=1,支持命令模板。
仅向指定主窗口发送;消息返回值不是业务完成回执。
这是旧的同步 SendMessage 通道,目标无响应时可能阻塞,自动化优先使用 COM。
激活本文件;只在确实需要命令/视图上下文时调用。
当前布局,Name 为布局名称。
关闭文档;测试图纸可显式 Close(false),不能据此丢弃用户更改。
原生导出,BMP 可用于图像反馈;文件名不带扩展名。
为无人值守操作传入非空选择集,空选择集可能要求人工选择。
最小化时可能得到旧画面;授权还原目标窗口、明确文档/布局并重生成后再导出。
输出由 CAD 视图决定,不是指定分辨率的通用渲染器;BMP 可用 gdip 转 PNG。
已保存文件的完整路径;未保存文档可能为空。
获取系统变量;未知变量会产生 COM 错误。
文档窗口句柄。
在本文件中按句柄查询实体;句柄不存在时可能产生 COM 错误。
图层集合,支持 Add(name)、Item(name)、Count。
模型空间实体集合。坐标系和单位必须按具体 API 确认。
文档名称。
图纸空间实体集合。
文件目录,不含文件名。
原生 Document 方法:原样异步排队,不补回车。
完整命令建议以实际 CR(ASCII 13)结束,不要与增强 cad.PostCommand 混用。
返回不是执行回执,目标文档的活动/焦点状态影响执行时机。
是否只读。
重生成视图;0 为当前视口,1 为所有视口。批量修改后统一调用。
保存到原文件;需用户明确同意覆盖。
另存为,显式指定完整路径;可选版本枚举与安全参数。
是否已保存当前更改。
选择集集合,Add(name) 创建命名选择集;使用后 Delete() 清理选择集而非实体。
原生 Document 方法:不处理 aardio 模板,不补回车。
完整命令建议以实际 CR(ASCII 13)结束;缺少终止符可能只停在输入区。
通常同步,交互/事件上下文可能异步;返回不代表业务成功。
注意:只有增强 cad.SendCommand 才自动补 CR,即使 doc 来自 cad.ActiveDocument 也不例外。
设置系统变量;类型必须精确匹配,16 位整型用 com.word,Double 用 com.double。
临时修改应按执行边界恢复,不静默修改安全/全局配置。
文本样式集合,属于 Document 而不是 Application。
窗口状态:acMin、acMax、acNorm。
新建文档,可选指定模板路径。
打开文档总数。
按从 0 开始的索引或名称取得文档。
打开图纸;文件路径先用 io.fullpath 展开。
ACI 颜色,256 为 ByLayer。
删除实体;与 SelectionSet.Delete 仅删除选择集不同。
获取 WCS 包围盒,参数为 COM 输出引用。
文档内的实体句柄字符串,身份应记录为文档+句柄。
实体所属图层名称。
实体类型名,如 AcDbCircle、AcDbLine。
真彩色对象,常与 GetAcCmColor 配合。
更新显示;不是保存到磁盘。
按函数名调用;有连字符时用字符串下标。
计算 LISP 表达式,返回的值可能是 COM 包装对象。
读取第一个 LISP 表达式,不执行。
调用 vl- 前缀的 Visual LISP 函数。
原生 Document 对象,不继承增强 cad 实例的辅助方法。
任务开始时取得并固定 doc,不要执行中反复取活动文档。
原生 CAD 应用程序对象。
将 C# 源码或 .cs 文件编译为 CAD 插件 DLL,不执行 aardio 模板。
自动识别实际 CAD runtimeconfig;旧 Framework 沿用内置编译器,NET8+ 使用 process.dotnet,已有较新 SDK 优先复用,未知目标才选最新稳定 SDK。
成功返回 DLL路径、null、诊断表;失败返回 null、错误、诊断表(phase/output/stderr/exitCode/logPath 等)。
每次自动生成唯一构建目录、程序集身份和 DLL 文件名,不覆盖已加载文件。
可选 directory 为构建根目录,references 为额外 DLL 路径数组,sdkOptions 为 process.dotnet 的选项表。
不创建图纸、不自动 NETLOAD、不修改 CAD 信任策略,不提供热卸载或同名命令替换。
编译与加载指南
创建回执任务但不提交。省略doc只使用已有活动文档,不自动新建;显式doc须属于当前实例。
code 是原始 LISP 源码,不是模板或路径;LISP 局部变量 args 接收参数。
options 可指定 method、timeout、startTimeout、directory、resultEncoding、codepage。
默认AutoCAD为post/utf8,浩辰post/ansi,中望send/ansi;显式选项优先。timeout=10000,startTimeout=30000。
COM 文档集合,下标从 0 开始,用 Count 获取数量。
计算 VBA 表达式;不是 LISP 执行器。
获取 CAD 真彩色对象;常用 SetRGB(r,g,b),随后赋给实体 TrueColor。
原生AutoCAD状态接口;兼容CAD优先使用IsQuiescent()。
在 ProgID 后追加当前 CAD 主版本,再获取 CAD 接口。
在 CAD 进程内获取指定完整 ProgID 的接口。
获取图层状态管理器。
获取活动文档 Visual LISP 函数接口。旧兼容通道,不作为 AI 默认入口。
新任务接口不调用此函数;优先用 CreateLispTask/RunLisp 获取数据和回执。
使用固定 ProgID vl.application.16,不应把后缀改成 CAD 主版本。
不要在使用期间切换文档;命令函数受上下文限制。疑似原生崩溃应独立进程诊断。
获取文件安全参数对象。
CAD 应用程序主窗口句柄,不是文档句柄。
只读实例/文档身份快照,含ProgId、version、hwnd、quiescent、documents及activeDocument。缺状态接口时quiescent为null并附warning;返回info,err,不新建/激活图纸。
统一GetAcadState/GetZcadState的小差异;失败不视为空闲,不证明任务完成。
旧 Visual LISP COM 通道,AI 自动化优先用 RunLisp/CreateLispTask。
读取并执行第一个表达式,无业务返回值。支持模板;多表达式需放进 progn。
绑定活动文档。怀疑原生接口导致宿主崩溃时应在独立进程诊断,不在主进程反复重试。
列出已加载 ARX 应用。
加载受信任的 ARX 应用。
加载 VBA 工程,路径自动展开;其中 AcadStartup 宏可能自动执行。
加载 LISP 代码或文件,支持 aardio 模板。
.lsp 文件交给 LoadLispFile;内联代码经命令通道直接提交,不再生成 ANSI 临时文件。
返回不代表业务成功。大型程序建议部署到明确可信目录后 LoadLispFile。
可显式指定目标 doc,省略时使用/创建活动文档。
加载指定 LSP 文件。必须事先存在并符合 CAD 的文件加载策略。
非可信文件可能触发提示或被拒绝;内联代码可直接使用 LoadLisp/RunLisp,无需临时文件。
遵循文件编码和 LISPSYS 设置;不自动修改需重启的 LISPSYS。
CAD 主版本号数值。
CAD 主版本号字符串,例如 24、25,不是发行年份。
加载 CAD 插件 DLL,无需额外选项。
在 CAD 允许时临时关闭加载检查,并在同一次加载结束后恢复原值;受限或不支持时沿用 CAD 原生提示/拒绝,不绕过锁定。
底层原生 SendCommand 通常同步,遇交互可能异步;返回不是插件业务成功回执。
DLL 与 CAD 运行时必须匹配,建议由 CompileCSharp 编译;加载后不能卸载直到 CAD 退出。
CAD 安装目录。
增强 cad 实例的异步排队入口,不是原生 doc.PostCommand。
支持模板;文档参数和末尾回车规则同增强 SendCommand。
CAD 在合适的空闲状态执行;返回不代表执行成功,超时不等于取消,不应重放有副作用代码。
原生BMP转PNG;非空句柄数组、活动可见非最小化且空闲的doc。options为{path;zoom}或PNG路径。
zoom可省略或handles/extents;临时缩放后恢复/回读原视图,检查viewRestored/cleanupWarning。输出不覆盖,不只渲染所选实体。返回image,err。
对象的 ProgID / CLSID
退出 CAD;自动化助手不应擅自退出用户正在使用的实例。
继续读取/等待原任务,返回result,err,task;不重发。省略doc可离线,传doc不覆盖原nudge设置。
在 .NET8+ AutoCAD 内编译并执行短生命周期C#源码,返回result,err,task。
源码或.cs路径;JSON参数由args传入;省略doc使用活动文档,不自动创建图纸。
内部复用一次加载的宿主及Roslyn,普通脚本不反复dotnet build/NETLOAD。
options沿用任务选项,另有hostDirectory、sdkOptions。首次加载沿用NetLoad规则,CAD有提示时由用户处理。
固定5参数Execute入口、宿主管理事务、JSON结果和恢复用法见指南;不是安全沙箱或保证可回收的热卸载。
短脚本指南
创建、保存journal、唯一提交并等回执,返回result,err,task。
结果含taskPath/elapsed/journal;journal写失败不提交。执行由com.cad.task统一实现。
result.ok=true 仅在执行且结果序列化成功时成立。超时为未知,不是取消。
任务记录留在 task.path,可用 com.cad.task.open 恢复查询。
默认 PostCommand;兼容 CAD 可显式 method=send,但 wait 超时无法打断阻塞的 COM 调用。
运行 VBA 宏;需安装对应 VBA 支持。
捕获预选count/handles/truncated,0只计数。空选区不回退全图;不改变选择。返回data,err。
增强 cad 实例的命令发送入口,不是原生 doc.SendCommand。
支持 aardio 模板、文件或资源文件;物理换行统一为 CR,末尾缺少 CR 才补一个,显式尾部空行保留。
通常同步;交互/事件上下文可能异步。无业务返回值,不自动重试。
可显式指定 doc;省略时使用活动文档,无文档时沿用旧接口行为创建文档。
不修改 CMDECHO。优先使用已有的直接 COM 方法。
向本实例主窗口发送 WM_COPYDATA;限制同 com.cad.sendCopyData。
显式设置 SECURELOAD:0 不限制加载位置;1 非可信位置警告;2 只允许可信位置。
内部使用 com.word 并读回验证;成功返回 true,原值,失败返回 null,错误信息,不重试。
省略 doc 时使用活动文档,不自动新建图纸。加载函数不会自动调用本方法。
设置保存于注册表,不限于一次 LISP 加载,不自动恢复。管理员锁定或 AutoCAD 2026 起 PROJECTAWARE=1 时可能不可修改。
内联 LoadLisp/RunLisp 不加载临时 LSP 文件,无需为这条路径关闭 SECURELOAD。
显示、还原并前置 CAD 主窗口;不要在后台任务中无必要地抢焦点。
创建并尝试提交一次,返回 task,err。
即使 COM 提交异常也保留 task;先检查 err,再 read/wait,不自动重发。
一次只读LISP聚合单位/布局/类型/图层/块/文字样本;只统计顶层。textSample默认20,0禁用,最大200。返回data,err。
卸载 ARX 应用。
卸载 VBA 工程。
CAD 版本字符串;应用版本不可用时仅查询已有活动文档,无文档返回 null,不自动建图。
是否显示 CAD;部分图形与交互功能依赖可见窗口。
缩放活动文档视图到图形范围;只改变视图,不改变几何数据。
是否能访问 VBA 环境。
添加圆;WCS 三维圆心与正半径。
添加填充。ANSI31 使用预定义类型 1。
先准备边界;AddHatch 后立即 AppendOuterLoop,再设置其他属性并 Evaluate。
添加直线;两个 WCS 三维坐标数组。
添加单行文本;插入点和正字高。
实体数量。
按从 0 开始的索引取得实体。