Значится так, как говаривал тов.Жеглов. Код немного переделал. НО! Сносится ассоциативность штриховки. На файлах с большим количеством объектов тормозит безбожно. Слой временно разблокируется и потом возвращается обратно. Вариант с замороженными и отключенными слоями не обрабатывается - возможны проблемы (если честно, то уже было лень вводить дополнительные проверки на возможность установки заморозки слоя). На всякий случай переделанный вариант:
;|=============================================================================
* Скрытие выбранных объектов / невыбранных объектов / показ всех объектов.
* Сделано в качестве попытки создания аналога ADT-шной команды Isolate objects.
* Работает только в активном пространстве.
* Параметры вызова:
* bit что делать. 0 - показать все; 1 - скрыть выделенные; 2 - скрыть
* все, кроме выделенных
* Примеры вызова:
(kpblc-objects-hide 0) ; Показать все объекты
(kpblc-objects-hide 1) ; Скрыть выделенные объекты
(kpblc-objects-hide 2) ; Скрыть все, кроме выделенных
=============================================================================|;
(defun kpblc-objects-hide (bit / selset selset_all msg item _regenmode_)
;; Локальные функции
(defun loc:put_visible(vla-ent vis / layer layer_lock)
(setq layer (vlax-ename->vla-object (tblobjname "layer" (vla-get-layer item)))
layer_lock (vla-get-lock layer))
(vla-put-Lock layer :vlax-false)
(vla-put-Visible vla-ent vis)
(vla-put-lock layer layer_lock)
)
;; Конец локальных функций
(vl-load-com)
(if (not *kpblc-activedoc*)
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
) ;_ end of if
(vla-startundomark *kpblc-activedoc*)
(setq _regenmode_ (getvar "regenmode"))
(cond
((= bit 1) (setq msg "Скрыть выделенные объекты"))
((= bit 2) (setq msg "Скрыть кроме выделенных"))
) ;_ end of cond
(if (= bit 0)
(progn
(setq selset (ssget "_A"))
(while (and selset (> (sslength selset) 0))
(setq item (ssname selset 0))
(ssdel item selset)
(setq item (vlax-ename->vla-object item) )
(if (vlax-property-available-p item 'visible)
(loc:put_visible item :vlax-true)
) ;_ end of if
) ;_ end of while
) ;_ end of progn
(progn
(setq selset (ssget "_I"))
(while (not selset)
(prompt msg)
(setq selset (ssget))
) ;_ end of while
(cond
((= bit 1) ; Скрывать выделенные
(while (and selset (> (sslength selset) 0))
(setq item (ssname selset 0))
(ssdel item selset)
(setq item (vlax-ename->vla-object item))
(if (vlax-property-available-p item 'visible)
(loc:put_visible item :vlax-false)
) ;_ end of if
) ;_ end of while
)
((= bit 2) ; Скрывать кроме выделенных
(setq selset_all (ssget "_A"))
(while (and selset_all (> (sslength selset_all) 0))
(setq item (ssname selset_all 0))
(ssdel item selset_all)
(if (not (ssmemb item selset))
(progn
(setq item (vlax-ename->vla-object item))
(if (vlax-property-available-p item 'visible)
(loc:put_visible item :vlax-false)
) ;_ end of if
) ;_ end of progn
) ;_ end of if
) ;_ end of while
)
) ;_ end of cond
) ;_ end of progn
) ;_ end of if
(setvar "regenmode" 1)
(vla-regen *kpblc-activedoc* acallviewports)
(setvar "regenmode" _regenmode_)
(vla-endundomark *kpblc-activedoc*)
) ;_ end of defun