找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 213|回复: 5

关于组group的相关函数

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-3-29 13:37:35 | 显示全部楼层 |阅读模式
  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. )
复制代码

主题

0

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2024-3-29 13:37:52 | 显示全部楼层
  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. )
复制代码

主题

0

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2024-3-29 13:38:16 | 显示全部楼层
  1. ;;制作匿名组
  2. (defun c:mak采用*group (/ ss)
  3.   (princ "\n选取制作匿名组的对象:")
  4.   (if (setq ss (ssget))
  5.     (fsxm-add-group ss "*")
  6.   )
  7.   (princ)
  8. )
  9. ;;解散群组
  10. (defun C:EXPLODE采用GROUP (/ allg data group ss)
  11.   (if (setq ss (ssget))
  12.     (foreach en (fsxm-ss->enlist ss)
  13.       (setq data (entget en))
  14.       (setq group
  15.       (vl-remove-if
  16.         '(lambda (a)
  17.     (or (/= (car a) 330)
  18.         (/= (fsxm-getdxf 0 (entget (cdr a))) "GROUP")
  19.     )
  20.   )
  21.         data
  22.       )
  23.       )
  24.       (setq allg (reverse (dictsearch (namedobjdict) "ACAD采用GROUP")))
  25.       (foreach a (mapcar 'cdr group)
  26. (princ "\nEXPLODE GROUP : ")
  27. (princ (cdadr (member (cons 350 a) allg)))
  28. (entdel a)
  29.       )
  30.     )
  31.   )
  32.   (princ)
  33. )
复制代码

主题

0

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2024-3-29 13:38:47 | 显示全部楼层
  1. (defun c:gg(/ ss)
  2.   (setq ss(ssget))
  3.   (setvar "cmdecho" 0)
  4.   (command "-group" "" "*" "" ss "")
  5.   (setvar "cmdecho" 1)
  6.   (princ "\n选定对象已经组合。")
  7.   (princ)
  8. )
复制代码

主题

0

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2024-3-29 13:42:49 | 显示全部楼层
  1. (if (setq s (ssget))
  2.   (progn
  3.     (repeat (setq n (sslength s))
  4.       (setq r (cons (ssname s (setq n (1- n))) r))
  5.     )
  6.     (vla-AppendItems
  7.       (vla-add (vla-get-groups
  8.                  (vla-get-ActiveDocument (vlax-get-acad-object))
  9.                )
  10.                "*" ;;创建无名组
  11.       )
  12.       (vlax-make-variant
  13.         (vlax-safearray-fill
  14.           (vlax-make-safearray
  15.             vlax-vbObject
  16.             (cons 0 (1- (length r)))
  17.           )
  18.           (mapcar 'vlax-ename->vla-object r)
  19.         )
  20.       )
  21.     )
  22.   )
  23. )
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-29 22:43:41 | 显示全部楼层
  1. (if (setq s (ssget))
  2.   (progn
  3.     (repeat (setq n (sslength s))
  4.       (setq r (cons (ssname s (setq n (1- n))) r))
  5.     )
  6.     (vla-AppendItems
  7.       (vla-add (vla-get-groups
  8.                  (vla-get-ActiveDocument (vlax-get-acad-object))
  9.                )
  10.                "*" ;;创建无名组
  11.       )
  12.       (vlax-make-variant
  13.         (vlax-safearray-fill
  14.           (vlax-make-safearray
  15.             vlax-vbObject
  16.             (cons 0 (1- (length r)))
  17.           )
  18.           (mapcar 'vlax-ename->vla-object r)
  19.         )
  20.       )
  21.     )
  22.   )
  23. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 02:27 , Processed in 0.114290 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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