Как мгновенно выделить все слои, входящие в групповой фильтр?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как мгновенно выделить все слои, входящие в групповой фильтр?

Как мгновенно выделить все слои, входящие в групповой фильтр?

Ответ
Поиск в этой теме
Непрочитано 29.11.2019, 13:42 #1
Как мгновенно выделить все слои, входящие в групповой фильтр?
San-Miguel
 
Регистрация: 06.08.2019
Сообщений: 56

В составе группового фильтра разные слои, объединенные вручную в состав него.
Необходимо в модели выделить мгновенно все слои группового фильтра чтоб на задний план разместить
Просмотров: 1140
 
Непрочитано 29.11.2019, 14:29
#2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Штатной команды для выделения всех объектов, принадлежащих слоям группового фильтра, нет, насколько я знаю.
Программно решить очень просто. Берем код Makswell'a здесь, меняем имя функции test на что-то осмысленное, добавляем функцию LtoT (не уверен, кто автор, но впервые я ее увидел в посте Pilot'a здесь), еще пару строк, и готово:
Код:
[Выделить все]
 ;;; Команда выделяет все объекты на слоях, принадлежащим текущему групповому фильтру слоев

(defun C:SELFILTEROBECTS ()
	(if (get_filter_layer_list)
		(sssetfirst nil (ssget "_X" (list (cons 8 (LtoT (get_filter_layer_list) ",")))))
	)
)
;;; Функция фозвращает список имён слоев текущего группового фильтра
;;; Автор - Makswell
;;; https://forum.dwg.ru/showthread.php?p=642962#post642962
(defun get_filter_layer_list (/ a ent lst)
  (foreach
	    item
		(vl-remove-if-not
		  '(lambda (x) (= (car x) 350))
		  (dictsearch
		    (vlax-vla-object->ename
		      (vla-GetExtensionDictionary
			(vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))
		      )
		    )
		    "ACLYDICTIONARY"
		  )
		)
    (if	(assoc 290 (entget (cdr item)))
      (setq a (entget (cdr item))
      )
    )
  )
  (foreach item	(vl-remove-if-not '(lambda (x) (= (car x) 330)) a)
    (if	(= (cdr (assoc 0 (setq ent (entget (cdr item))))) "LAYER")
      (setq lst (cons (cdr (assoc 2 ent)) lst))
    )
  )
  lst
)

;;; Функция преобразует список строк l1 в строку с разделителями (аргумент div1 - строка с символом или символами-разделителями) между элементами исходного списка
;;; Автор, предположительно, - Pilot 
;;; https://forum.dwg.ru/showthread.php?p=47837#post47837

(defun LtoT (l1 div1 / t1 v1)
(if (not div1)(setq div1 " "))
(if (> (length l1) 1)
   (progn (setq t1 (car l1))
        (foreach v1 (cdr l1)
            (setq t1 (strcat t1 div1 v1))
        );end foreach
   );end progn
   (car l1)
);end if
);end LtoT

(princ "C:SELFILTEROBECTS")
(princ)
----- добавлено через ~9 мин. -----
Кстати, забыл: у Lee Mac'a есть программа для изменения порядка прорисовки слоев - Layer Draw Order. Может, и фильтры не придется создавать.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как мгновенно выделить все слои, входящие в групповой фильтр?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эвакуация из групповой ячейки детского сада slimmy Архитектура 16 27.04.2017 08:51
Geonics Группировка (компановка) слоев в слои согласно шаблона Dimas77 Прочее. Программное обеспечение 2 29.12.2015 14:23
Как сохранить настройки видового экрана, в котором заморожены слои файла ссылки Kserg_nn AutoCAD 4 19.11.2013 15:41
Как на VBA сделать фильтр DXF на видимые слои ? maratovich Программирование 4 12.02.2013 17:50
Как программно отнести слой в конкретный групповой фильтр? elena_k Программирование 3 23.08.2011 16:51