| 关于在 AutoLISP 和 ActiveX 数据类型之间转换 (AutoLISP/ActiveX) 使用 ActiveX 支持和核心 AutoLISP 函数时,需要在数据类型之间进行转换。 
注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。 使用该方法向图形添加圆需要指定圆的中心点和半径。这些参数称为“中心”和“半径”。Center 被定义为一个变体(双精度的三元素数组),而 Radius 被列为一个双精度:AddCircle (setq RetVal (vla-AddCircle aMSpace Center Radius)) 
元素
RetVal
对象;仅输出。从方法生成的 circle 对象。AddCircleaMSpace(aMSpace)
对象;仅输入。该方法应处理的对象。AddCircle中心
变体(双打的三元素数组);仅输入。指定圆心的 3D WCS 坐标。 变体本质上是可以包含不同类型的数据的自我定义结构。例如,字符串、整数和数组都可以用变体表示。与数据一起存储的是标识数据类型的信息。这种自定义功能使变体可用于将参数传递给 ActiveX 服务器,因为它使基于任何语言的服务器能够理解数据值。半径
双;仅输入。圆的半径。必须为正数。 
AutoLISP 到 ActiveX 数据类型ActiveX 支持许多与 AutoLISP 中的数据类型类似的数据类型,但有一些独特的数据类型不直接映射到 AutoLISP 支持的数据类型。数据类型的转换方法如下: 
| 接受代替 ActiveX 数据类型的 AutoLISP 数据类型 |  
|  | 整数 | 真正 | 字符串 | 埃纳姆 | VLA 对象 | 变体 | 列表 | :安全数组 | 布尔 | :vlax-true :vlax-false | 零 | :vlax-null |  
| 字节 | X |  |  |  |  |  |  |  |  |  |  |  |  
| 布尔 |  |  |  |  |  |  |  |  | X | X |  |  |  
| 整数 | X |  |  |  |  |  |  |  |  |  |  |  |  
| 长 | X |  |  |  |  |  |  |  |  |  |  |  |  
| 单/短 | X |  |  |  |  |  |  |  |  |  |  |  |  
| 双 | X | X |  |  |  |  |  |  |  |  |  |  |  
| 对象 |  |  |  |  | X |  |  |  |  |  |  |  |  
| 字符串 |  |  | X |  |  |  |  |  |  |  |  |  |  
| 变体 |  |  |  |  |  | X |  |  |  |  |  |  |  
| 数组 |  |  |  |  |  |  |  | X |  |  |  |  |  
| 无 |  |  |  |  |  |  |  |  |  |  |  | X |  
| 空 |  |  |  |  |  |  |  |  |  |  | X |  |  
转换 Array 和 List 数据类型ActiveX 数组数据类型类似于 AutoLISP 中的列表。它们包含表示不同数据结构的多个元素。数组的常见用途是表示坐标值。您可以使用数组转换为列表。将列表转换为数组需要定义数组应具有的数据类型和元素数,并使用 将列表的值分配给数组的元素。vlax-safearray->listvlax-make-safearrayvlax-safearray-fill 
转换 Variant 数据类型当方法可能返回或使用多种类型的数据时,将使用变体数据类型。您可以使用创建变体。创建变型时,您可以指定数据类型和应保存的值。如果变量由方法或属性返回,则可以使用 and 函数。vlax-make-variantvlax-variant-typevlax-variant-value 
转换 VLA 对象、句柄和 Ename 数据类型有多种方法可以使用 AutoLISP 引用 AutoCAD 图形对象。这些包括以下内容: 
VLA 对象
由 ActiveX 函数返回。用于从 VLA 对象转换为 ename(实体名称)数据类型。vlax-vla-object->ename (setq MSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
#<VLA-OBJECT IAcadModelSpace 0000000030434638>
(setq circObj (vla-AddCircle MSpace (vlax-3d-point '(5.0 5.0 0.0)) 3))
#<VLA-OBJECT IAcadCircle 00000000303b2698>
(vlax-vla-object->ename circObj)
<Entity name: 7ffffb05de0>实体名称 (enames)
由 、 和 返回,用于标识打开图形中的对象。用于从 ename 转换为 VLA 对象数据类型。handententgetentselvlax-ename->vla-object (setq en (handent handle-circle))
<Entity name: 27f0538>
(setq en (car (entsel "\nSelect circle: ")))
<Entity name: 27f0538>
(vlax-ename->vla-object en)
#<VLA-OBJECT IAcadCircle 00000000303b3718>处理
由实体名称的关联列表中检索 DXF 5 组代码或通过检索 DXF 5 组代码返回,该列表在 AutoCAD 任务中保留该实体。用于返回与句柄关联的 VLA 对象。vla-get-handlevla-handleToObject (vla-get-handle vla-circle)
"4F"
(setq handle-circle (cdr (assoc 5 (entget ename-circle))))
"4F"
(setq vla-circle (vla-handleToObject acadDocument handle-circle))
#<VLA-OBJECT IAcadCircle 03642c24>对象 ID
由 ActiveX、ObjectARX 和 Manage .NET 程序用于标识对象。用于将对象 ID 转换为 VLA 对象或用于将 VLA 对象转换为对象 ID。vla-ObjectIDToObject
vla-get-ObjectID
 (setq objid-Circle (vla-get-objectid vla-circle))
41878840
(vla-ObjectIDtoObject acadDocument objid-circle)
#<VLA-OBJECT IAcadCircle 03642c24> |