明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 635|回复: 10

[提问] vla-Explode这个炸开后返回的是什么?

[复制链接]
发表于 2024-12-3 16:42:32 | 显示全部楼层 |阅读模式
本帖最后由 aws 于 2024-12-3 16:43 编辑

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


"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-3 16:57:51 | 显示全部楼层
(mapcar  'vlax-vla-object->ename(vlax-safearray->list(vlax-variant-value(vla-Explode obj))))


只能分解多线段 和块
回复 支持 反对

使用道具 举报

发表于 2024-12-3 18:05:36 | 显示全部楼层


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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 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-method  obj 'explode))))
接下来(foreach x objs(vlax-invoke-method x'Offset  2))就是可以的,当然前提是obj分解出来的都是可以进行Offset的...否则应该加上判断或容错处理
回复 支持 反对

使用道具 举报

 楼主| 发表于 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对象名这两者,进行各种操作的,变体和数组有什么作用?多余吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 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++也能很好解决.
回复 支持 反对

使用道具 举报

发表于 2024-12-5 10:02:09 | 显示全部楼层
vla-explode这个函数,我也没有搞懂。
(vla-explode (vlax-ename->vla-object (car (entsel)))),这样炸开对象后,还保留了原来的对象。郁闷。
所以目前还是用(vl-cmdf "_.explode" (ssget))这样的方式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-5 10:17:11 | 显示全部楼层
qazxswk 发表于 2024-12-5 10:02
vla-explode这个函数,我也没有搞懂。
(vla-explode (vlax-ename->vla-object (car (entsel)))),这样炸开 ...

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

使用道具 举报

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

觉得vla-explode只是对于一个图元速度快一点点,
对于整个ssget的还比explode慢得多。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-23 00:59 , Processed in 0.181870 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表