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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление замороженных слоев

Удаление замороженных слоев

Ответ
Поиск в этой теме
Непрочитано 29.03.2007, 14:19 #1
Удаление замороженных слоев
ursula
 
строительство
 
Екатеринбург
Регистрация: 21.07.2005
Сообщений: 463

Добрый день.

Задача.
Все замороженные слои (более20 ) должны быть удалены со всеми примитивами.

P.S.По одиночке слой удалять умею, но очень долго получается.
Есть такая функция в Тоол паке, но она не работает(может старая весия)
Просмотров: 4097
 
Непрочитано 29.03.2007, 15:10
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Код:
[Выделить все]
(defun c:layfrdel (/                      *kpblc-activedoc*
                   *error*                _kpblc-error-catch
                   _kpblc-layer-status-save
                   _kpblc-layer-status-restore
                   answer                 lst_lay
                   tmp_lay
                   )

  (defun _kpblc-error-catch (protected-function
                             on-error-function
                             /
                             catch_error_result
                             )
                            ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*	protected-function	- "защищаемая" функция
*	on-error-function	- функция, выполняемая в случае ошибки
=============================================================================|;
    (setq catch_error_result (vl-catch-all-apply protected-function))
    (if (and (vl-catch-all-error-p catch_error_result)
             on-error-function
             ) ;_ end of and
      (apply on-error-function
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-layer-status-save (layers-on / item)
    (vlax-for item (vla-get-layers *kpblc-activedoc*)
      (setq *kpblc-list-layer-status*
             (append *kpblc-list-layer-status*
                     (list
                       (list item
                             (cons "freeze" (vla-get-freeze item))
                             (cons "lock" (vla-get-lock item))
                             ) ;_ end of list
                       ) ;_ end of list
                     ) ;_ end of append
            ) ;_ end of setq
      (if layers-on
        (progn
          (_kpblc-error-catch
            '(lambda ()
               (vla-put-freeze item :vlax-false)
               ) ;_ end of lambda
            nil
            ) ;_ end of _kpblc-error-catch
          (vla-put-lock item :vlax-false)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of defun

  (defun _kpblc-layer-status-restore (/ item)
    (if *kpblc-list-layer-status*
      (progn
        (foreach item *kpblc-list-layer-status*
          (_kpblc-error-catch
            '(lambda ()
               (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
               ) ;_ end of lambda
            nil
            ) ;_ end of _kpblc-error-catch
          (_kpblc-error-catch
            '(lambda ()
               (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
               ) ;_ end of lambda
            nil
            ) ;_ end of _kpblc-error-catch
          ) ;_ end of foreach
        ) ;_ end of progn
      ) ;_ end of if
    (setq *kpblc-list-layer-status* nil)
    ) ;_ end of defun

  (vl-load-com)
  (if (and (setq answer (_kpblc-error-catch
                          (function
                            (lambda (/ res)
                              (initget "ЗАМОРОЖ ВЫКЛ ЗАМВыкл _ Freeze Off FROFF")
                              (setq
                                res
                                 (getkword
                                   "Обрабатываем слои [ЗАМОРОЖенные/ВЫКЛ/ЗАМВыкл] <Выход> : "
                                   ) ;_ end of getkword
                                ) ;_ end of setq
                              ) ;_ end of lambda
                            ) ;_ end of function
                          nil
                          ) ;_ end of _kpblc-error-catch
                 ) ;_ end of setq
           (not (vl-catch-all-error-p answer))
           ) ;_ end of and
    (progn
      (vla-startundomark
        (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
        ) ;_ end of vla-startundomark
      (vlax-for ent (vla-get-blocks *kpblc-activedoc*)
        (if (wcmatch (strcase (vla-get-name ent)) "*_SPACE*")
          (vlax-for subent ent
            (cond
              ((and (= (strcase answer) "FREEZE")
                    (= (vla-get-freeze
                         (setq
                           tmp_lay (vla-item (vla-get-layers *kpblc-activedoc*)
                                             (vla-get-layer subent)
                                             ) ;_ end of vla-item
                           ) ;_ end of setq
                         ) ;_ end of vla-get-Freeze
                       :vlax-true
                       ) ;_ end of =
                    ) ;_ end of and
               (vla-put-freeze tmp_lay :vlax-false)
               (vla-erase subent)
               (vla-put-freeze tmp_lay :vlax-true)
               )
              ((and (= (strcase answer) "OFF")
                    (= (vla-get-layeron
                         (setq
                           tmp_lay (vla-item (vla-get-layers *kpblc-activedoc*)
                                             (vla-get-layer subent)
                                             ) ;_ end of vla-item
                           ) ;_ end of setq
                         ) ;_ end of vla-get-layeron
                       :vlax-false
                       ) ;_ end of =
                    ) ;_ end of and
               (vla-erase subent)
               )
              ((and (= (strcase answer) "FROFF")
                    (or
                      (= (vla-get-freeze
                           (setq
                             tmp_lay (vla-item (vla-get-layers *kpblc-activedoc*)
                                               (vla-get-layer subent)
                                               ) ;_ end of vla-item
                             ) ;_ end of setq
                           ) ;_ end of vla-get-Freeze
                         :vlax-true
                         ) ;_ end of =
                      (= (vla-get-layeron tmp_lay) :vlax-false)
                      ) ;_ end of or
                    ) ;_ end of and
               (if (vl-catch-all-error-p
                     (vl-catch-all-apply '(lambda () (vla-erase subent)))
                     ) ;_ end of VL-CATCH-ALL-ERROR-P
                 (progn
                   (vla-put-freeze tmp_lay :vlax-false)
                   (vla-erase subent)
                   (vla-put-freeze tmp_lay :vlax-true)
                   ) ;_ end of progn
                 ) ;_ end of if
               )
              (t (setq tmp_lay nil))
              ) ;_ end of cond
            (if (and tmp_lay
                     (not (member tmp_lay lst_lay))
                     ) ;_ end of and
              (setq lst_lay (cons tmp_lay lst_lay))
              ) ;_ end of if
            ) ;_ end of vlax-for
          ) ;_ end of if
        ) ;_ end of vlax-for
      (mapcar '(lambda (x) (_kpblc-error-catch '(lambda () (vla-delete x)) nil))
              lst_lay
              ) ;_ end of mapcar
      (vla-endundomark *kpblc-activedoc*)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.03.2007, 15:36
#3
ursula

строительство
 
Регистрация: 21.07.2005
Екатеринбург
Сообщений: 463


Cпасибо, все прекрано работает , получил большое удовольствие от работы данного лиспа.

Кулик Алексей aka kpblc-Огромнейшее спасибо
ursula вне форума  
 
Непрочитано 29.03.2007, 20:41
#4
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Есть еще и такая вещь
В Download'e лежит с февраля месяца
http://dwg.ru/dnl/2051
den001 вне форума  
 
Автор темы   Непрочитано 30.03.2007, 11:15
#5
ursula

строительство
 
Регистрация: 21.07.2005
Екатеринбург
Сообщений: 463


den001
Запустить то запустил , но вместо удаления замороженных слоев,она их размораживает.
ursula вне форума  
 
Непрочитано 30.03.2007, 22:46
#6
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


:shock: Кинь чертеж, в котором такое происходит, если можно. Или так во всех? Очень хочу посмотреть, честно. У меня все прекрасно работает. Да и вообще пока жалоб не было :shock:
P.S. А Акад какой?

P.P.S. Сейчас специально скачал из Download, все свои проги выгрузил и запустил. Работает, хоть тресни. :shock:
den001 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление замороженных слоев