aws 发表于 2024-12-3 16:42:32

vla-Explode这个炸开后返回的是什么?

本帖最后由 aws 于 2024-12-3 16:43 编辑

(setq objs(vla-Explode obj))
它返回的是集合还是什么东西,我如果想对里面每个obj单独的对象进行偏移操作,如何写呢?
(foreach x objs
(vla-Offset x 2)
)
这样应该是不对吧,关于obj集合的问题,比较糊涂,有没有相关帖子看看?
有没有类似ssname的函数,去用在obj集合里面提取对象名的方法

liuhe 发表于 2024-12-3 16:57:51

(mapcar'vlax-vla-object->ename(vlax-safearray->list(vlax-variant-value(vla-Explode obj))))


只能分解多线段 和块

vitalgg 发表于 2024-12-3 18:05:36



*** : vla-Explode
** (vla-Explode object)
将复合对象分解为子图元。
返回值: variant 8201 分解后的图元对象的集合。



llsheng_73 发表于 2024-12-3 19:02:21

本帖最后由 llsheng_73 于 2024-12-3 19:07 编辑

(setq objs(vla-Explode obj))得到的是一个变体variant,通过(setq objs(vlax-variant-value OBJS))将它转为安全数组,到这个时候就可以进行访问了,但是为更方便一些,通常会进一步通过vlax-safearray->list将数组转成表
不考虑分解失败的话(setq OBJS(vlax-safearray->list(vlax-variant-value(vlax-invoke-methodobj 'explode))))
接下来(foreach x objs(vlax-invoke-method x'Offset2))就是可以的,当然前提是obj分解出来的都是可以进行Offset的...否则应该加上判断或容错处理

aws 发表于 2024-12-4 09:21:54

llsheng_73 发表于 2024-12-3 19:02
(setq objs(vla-Explode obj))得到的是一个变体variant,通过(setq objs(vlax-variant-value OBJS))将它转为 ...

长老,我好奇的是,为什么要引用变体和数组这两个概念,在我浅显的印象里,lisp似乎都是对图元名ename和obj对象名这两者,进行各种操作的,变体和数组有什么作用?多余吗?

liuhe 发表于 2024-12-4 10:59:55

aws 发表于 2024-12-4 09:21
长老,我好奇的是,为什么要引用变体和数组这两个概念,在我浅显的印象里,lisp似乎都是对图元名ename和o ...

因为vla函数 是com技术,变体和数组是vba的类型,vba和lisp两个需要传递数据,必须要有装箱和拆箱的操作。
相当于两者必须要有公认的标准,来进行互通。

你有种再说一遍 发表于 2024-12-4 17:31:25

aws 发表于 2024-12-4 09:21
长老,我好奇的是,为什么要引用变体和数组这两个概念,在我浅显的印象里,lisp似乎都是对图元名ename和o ...

很多概念都是要学第二门语言你才能从头建立概念,
并且可以把概念链接起来的,
学了Lisp之后我不建议你学VBA了,
而是学习C#/C++这种工程化语言,它们也有COM概念,
并且你还能体会到IDE的函数提示之类的,
在Lisp忍受的数据结构顺序更改,在C#/C++也能很好解决.

qazxswk 发表于 2024-12-5 10:02:09

vla-explode这个函数,我也没有搞懂。
(vla-explode (vlax-ename->vla-object (car (entsel)))),这样炸开对象后,还保留了原来的对象。郁闷。
所以目前还是用(vl-cmdf "_.explode" (ssget))这样的方式。

aws 发表于 2024-12-5 10:17:11

qazxswk 发表于 2024-12-5 10:02
vla-explode这个函数,我也没有搞懂。
(vla-explode (vlax-ename->vla-object (car (entsel)))),这样炸开 ...

你不说,我还真没注意,它的炸开居然还保留了源对象

gzcsun 发表于 2024-12-5 12:56:23

aws 发表于 2024-12-4 09:21
长老,我好奇的是,为什么要引用变体和数组这两个概念,在我浅显的印象里,lisp似乎都是对图元名ename和o ...

觉得vla-explode只是对于一个图元速度快一点点,
对于整个ssget的还比explode慢得多。
页: [1] 2
查看完整版本: vla-Explode这个炸开后返回的是什么?