明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: yaojing38

[讨论] 关于 group 组对象的获取,怎么像平常一样。

[复制链接]
 楼主| 发表于 2023-3-13 13:09:03 | 显示全部楼层
wzg356 发表于 2023-3-12 20:04
这种情况根据经验试一下就行了
组我认为只是一个图面明确表示的选择集
执行ssget,点击一个组成员就等于 ...

我ssget不止一个图元,,不止一个GROUP,那我怎么区分,,感觉还是很麻烦,,,我最终选择了炸开他们。。。。。
发表于 2023-3-13 15:55:33 | 显示全部楼层
本帖最后由 llsheng_73 于 2023-3-13 16:10 编辑

  1. (defun ingroup(e f / a);;如果图元e在编组里边,f为真返回编组对象及组内图元名,f为nil返回编组名及组内图元名,否则返回nil
  2.         (or(=(type e)'ename)(setq e(vlax-vla-object->ename e)))
  3.         (if(and(setq e(member'(102 . "{ACAD_REACTORS")(entget e)))
  4.                (setq e(member'(102 . "}")(reverse e))))
  5.           (vl-remove'nil(mapcar'(lambda(x / e a)(if(member'(0 . "GROUP")(setq e(entget(cdr x))))
  6.                                                   (cons(if f(vlax-ename->vla-object(cdar e))(cdar e))(mapcar'cdr (vl-remove-if'(lambda(x)(/=(car x)340))e)))))
  7.                                (vl-remove-if-not'(lambda(x)(=(car x)330))e)))))
  8.       (defun removefromgroup(ens)
  9.         (vl-some(function(lambda(x)(vl-some(function(lambda(y)(VL-CATCH-ALL-APPLY'vla-RemoveItems(list(car y)(l2array(list x))))nil))(INGROUP x t))nil))
  10.                 (setq ens(if(listp ens)(vl-remove'nil ens)(list ens)))))
  11.       (defun addtogroup(ob ens);;;图元编组ob编组对象,ens要加入该编组的图元,ob为nil或者非编组对象时,ens加入到一个未命名编组l2arra自定义图元转对象数组函数
  12.         (or(=(VL-CATCH-ALL-APPLY'vla-get-ObjectName(list ob))"AcDbGroup")
  13.            (setq ob(vla-add(vla-get-groups(vla-get-ActiveDocument(vlax-get-acad-object)))"*")))
  14.         (vla-AppendItems ob(l2array ens)))


  15. (defun l2array(l / A);;;图元(或对象)表转为对象数组
  16.       (vlax-safearray-fill(vlax-make-safearray 9(cons 0(1-(length l))))
  17.         (mapcar(function(lambda(x / a)(setq a(type x))(cond((='ename a)(vlax-ename->vla-object x))((='VLA-OBJECT a)x))))l)))


我个人基本就用这三个收拾组。。。


如果需要查所有组名,可以查当前文档的GROUPS对象然后获取,个人用以下函数
  1. (defun ObjItems(Obj Sets item / l a)
  2.   (if item(defun a(x)(if(vl-catch-all-error-p(setq x(vl-catch-all-apply'vlax-get-property(list x item))))nil x))(defun a(x)x))
  3.   (if(not(vl-catch-all-error-p(vl-catch-all-apply'vlax-get-property(list Obj Sets))))
  4.     (setq Sets(if Sets(vl-catch-all-apply'vlax-get-property(list Obj Sets))Obj))
  5.     (if(vlax-method-applicable-p obj(strcat"get"(VL-PRINC-TO-STRING sets)))
  6.       (setq sets(eval(list(read(strcat"vla-get"(VL-PRINC-TO-STRING sets)))obj)))))
  7.   (if(=(type sets)'variant)(mapcar'a(vlax-safearray->list(variant-value sets)))
  8.       (vlax-for x Sets(setq l(cons(a x)l)))))

(ObjItems(vlax-get-property(vlax-get-acad-object)'activedocument)'groups 'name)

编组虽然方便,但很脆弱,跨图复制组就散了,比较麻烦,另外,同一图元对象可能同时处于多个不同的组,出现这种情况也比较麻烦,当然可以通过
ingroup查出图元或对象所在的所有编组,再考虑怎么收拾
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:41 , Processed in 0.188858 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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