明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: F海市蜃楼

求助lisp怎么让选中块内的对象出现如图显示的效果

[复制链接]
发表于 2025-12-9 02:13:13 | 显示全部楼层
纯粹的vlisp,个人觉得最简单应该是,但测试无法实现(其中,newobjCopy1为vla-GetSubEntity函数,得到块内子实体)。       
(setvar "SELECTIONEFFECT" 0);变量控制活动选集是对象状态,为0则为显示虚线,1则光晕线亮显(默认)
(setq ss01 (ssadd))
(ssadd (vlax-vla-object->ename newobjCopy1) ss01);此行无法执行,可能原因是因子实体对象无法进入ssget的一级选集
(sssetfirst nil ss01)

变通实现的理论想法:原位复制出块内子实体成一个新复制实体,并使其处于当前选集内或改颜色或高亮显示。
1)用vla-GetSubEntity函数,得到块内子实体(嵌套块或多重块均可),并得到矩阵TransMatrix,和一级块参照ContextData的ID,用vla-objectidtoobject函数和ContextData的ID作为参数,获取一级块参照obj对象
2)用vla-Copyobjects函数,复制的新实体至模型空间。
3)用vla-get-InsertionPoint获取一级块参照obj对象的块插入点,用vla-Move函数,移动新子实体,从0点(0 0 0)至块插入点,最终实现原位复制块内子实体。改变新复制实体的颜色,或线型,或高亮。
4)也可以使用上述方法,设置选取显示变量和加入当前选集中,直接让新复制的实体,虚线显示。

其中,vla-Move函数也可以被替代,用vla-Transformby函数,和TransMatrix变换后的矩阵,直接操作新复制的子实体,而无需考虑一级块参照和插入点。因涉及矩阵计算,我也不懂。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 15:57 , Processed in 0.149427 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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