使用 ActiveX 支持和核心 AutoLISP 函数时,需要在数据类型之间进行转换。
注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。
使用该方法向图形添加圆需要指定圆的中心点和半径。这些参数称为“中心”和“半径”。Center 被定义为一个变体(双精度的三元素数组),而 Radius 被列为一个双精度:AddCircle
(setq RetVal (vla-AddCircle aMSpace Center Radius))
元素
- RetVal
-
对象;仅输出。从方法生成的 circle 对象。AddCircle
- aMSpace(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>
|