明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1093|回复: 6

[源码] 分享一个LEE-MAC大神的关于组group的相关函数

[复制链接]
发表于 2021-8-1 20:42 | 显示全部楼层 |阅读模式
本帖最后由 yjtdkj 于 2021-8-5 14:59 编辑

先上原帖地址https://www.theswamp.org/index.php?topic=49214.msg543280#msg543280
打不开地址的话,就看下面的代码(08.05更新,原代码有个小错误,少了330组码)
  1. ;; Group Entities  -  Lee Mac;; Creates a Group with a given name containing all entities in the supplied list
  2. ;; grp - [str] Group name (use "*" for an anonymous group)
  3. ;; lst - [lst] List of entities to add to group
  4. ;; sel - [bol] If T, group is selectable

  5. (defun LM:groupentities ( grp lst sel / dic enx gde gdx tmp )
  6.     (if (setq dic (cdr (assoc -1 (dictsearch (namedobjdict) "acad_group"))))
  7.         (if (setq gdx (dictsearch dic grp)
  8.                   gde (cdr (assoc -1 gdx))
  9.             )
  10.             (progn
  11.                 (entmod (append gdx (mapcar '(lambda ( x ) (cons 340 x)) lst)))
  12.                 (foreach ent lst
  13.                     (setq enx (entget ent)
  14.                           tmp (member '(102 . "{ACAD_REACTORS") enx)
  15.                     )
  16.                     (if tmp
  17.                         (setq tmp
  18.                             (vl-list*
  19.                                 (car tmp)
  20.                                 (cons 330 gde)
  21.                                 (cdr tmp)
  22.                             )
  23.                         )
  24.                         (setq tmp
  25.                             (vl-list*
  26.                                '(102 . "{ACAD_REACTORS")
  27.                                 (cons 330 gde)
  28.                                '(102 . "}")
  29.                                 (cdr (member (assoc 5 enx) enx))
  30.                             )
  31.                         )
  32.                     )
  33.                     (entmod (append (reverse (member (assoc 5 enx) (reverse enx))) tmp))      
  34.                 )
  35.                 grp
  36.             )
  37.             (if
  38.                 (and
  39.                     (setq gde
  40.                         (entmakex
  41.                             (list
  42.                                '(000 . "GROUP")
  43.                                '(102 . "{ACAD_REACTORS")
  44.                                (cons 330 dic)
  45.                                '(102 . "}")
  46.                                (cons 330 dic)
  47.                                '(100 . "AcDbGroup")
  48.                                 (if (wcmatch grp "`*") '(070 . 1) '(070 . 0))
  49.                                 (if sel                '(071 . 1) '(071 . 0))
  50.                             )
  51.                         )
  52.                     )
  53.                     (if (wcmatch grp "`*")
  54.                         (if (entmod (append (entget dic) (list '(3 . "*") (cons 350 gde)))) ;; thanks vk/rjp
  55.                             (setq grp
  56.                                 (cdadr
  57.                                     (member
  58.                                         (cons 350 gde)
  59.                                         (reverse (entget dic))
  60.                                     )
  61.                                 )
  62.                             )
  63.                         )
  64.                         (dictadd dic grp gde)
  65.                     )
  66.                 )
  67.                 (LM:groupentities grp lst sel)
  68.             )
  69.         )
  70.     )
  71. )
  72. (defun c:test ( / grp idx lst sel )
  73.     (while
  74.         (not
  75.             (or (wcmatch (setq grp (getstring t "Specify group name: ")) "`*,")
  76.                 (snvalid grp)
  77.             )
  78.         )
  79.         (princ "\nGroup name invalid.")
  80.     )
  81.     (if (and (/= "" grp) (setq sel (ssget )))
  82.         (progn
  83.             (repeat (setq idx (sslength sel))
  84.                 (setq lst (cons (ssname sel (setq idx (1- idx))) lst))
  85.             )
  86.             (LM:groupentities grp lst t)
  87.         )
  88.     )
  89. )
主要功能是创建组,但还有一些额外功能,如下:
1.如果已经存在同名的组,则以上将添加提供的实体到现有组。
2.以上将允许创建嵌套组 - 即包含已包含在其他组中的对象的组。
3.输入*号则可以创建匿名组
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-8-1 20:47 | 显示全部楼层
再传一个我写的配套的函数,取得图元的组名
  1. ;;;========================================================;
  2. ;;;取得图元所在的组名                   by yjtdkj2021.08.01;
  3. ;;;========================================================;
  4. (defun GetEntGroupName (gpe / el lst a g gpnlst)
  5.   (setq dic (cdr (assoc -1 (dictsearch (namedobjdict) "acad_group"))))
  6.   (setq el (entget gpe))
  7.   (if (setq lst (member '(102 . "{ACAD_REACTORS") el))
  8.     (while (and (setq lst (cdr lst)) (= 330 (car (setq a (car lst)))))
  9.       (if (= "GROUP"
  10.              (cdr (assoc 0 (entget (setq g (cdr a)))))
  11.           )
  12.         (setq grp
  13.                (cdadr
  14.                  (member
  15.                    (cons 350 g)
  16.                    (reverse (entget dic))
  17.                  )
  18.                )
  19.         )
  20.       )
  21.     )
  22.   )
  23. )
发表于 2021-8-1 21:53 | 显示全部楼层
谢谢分享,组这个功能用的非常少。块倒是多一点
发表于 2021-8-2 06:47 | 显示全部楼层
谢谢! yjtdkj 分享程序!!!!!!
发表于 2024-3-29 13:21 | 显示全部楼层
本帖最后由 zilong136 于 2024-3-29 13:31 编辑

就问命令是不是“test”?输完之后不能继续下一步的操作。
发表于 2024-3-29 23:01 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 18:17 , Processed in 0.265866 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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