Sweety 发表于 2022-7-6 09:59:01

Lisp或代码分解组

大家好。
 
是否有任何现成的lisp或代码可以分解一组
请由集团指挥部收集?
 
谢谢大家。
 
甜甜的

Guest kruuger 发表于 2022-7-6 10:03:46

这是一个很好的“清除”例程集合(PurgeAllGroups)
 
克鲁格

Sweety 发表于 2022-7-6 10:07:43

 
亲爱的克鲁格,收藏在哪里?
 
XXXXXXX以上

Guest kruuger 发表于 2022-7-6 10:10:07

UPSS:oops:link在这里:http://www.jtbworld.com/lisp/purger.htm
克鲁格

VVA 发表于 2022-7-6 10:14:16

试试看
PAG-清除所有组
PEG-清除空组
PUG-清除未命名的组(如*Annn)

; Ф-ция PurgeAllGroups
; Удаляет описание всех групп
; Аргумент [Тип]:
;   НЕТ
; Возвращает: Nil
(vl-load-com)
(defun PurgeAllGroups (/ grpList index grp)
(setq grpList (dictsearch (namedobjdict) "ACAD_GROUP"))
(setq index 1)
(while (setq grp (nth index grplist))
   (if(= (car grp) 3)
   (entdel (cdr (nth (+ index 1) grplist)))
   )
   (setq index (+ 1 index))
)
(princ))

; Ф-ция PurgeEmptyGroups
; Удаляет описание всех пустых групп
; Аргумент [Тип]:
;   Named = Тип
;       0 — только именованные группы
;       1 — только неименованные группы
;   t,nil — все группы
; Возвращает: Nil
(defun PurgeEmptyGroups ( named / grpList index grp egrp named_list e_list)
;;; Библиотечная ф-ция, возвращает multiple group code
(defun massoc (key alist / x nlist)
(foreach x alist
   (if (eq key (car x))
   (setq nlist (cons (cdr x) nlist))
   ))
(reverse nlist))
(setq named_list '(0 1))
(if (member named named_list)(setq named_list (list named)))
(setq grpList (dictsearch (namedobjdict) "ACAD_GROUP"))
(setq index 1)
(while (setq grp (nth index grplist))
   (if(= (car grp) 3)
   (progn
(setq egrp (entget (cdr (nth (+ index 1) grplist))))
(if (member (cdr (assoc 70 egrp)) named_list)
   (progn
   (setq e_list (massoc 340 egrp))
   (if(not (vl-member-if 'entget e_list))
       (entdel (cdr (nth (+ index 1) grplist)))
       )
   )
   )
)
   )
   (setq index (+ 1 index))
)
(princ))


; Ф-ция PurgeAllUnNamedGroups
; Удаляет описание всех анонимных групп *Annn
; Аргумент [Тип]:
; НЕТ
; Возвращает: Nil
(defun PurgeAllUnNamedGroups (/ grpList index grp)
(setq grpList (dictsearch (namedobjdict) "ACAD_GROUP"))
(setq index 1)
(while (setq grp (nth index grplist))
   (if(= (car grp) 3)
   (progn
(if (= (chr 42) (substr (cdr grp) 1 1))
   (entdel (cdr (nth (+ index 1) grplist)))
)
   )
   )
   (setq index (+ 1 index))
)
(princ)
)

; Ф-ция DeleteGroupbyName
; Удаление группы по имени.
; Аргумент [Тип]:
;   Name = Имя группы
; Возвращает: Null
(defun DeleteGroupbyName (Name)
(or *kpblc-activedoc*
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
)
(vl-catch-all-apply
'(lambda ()
(vla-delete
   (vla-item
    (vla-get-groups *kpblc-activedoc*)
    Name
   )
)
)
)
(princ)
)

; Ф-ция GetObjGroupNames
; Возвращает список имен групп объекта или nil.
; Arguments :
;   Obj = Object
;   Obj = Object
; Возвращает :
;   Список имен групп
;
(defun GetObjGroupNames (Obj / Cur_ID NmeLst)
(or *kpblc-activedoc*
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
)
(if (= (type Obj) 'ENAME)(setq Obj (vlax-ename->vla-object Obj)))
(setq Cur_ID (vla-get-ObjectID Obj))
(vlax-for Grp (vla-get-Groups *kpblc-activedoc*)
(vlax-for Ent Grp
(if (equal (vla-get-ObjectID Ent) Cur_ID)
   (setq NmeLst (cons (vla-get-Name Grp) NmeLst))
)
(vlax-release-object Ent)
)
(vlax-release-object Grp)
)
(reverse NmeLst)
)

;;;Удаляет все пустые группы (именованные и неименованные)
;;;Объеткты, входящие в группы удаленны, а описание групп осталось
;;;http://dwg.ru/forum/viewtopic.php?t=4762
(defun PurgeAllEmptyGroups()(PurgeEmptyGroups t))
;;;Удаляет все пустые группы (именованные)
(defun PurgeAllNamedEmptyGroups()(PurgeEmptyGroups 0))
;;;Удаляет все пустые группы (неименованные)
(defun PurgeAllUnNamedEmptyGroups()(PurgeEmptyGroups 1))
;;;=======================================================
;;; Команды
;;;=======================================================
;;; Удаляет все группы Purge All Groups
(defun C:PAG ()(PurgeAllGroups))
;;; Удаляет все пустые группы   Purge Empty Groups
(defun C:PEG ()(PurgeAllEmptyGroups))
;;; Удаляет все неименованные группыPurge Unnamed Groups
(defun C:PUG ()(PurgeAllUnNamedGroups))

Sweety 发表于 2022-7-6 10:17:36

 
谢谢。
 
但我并不期待使用purge命令,尽管Autocad中已经存在该命令。
 
我需要在通过group命令相互收集的实体上分解group。
 
谢谢

pBe 发表于 2022-7-6 10:18:28

图形中的所有“组”还是特定组?按名称还是通过选择?

Guest kruuger 发表于 2022-7-6 10:22:14

你试过我的或VVA代码吗?
此处的清除意味着分解所有组(不能使用autocad Purge命令清除组)。
克鲁格

Sweety 发表于 2022-7-6 10:26:00

 
非常感谢VVA先生。
 
那真的很棒。
 
但是如何通过用户选择一个又一个呢?
 
感谢

Sweety 发表于 2022-7-6 10:29:07

 
是的,如果我能一组一组地选出来就太好了。
 
谢谢
页: [1] 2
查看完整版本: Lisp或代码分解组