# com.cad 库模块帮助文档

<details>  <summary>模板语法</summary>  <p>
com.cad.sendCopyData 函数
以及 com.cad 对象的 LispExp,SendCommand 函数
支持[模板语法](https://www.aardio.com/zh-cn/docs/language-reference/templating/syntax.html)

LISP 模板由 com.cad.loadcode() 函数解析，
转换规则如下：

一、如果 aardio 输出非空数组或多个参数 ，
所有参数按以下规则转换为字符串。

1. 数值直接输输出，flase 转为 nil ，true 转为 T
2. 数组或嵌套的数组参数都会转换为 LISP 表（首尾有括号）， 
	如果 cons 字段为 true 则转换为点对（首尾有括号）。
3. 包含 car,cdr 成员的表会转换为点对（首尾有括号）。
	其他名值对转换为关联列表。
4. 其他类型统一调用 tostring() 转换为字符串，
然后按 LISP 语法进行转义，首尾加双引号。 

最后将所有参数以空格分开输出到 LISP 代码（首尾不加括号）

二、单个表参数为包含 car,cdr 成员的表会转换为点对（首尾有括号）。
如果表参数为其他名值对则转换为关联列表（首尾有括号。

三、其他单个参数直接转为字符串并置入 LISP 代码。
</p></details>

## com 成员列表 <a id="com" href="#com">&#x23;</a>

### com.cad() <a id="com.cad" href="#com.cad">&#x23;</a>
获取已存在的 AutoCAD 实例，或创建新的 AutoCAD 实例。  
兼容 32 位 / 64 位 AutoCAD。  

[返回对象:ComCadObject](#ComCadObject)

## com.cad 成员列表 <a id="com.cad" href="#com.cad">&#x23;</a>

AutoCAD 支持库。  
兼容 32 位 / 64 位 AutoCAD

### com.cad.list(array) <a id="com.cad.list" href="#com.cad.list">&#x23;</a>
aardio 数组转换为 LISP 表代码，  
参数 @2 为 true 时首尾不添加括号  

如果 car,cdr 字段不为 null 且不含数组成员，  
或包含数组成员，但 cons 字段为 true，  
则返回点对，点对总是在首尾添加括号。  
其他名值对转换为关联列表。

### com.cad.loadcode() <a id="com.cad.loadcode" href="#com.cad.loadcode">&#x23;</a>
加载 aardio 模板代码返回 LISP 代码，  
可指定多个模板参数

### com.cad.sendCopyData(hwnd,data,args,dataType) <a id="com.cad.sendCopyData" href="#com.cad.sendCopyData">&#x23;</a>
用 _WM_COPYDATA 向 AutoCAD 窗口发送数据。  
@hwnd 为 AutoCAD 主窗口句柄，  
@data 为 需要发送的字符串，发送命令时支持模板语法，  
@args 发送命令时，可选用这个参数指定@data 使用的模板参数，  
@dataType 省略时默认值为1，为 1 表示发送到 AutoCAD 命令窗口并执行该命令。  
发送成功返回1，否则返回0

## ComCadDocObject 成员列表 <a id="ComCadDocObject" href="#ComCadDocObject">&#x23;</a>

### ComCadDocObject.Activate() <a id="ComCadDocObject.Activate" href="#ComCadDocObject.Activate">&#x23;</a>
激活文档

### ComCadDocObject.Close(saveChanges,filename) <a id="ComCadDocObject.Close" href="#ComCadDocObject.Close">&#x23;</a>
关闭文档  
可选用 @saveChanges 指定是否保存更改。  
@filename 的綻文件路径，建议用 io.fullpath 转换为完整路径

### ComCadDocObject.GetVariable(name) <a id="ComCadDocObject.GetVariable" href="#ComCadDocObject.GetVariable">&#x23;</a>
获取系统变量值

### ComCadDocObject.Name <a id="ComCadDocObject.Name" href="#ComCadDocObject.Name">&#x23;</a>
名称，只读

### ComCadDocObject.Path <a id="ComCadDocObject.Path" href="#ComCadDocObject.Path">&#x23;</a>
路径，不含文件名

### ComCadDocObject.ReadOnly <a id="ComCadDocObject.ReadOnly" href="#ComCadDocObject.ReadOnly">&#x23;</a>
是否只读模式

### ComCadDocObject.Save() <a id="ComCadDocObject.Save" href="#ComCadDocObject.Save">&#x23;</a>
保存文档

### ComCadDocObject.SaveAs(fileName,fileType,securityParams) <a id="ComCadDocObject.SaveAs" href="#ComCadDocObject.SaveAs">&#x23;</a>
保存文件  
@fileName 指定文件路径，请用 io.fullpath 先转换为完整路径。  
@fileType 指定保存类型（枚举类型 AcSaveAsType ），  
└── 可用 console.dump 列出 COM 对象枚举类型的可用名值对  
└── 枚举名可作为 COM 对象的成员名获取枚举值  
@securityParams 为可选参当，用法请参考 AutoCAD 文档

### ComCadDocObject.Saved <a id="ComCadDocObject.Saved" href="#ComCadDocObject.Saved">&#x23;</a>
是否已保存所有更改

### ComCadDocObject.SetVariable(name,value) <a id="ComCadDocObject.SetVariable" href="#ComCadDocObject.SetVariable">&#x23;</a>
设置系统变量值，  
@name 指定变量名，@value 变量值，值的类型一定要匹配，  
VBA里的 Integer 类型 0 在 aardio 中要写为 com.word(0)，  
VBA里的 Double  类型 0 在 aardio 中要写为 com.double(0)

### ComCadDocObject.WindowState <a id="ComCadDocObject.WindowState" href="#ComCadDocObject.WindowState">&#x23;</a>
文档状态，可读写。  
通过此对象的成员名字可获取此属性可用的 COM 常量值：  
acMin 窗口为最小化  
acMax 窗口为最大化  
acNorm  窗口为常规窗

## ComCadLspFunctionsObject 成员列表 <a id="ComCadLspFunctionsObject" href="#ComCadLspFunctionsObject">&#x23;</a>

### ComCadLspFunctionsObject.* <a id="ComCadLspFunctionsObject.any" href="#ComCadLspFunctionsObject.any">&#x23;</a>
请指定需要调用的 Visual LISP 函数名，  
如果函数名包含横线等，也可以使用下标操作符，例如["函数名"]

### ComCadLspFunctionsObject.eval() <a id="ComCadLspFunctionsObject.eval" href="#ComCadLspFunctionsObject.eval">&#x23;</a>
计算并返回参数 @1 指定的 LISP 表达式的值

### ComCadLspFunctionsObject.read() <a id="ComCadLspFunctionsObject.read" href="#ComCadLspFunctionsObject.read">&#x23;</a>
读取字符串参数 @1 指定的 LISP 代码  
返回第一个表或第一个原子

## ComCadLspFunctionsObject.vl 成员列表 <a id="ComCadLspFunctionsObject.vl" href="#ComCadLspFunctionsObject.vl">&#x23;</a>

### ComCadLspFunctionsObject.vl.* <a id="ComCadLspFunctionsObject.vl.any" href="#ComCadLspFunctionsObject.vl.any">&#x23;</a>
请指定需要调用的 Visual LISP 函数名（自动添加  "vl-" 前缀）。

### ComCadLspFunctionsObject.vl.cmdf("commandline") <a id="ComCadLspFunctionsObject.vl.cmdf" href="#ComCadLspFunctionsObject.vl.cmdf">&#x23;</a>
调用 vl-cmdf 函数执行命令。  
通过此接口只能调用 vl-cmdf 执行命令，调用 command  是无效的。

## ComCadObject 成员列表 <a id="ComCadObject" href="#ComCadObject">&#x23;</a>

### ComCadObject.ActiveDocument <a id="ComCadObject.ActiveDocument" href="#ComCadObject.ActiveDocument">&#x23;</a>
当前活动文档，可读写属性  

[返回对象:ComCadDocObject](#ComCadDocObject)

### ComCadObject.Application <a id="ComCadObject.Application" href="#ComCadObject.Application">&#x23;</a>
应用程序对象

### ComCadObject.Eval() <a id="ComCadObject.Eval" href="#ComCadObject.Eval">&#x23;</a>
计算 VBA 表达式

### ComCadObject.GetAcCmColor() <a id="ComCadObject.GetAcCmColor" href="#ComCadObject.GetAcCmColor">&#x23;</a>
获取 AutoCAD 进程内颜色管理对象

### ComCadObject.GetAcadState().IsQuiescent <a id="ComCadObject.GetAcadState" href="#ComCadObject.GetAcadState">&#x23;</a>
AutoCAD 当前是静止状态

### ComCadObject.GetCadInterfaceObject() <a id="ComCadObject.GetCadInterfaceObject" href="#ComCadObject.GetCadInterfaceObject">&#x23;</a>
使用参数指定的 ProgID 在 AutoCAD 进程内加载 AutoCAD 提供的 COM 对象,  
与 GetInterfaceObject 不同的是 GetCadInterfaceObject 会在参数后自动添加当前主版本号

### ComCadObject.GetInterfaceObject() <a id="ComCadObject.GetInterfaceObject" href="#ComCadObject.GetInterfaceObject">&#x23;</a>
使用参数指定的 ProgID 在 AutoCAD 进程内加载 COM 对象

### ComCadObject.GetLayerStateManager() <a id="ComCadObject.GetLayerStateManager" href="#ComCadObject.GetLayerStateManager">&#x23;</a>
获取 AutoCAD 进程内图层管理器对象

### ComCadObject.GetLispFunctions() <a id="ComCadObject.GetLispFunctions" href="#ComCadObject.GetLispFunctions">&#x23;</a>
获取活动文档 Visual LISP 函数列表。  
可通过调用返回对象的成员函数调用 LISP 函数。  

返回对象自身可作为生成 LISP 表达式的函数使用：  
参数可指定 aardio 数组或多个参数；  
也可以指定包含 car,cdr 字段的表，用于返回点对；  
参数为一个字符串时，作为 LISP 代码读取并返回表  
已知限制：  
1、此接口加载的 LISP 代码无法调用 command 命令  
2、AutoCAD 这个接口不太稳定，调用某些函数偶尔会出现  

[返回对象:ComCadLspFunctionsObject](#ComCadLspFunctionsObject)

### ComCadObject.GetSecurityParams <a id="ComCadObject.GetSecurityParams" href="#ComCadObject.GetSecurityParams">&#x23;</a>
获取 AutoCAD 进程内安全参数对象

### ComCadObject.HWND <a id="ComCadObject.HWND" href="#ComCadObject.HWND">&#x23;</a>
窗口句柄

### ComCadObject.LispExp() <a id="ComCadObject.LispExp" href="#ComCadObject.LispExp">&#x23;</a>
读取并执行字符串中的第一个 LISP 表达式，此函数无返回值。  
参数@1支持 aardio 模板语法，其他参数为模板参数。  
[aardio 模板语法](https://www.aardio.com/zh-cn/docs/language-reference/templating/syntax.html)  
aardio 模板中非数值、非布尔值一律转字符串,  
一次输出多个模板参数或数组时，字符串自动转义并加引号，多参数以空格分开。  
已知限制：  
1、此接口加载的 LISP 代码无法调用 command 命令  
2、AutoCAD 这个接口不太稳定，调用某些函数偶尔会出现

### ComCadObject.ListARX() <a id="ComCadObject.ListARX" href="#ComCadObject.ListARX">&#x23;</a>
获取已加载的 ARX 应用程序

### ComCadObject.LoadARX() <a id="ComCadObject.LoadARX" href="#ComCadObject.LoadARX">&#x23;</a>
加载参数@1指定的 ARX 应用程序

### ComCadObject.LoadDVB() <a id="ComCadObject.LoadDVB" href="#ComCadObject.LoadDVB">&#x23;</a>
加载 .dvb 工程，无返回值。  
参数 @1 指定 .dvb 工程文件路径。  

工程中名为 AcadStartup 的宏将自动运行。

### ComCadObject.LoadLisp <a id="ComCadObject.LoadLisp" href="#ComCadObject.LoadLisp">&#x23;</a>
加载 LISP 代码。  
参数支持[aardio 模板语法]https://www.aardio.com/zh-cn/docs/language-reference/templating/syntax.html

### ComCadObject.LoadLisp(lisp,args,doc) <a id="ComCadObject.LoadLisp" href="#ComCadObject.LoadLisp">&#x23;</a>
加载 LISP 代码。  
参数@1可以是文件、资源文件、或 LISP 代码，  
支持 aardio 模板语法,可选用 @args 参数指定模板 owner 参数，  
可选用参数 @3 自定义执行此函数的文档对象。  

已加载的 LISP 代码无法卸载，可通过赋值 nil 删除定义的函数。

### ComCadObject.LoadLispFile <a id="ComCadObject.LoadLispFile" href="#ComCadObject.LoadLispFile">&#x23;</a>
加载 *.lsp 代码文件

### ComCadObject.LoadLispFile(path,doc) <a id="ComCadObject.LoadLispFile" href="#ComCadObject.LoadLispFile">&#x23;</a>
加载 *.lsp 代码文件，  
参数@1指定 *.lsp 代码文件路径，  
可选用参数 @2 自定义执行此函数的文档对象

### ComCadObject.MajorVersion() <a id="ComCadObject.MajorVersion" href="#ComCadObject.MajorVersion">&#x23;</a>
AutoCAD 主版本号，数值。  
例如 AutoCAD 2022 主版本号为 24。

### ComCadObject.MajorVersionString() <a id="ComCadObject.MajorVersionString" href="#ComCadObject.MajorVersionString">&#x23;</a>
AutoCAD 主版本号，字符串值。  
例如 AutoCAD 2022 主版本号为 24。

### ComCadObject.NetCompiler("C#") <a id="ComCadObject.NetCompiler" href="#ComCadObject.NetCompiler">&#x23;</a>
使用当前线程默认应用程序域创建 C&num; 编译器。  
需要先导入 dotNet 库

### ComCadObject.NetCompiler() <a id="ComCadObject.NetCompiler" href="#ComCadObject.NetCompiler">&#x23;</a>
[返回对象:dotNetCompilerObject](https://www.aardio.com/zh-cn/docs/library-reference/dotNet/appDomain.html#dotNetCompilerObject)

### ComCadObject.NetLoad <a id="ComCadObject.NetLoad" href="#ComCadObject.NetLoad">&#x23;</a>
加载 .Net DLL。  
退出 AutoCAD 进程时自动卸载，没有卸载函数

### ComCadObject.NetLoad(path,doc) <a id="ComCadObject.NetLoad" href="#ComCadObject.NetLoad">&#x23;</a>
加载 .Net DLL，  
参数@1指定 *.dll 文件路径，  
可选用参数 @2 自定义执行此函数的文档对象

### ComCadObject.Path <a id="ComCadObject.Path" href="#ComCadObject.Path">&#x23;</a>
AutoCAD 安装目录

### ComCadObject.PostCommand <a id="ComCadObject.PostCommand" href="#ComCadObject.PostCommand">&#x23;</a>
异步发送 AutoCAD 命令  
[参数支持 aardio 模板语法](https://www.aardio.com/zh-cn/docs/language-reference/templating/syntax.html)

### ComCadObject.PostCommand(cmd,args,doc) <a id="ComCadObject.PostCommand" href="#ComCadObject.PostCommand">&#x23;</a>
异步发送 AutoCAD 命令，  
参数@1可以是文件、资源文件、LISP 表达式、命令，  
每句命令应以空格或回车结束,  
尾部的回车可省略  

支持 aardio 模板语法,模板中非数值、布尔值一律转字符串,  
一次输出多个模板参数时,字符串自动加引号,多参数自动以空格分开,  
可选用 @args 参数指定模板 owner 参数，  
可选用参数 @3 自定义执行此函数的文档对象

### ComCadObject.Quit() <a id="ComCadObject.Quit" href="#ComCadObject.Quit">&#x23;</a>
退出应用程序

### ComCadObject.RunMacro() <a id="ComCadObject.RunMacro" href="#ComCadObject.RunMacro">&#x23;</a>
运行 VBA 宏，无返回值。   
参数 @1 指定宏路径，格式： [Filename.dvb.][ProjectName.][ModuleName.]MacroName  
这里的中括号是可选的意思。  
Filename.dvb与ProjectName要用感叹号分开，例如 "Filename.dvb!ProjectName"。  

如果没加载 dvb 则会自动加载，如果未指定路径则自动搜索查找文件件。  
如果未指定 ProjectName，则在加载项目中查找宏。

### ComCadObject.SendCommand <a id="ComCadObject.SendCommand" href="#ComCadObject.SendCommand">&#x23;</a>
同步发送 AutoCAD 命令  
[参数支持 aardio 模板语法](https://www.aardio.com/zh-cn/docs/language-reference/templating/syntax.html)

### ComCadObject.SendCommand(cmd,args,doc) <a id="ComCadObject.SendCommand" href="#ComCadObject.SendCommand">&#x23;</a>
同步发送 AutoCAD 命令，  
参数@1可以是文件、资源文件、LISP 表达式、命令，  
每句命令应以空格或回车结束,  
尾部的回车可省略  

支持 aardio 模板语法,模板中非数值、布尔值一律转字符串,  
一次输出多个模板参数时,字符串自动加引号,多参数自动以空格分开,  
可选用 @args 参数指定模板 owner 参数，  
可选用参数 @3 自定义执行此函数的文档对象

### ComCadObject.SendCopyData(data,args,dataType) <a id="ComCadObject.SendCopyData" href="#ComCadObject.SendCopyData">&#x23;</a>
用 _WM_COPYDATA 向 AutoCAD 窗口发送数据。  
@data 为 需要发送的字符串，发送命令时支持模板语法，  
@args 发送命令时，可选用这个参数指定@data 使用的模板参数，  
@dataType 省略时默认值为1，为 1 表示发送到 AutoCAD 命令窗口并执行该命令。  
发送成功返回1，否则返回0

### ComCadObject.ShowForeground() <a id="ComCadObject.ShowForeground" href="#ComCadObject.ShowForeground">&#x23;</a>
前置并显示 AutoCAD 窗口。

### ComCadObject.UnloadARX() <a id="ComCadObject.UnloadARX" href="#ComCadObject.UnloadARX">&#x23;</a>
卸载参数@1指定的 ARX 应用程序

### ComCadObject.UnloadDVB() <a id="ComCadObject.UnloadDVB" href="#ComCadObject.UnloadDVB">&#x23;</a>
卸载 .dvb 工程，无返回值。  
参数 @1 指定 .dvb 工程文件路径。

### ComCadObject.VersionString() <a id="ComCadObject.VersionString" href="#ComCadObject.VersionString">&#x23;</a>
AutoCAD 版本号，字符串值。  
例如 AutoCAD 2022 版本号为 "24.1s (LMS Tech)"。  
可用 fsys.version 解析与比对版本号。

### ComCadObject.Visible <a id="ComCadObject.Visible" href="#ComCadObject.Visible">&#x23;</a>
是否显示 AutoCAD 窗口。  
此值建议设置为 true 以显示窗口，  
不显示窗口有些功能可能用不了。

### ComCadObject.vbaEnabled() <a id="ComCadObject.vbaEnabled" href="#ComCadObject.vbaEnabled">&#x23;</a>
是否启用 VBA 。

## ComCadObject.Documents 成员列表 <a id="ComCadObject.Documents" href="#ComCadObject.Documents">&#x23;</a>

当前文档数组,不显示窗口可能为 null。  
这是通过 COM 接口访问的类数组对象，起始下标为 Documents[0] 而不是 Documents[1]，  
只能使用 Count 获取数组长度，不能用 # 操作符获取数组长度

### ComCadObject.Documents.* <a id="ComCadObject.Documents.any" href="#ComCadObject.Documents.any">&#x23;</a>
[返回对象:ComCadDocObject](#ComCadDocObject)

### ComCadObject.Documents.Add() <a id="ComCadObject.Documents.Add" href="#ComCadObject.Documents.Add">&#x23;</a>
文加文档，返回文档对象  

[返回对象:ComCadDocObject](#ComCadDocObject)

### ComCadObject.Documents.Count <a id="ComCadObject.Documents.Count" href="#ComCadObject.Documents.Count">&#x23;</a>
打开文档总数

### ComCadObject.Documents.Open() <a id="ComCadObject.Documents.Open" href="#ComCadObject.Documents.Open">&#x23;</a>
[返回对象:ComCadDocObject](#ComCadDocObject)

### ComCadObject.Documents.Open(fileame,readOnly,password) <a id="ComCadObject.Documents.Open" href="#ComCadObject.Documents.Open">&#x23;</a>
打开文件，返回文档对象。  
@filename 指定文件路径，建议用 io.fullpath 转换为完整路径。  
可选参数 @readOnly 指定是否以只读模式打开。  
可选用参数 @password 指定密码

## ComCadObject.TextStyles 成员列表 <a id="ComCadObject.TextStyles" href="#ComCadObject.TextStyles">&#x23;</a>

文本样式集合。

### ComCadObject.TextStyles.Count <a id="ComCadObject.TextStyles.Count" href="#ComCadObject.TextStyles.Count">&#x23;</a>
文本样式总数

### ComCadObject.TextStyles.Item() <a id="ComCadObject.TextStyles.Item" href="#ComCadObject.TextStyles.Item">&#x23;</a>
获取文本样式，参数  @1 指定索引。
