CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

关于获取安全数组的元素 (AutoLISP/ActiveX)

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

摘要: 数组用于从 ActiveX 函数返回多个值,并将多个值传递给 ActiveX 函数。

数组用于从 ActiveX 函数返回多个值,并将多个值传递给 ActiveX 函数。

注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。

以下函数用于获取分配给数组中元素的值:

  • vlax-safearray-type– 返回安全数组的数据类型。
  • vlax-safearray-get-dim– 返回安全数组中的维数。
  • vlax-safearray-get-l-bound– 返回安全数组中维度的下边界(第一个索引)。
  • vlax-safearray-get-u-bound– 返回安全数组中维度的上边界(最后一个索引)。
  • vlax-safearray-get-element– 返回 safearray 中元素的值。

数组的数据类型

使用 AutoLISP 函数时,您需要知道正在处理的数据类型。每个数组都使用特定类型的数据进行定义。该函数用于标识创建数组以保存的数据类型;它需要一个参数:包含数组的变量。此函数返回一个整数值,该值表示创建数组以保存的数据类型。vlax-safearray-type

例如,以下代码创建一个包含三个双精度的一维数组:

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
(vlax-safearray-fill point (list 100 100 0))
#<safearray...>

例如,以下代码返回 5,因为数组被定义为保存双精度:

(vlax-safearray-type point)
5

数组中的维度

访问数组的值需要知道创建数组时使用的维度和元素的数量。该函数返回一个整数,该整数表示创建数组时使用的维度数。vlax-safearray-get-dim

下面的代码创建一个包含三个双精度的单维数组:

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
(vlax-safearray-get-dim point)
1

下面的示例创建一个字符串的二维数组:

(setq mat2 (vlax-make-safearray vlax-vbString '(0 . 1) '(1 . 3)))
(vlax-safearray-get-dim mat2)
2

数组维度中的元素

知道数组中的维数(使用 )后,可以获取数组的下限 () 和上限 ()。数组的边界可帮助您识别维度中的元素数以及可以找到数组元素的索引范围。vlax-safearray-get-dim functionvlax-safearray-get-l-boundvlax-safearray-get-u-bound

数组维度中的元素数可以通过减去 and 函数返回的值来计算。vlax-safearray-get-u-boundvlax-safearray-get-l-bound

例如,以下内容返回一维数组中的元素数:

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
(setq arrayRange (1+ (- (vlax-safearray-get-u-bound point 1) (vlax-safearray-get-l-bound point 1))))
3

下面返回二维数组的第二个维度中的元素数:

(setq mat1 (vlax-make-safearray vlax-vbString '(0 . 1) '(2 . 5)))
(setq arrayRange (1+ (- (vlax-safearray-get-u-bound mat1 2) (vlax-safearray-get-l-bound mat1 2))))
4

获取数组中元素的值

知道数组中维度和元素的数量后,可以使用函数获取元素的值。vlax-safearray-get-element

例如,以下代码填充三个双精度的单维数组:

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
(vlax-safearray-fill point (list 100 50 0))
#<safearray...>

下面返回数组中第二个元素的值:

(vlax-safearray-get-element point 1)
50.0

下面的代码填充字符串的二维数组,并获取第一个维度的第二个元素:

(setq mat2 (vlax-make-safearray vlax-vbString '(0 . 1) '(1 . 3)))
(vlax-safearray-fill mat2 '(("a" "b" "c") ("d" "e" "f")))
(vlax-safearray-get-element mat2 0 2)
"b"

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部