CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

关于在 AutoLISP 和 ActiveX 数据类型之间进行转换 (AutoLISP/ActiveX)

2023-1-8 00:48| 发布者: admin| 查看: 399| 评论: 0|来自: AutoCAD

摘要: 使用 ActiveX 支持和核心 AutoLISP 函数时,需要在数据类型之间进行转换。

使用 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>

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 14:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部