Тема: Программное определение группы слоя

Начиная, по-моему, с AutoCAD 2006 появилась возможность группировать слои - команда:
Layer Properties Manager-->New Group Filter
Помогите, пожалуйста, как программно определить какой группе/подгруппе принадлежит слой выбранного примитива?

Re: Программное определение группы слоя

> NikOpoL
Посмотри функцию layer-filters-status-change
https://www.caduser.ru/forum/topic20414.html

Re: Программное определение группы слоя

> NikOpoL

;|=======================================================================================
* Ф-ция group_layer
* На основе  https://www.caduser.ru/forum/topic1194.html
*            https://www.caduser.ru/forum/topic20414.html
* Возвращает: сообщение в командной строке какой группе принадлежит выбранный примитив
*             и из каких слоев состоит эта группа
=======================================================================================|;
(defun group_layer ()
(setq lay_ent (cdr(assoc 8 (entget(car(entsel)))))); слой выбранного примитива
; Далее определяются все фильтры слоев
  (setq vla:lrs (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  (setq vla:xdic (vla-getextensiondictionary vla:lrs))
  (setq list_filters nil)
  (if (progn (vlax-for item vla:xdic
                   (if (= (vla-get-name item) "ACLYDICTIONARY")
                     (setq vla:dic item)
                   ) ;_  if
                 ) ;_  vlax-for
                 vla:dic
          ) ;_  progn
        (progn
          (vlax-for vla:xrec vla:dic
            (if (progn
                  (setq name (vla-get-name vla:xrec))
                  (vla-getxrecorddata vla:xrec 'DataType 'DataValue)
            (setq filter
              (strcase (vlax-variant-value
                                          (vlax-safearray-get-element
                                            DataValue
                                            (vl-position 300 (vlax-safearray->list DataType))
                                          ) ;_  vlax-safearray-get-element
                                        ) ;_  vlax-variant-value
                               ) ;_  strcase
                  )
;;;                               lstnames
;;;                       ) ;_  member
;;;                  ) ;_  not
                ) ;_  progn
              (progn
                 (setq sps (entget(vlax-vla-object->ename vla:xrec)))
                  (setq sps (massoc 330 (member (assoc 300 sps) sps)))
                   (setq sps (vl-remove-if 'null (mapcar 'entget sps)))
                    (setq   sps (mapcar '(lambda (x)(cdr(assoc 2 x))) sps))
                  (if (member lay_ent sps) (progn
                 (princ (strcat "\nПримитив принадлежит группе: " filter))
             (princ "\nГруппа состоит из слоев:")
             (foreach x sps (princ (strcat x";")))
            ))
        (vlax-release-object vla:xrec)
              ) ;_  progn
            ) ;_  if
          ) ;_  vlax-for
          (vlax-release-object vla:dic)
         ) ;_ progn
      )
  (vlax-release-object vla:xdic)
  (vlax-release-object vla:lrs)
  (princ)
  )
(defun massoc (key alist / x nlist)
  (foreach x alist
    (if (eq key (car x))(setq nlist (cons (cdr x) nlist))))
  (reverse nlist))

Re: Программное определение группы слоя

> VVA
>VK
>Остальным добрым людям
Функция group_layer (см. выше) возвращает имя группы даже, если слой примитива принадлежит подгруппе. Командой
Layer Properties Manager-->New Group Filter
можно строить дерево групп слоев
Вопрос: как программно определить подгруппы 2 уровня и ниже?