Тема: Как удалить фильтры?

Возможно ли это сделать, например, одной операцией, т.е. не удалять каждый фильтр по отдельности?

Re: Как удалить фильтры?

Удали файл "filter.nfl"

Re: Как удалить фильтры?

А откуда его удалить?

Re: Как удалить фильтры?

Из рабочего каталога AutoCAD'а.
Узнать его можно в свойствах иконки запуска AutoCAD'а.

Re: Как удалить фильтры?

Так нет такого файла вообще.
Есть filter.lsp,filter.fas, filter.dcl

Проясню ситуацию:
Имеются ввиду фильтры слоев

Re: Как удалить фильтры?

Одним "махом" не получиться.
А зачем так много создал???

Re: Как удалить фильтры?

"filter.nfl" лежит по умолчанию в корневой папке АКАДа.
Если же имеется в виду фильтр слоев из Layer Properties Manager, то имхо он хранится в файле чертежа.

Re: Как удалить фильтры?

Я уже давно пытаюсь найти ответ на этот вопрос (см. форум от 22.01.2003 в 10:15:33), но никто не знает ответа...


***Я работаю с огромной библиотекой блоков (созданных как мной, так и не мной), "заражённых" большим количеством Named Layer Filters. Каждый раз при вносе такого блока в общий чертёж он добавляет перечень своих Named Layer Filters, таким образом затрудняя работу поиска нужного тебе фильтра. А если таких блоков сотни?... Как стирать Named Layer Filters по одному я знаю, а как их стереть во всех блоках одним махом - нет. Может быть, кто-нибудь сталкивался с этой проблемой и знает ответ? Если да, то ответьте, пожалуйста.***

Re: Как удалить фильтры?

Я вообще ими не пользуюсь.
Просто ка-то скопировали что-то из файла с этими фильтрами - вот они и прицепились. Сейчас они везде и их огромное количество. Удалять по одному нереально, пробовал -  терпения не хватило. Думаю, что надо несколько часов, чтобы только из одного файла их убрать.
Такое количество фильтров делает работу невыносимой. Мало того, что Autocad дольше думает, так еще и с плоттерами проблемы возникают.

A как из файла чертежа эти фильтры вытащить?

Re: Как удалить фильтры?

Вот и я об этом!!!

Re: Как удалить фильтры?

У меня есть способ, но он не всегда работает.
Сделай Save As как AutoCAD R12/LT2 DXF (*.dxf).
При этом AutoCAD теряет всякие навороты 2000-ых AutoCAD-ов.

Re: Как удалить фильтры?

> Александр
Посмотрел dxf с добавленными фильтрами (блокнотом). Там добавлены несколько неграфических объектов: словарь, где перечислены имена фильтров и XDATA с параметрами этих фильтров (может и еще что-нибудь). Остается проанализировать, что и как надо удалить. Естественно, программным путем.

Re: Как удалить фильтры?

Здесь придется писать программу.
Вот программа, которую я писал для других целей.
Доработав, можно чистить твою библиотеку от мусора

;**********************************************
; 2SLD.LSP    !!! Запускается из AutoCAD R14 !!!
;---------------------------------------------------------------------
; Переопределение символов для AutoCAD R14 и создание слайдов
;*******************************************
(DEFUN C:2SLD (/ cmde path dwg l x c dwgname fname)

   ;Отсечение расширения от полного имени файла с расширением
   (DEFUN TRIMEXT (ext / ext noext)
   ; ext   - строка   C:\ACAD\PROEKT\NAME.ELE
   ; noext - получаем C:\ACAD\PROEKT\NAME
     (SETQ noext "")
     (WHILE (AND (/= "" ext)(/= "." (SUBSTR ext 1 1)))
       (SETQ noext (STRCAT noext (SUBSTR ext 1 1)))
       (SETQ ext (SUBSTR ext 2 (STRLEN ext)))
     )
     (SETQ noext noext)
   )

   (SETQ cmde (GETVAR "CMDECHO"))
   (SETVAR "FILEDIA" 0)
   (SETVAR "CMDECHO" 0)

   ;Создание списка DWG-файлов
   (COMMAND "DIR" "c:\\TEMP\\*.dwg /B /S > dwg.$$$")

   (GRAPHSCR)
   (SETQ dwg (OPEN "DWG.$$$" "r"))

   ; Считывание первой строки из списка DWG-файлов, если он создан
   (IF dwg (SETQ dwgname (READ-LINE dwg )))

   ; Чтение до тех пор, пока не будет встречен признак конца файла
   (WHILE dwgname
     (SETQ sldname (TRIMEXT dwgname))
     (COMMAND "_INSERT" dwgname "0,0" "" "" "")
     (COMMAND "_ZOOM" "_E")
     (COMMAND "_ZOOM" "0.8X")
     (COMMAND "_EXPLODE" "_LAST")
     (COMMAND "_EXPLODE" "_ALL")
     (COMMAND "_CHANGE" "_ALL" "" "_P" "_LA" "0" "_C" "_BYLAYER" "")
     (COMMAND "_-LAYER" "_S" "0" "")
     (COMMAND "_REGEN")
     (COMMAND "_MSLIDE" sldname)
     (COMMAND "_WBLOCK" dwgname "_Y" "" "0,0" "_P" "")

     ; Считывание следующей строки из файла списка
     (SETQ dwgname (READ-LINE dwg))
   )

   (IF dwg (CLOSE dwg)) ; Если файл открыт, закрыть его

   (SETVAR "CMDECHO" cmde)
   (SETVAR "FILEDIA" 1)
   (PRIN1)
)

Re: Как удалить фильтры?

Прошу прощения, в vk (14.05.2003 в 17:51:34) не XDATA а XRECORD

Re: Как удалить фильтры?

Попробуйте применить следующую функцию для удаления всех фильтров из текущего чертежа:

(defun all_filters_del (/ doc ltb xdic fd f rec)
   (setq doc (vla-get-activedocument (vlax-get-acad-object)))
   (setq ltb (vlax-vla-object->ename (vla-get-layers doc))) ; коллекция LAYERS
   (if (and (setq xdic (cdadr (member '(102 . "{ACAD_XDICTIONARY") (entget ltb)))) ; расширенный словарь
            (setq fd (cdadr (member '(3 . "ACAD_LAYERFILTERS") (entget xdic)))) ; словарь фильтров
            (assoc 3 (setq f (entget fd))) ;_ имеются фильтры
       ) ;_  and
     (progn
       ;; выделение списка записей
       (while (/= 3 (caar f))
         (setq f (cdr f))
       ) ;_ остался список (3 . имя_фильтра) (360 . ename_XRECORD)...
       ;; удаление записей словаря
       (while (setq xrec (cdadr f))
         (entdel xrec)
         (setq f (cddr f))
       ) ;_  while
       ;; удаление словаря фильтров
       (dictremove xdic "ACAD_LAYERFILTERS")
       (princ "\nФильтры из рисунка удалены.")
     ) ;_  progn
     (princ "\nФильтров в рисунке не обнаружено.")
   ) ;_  if
) ;_  defun
(vl-load-com)
(all_filtre_del) ;_ запуск

> Илья Р.
Заметил, что фильтры копируются при "Ctrl+C,Ctrl+V" и не копируются при использовании Design Centr'а

Re: Как удалить фильтры?

а ошибка в последней строке это специально?

Re: Как удалить фильтры?

> igor
не... просто руки кривые, а подправить - "нет технической возможности"....
если только так:
В последнюю строку программы вкралась опечатка. Следует читать так:
(all_filters_del)  ;_ запуск

Re: Как удалить фильтры?

Пользовался > VK (2003-05-17 15:02:37) этой прогой -- всё работает чики-пики.
Вопрос.
Насколько удаление этой программой схоже с зажатием кнопки "Делете лайер филтер" в свойствах слоёв? Имеется ввиду, не остаётся ли в чертеже чего-нибудь не удалённого?
Откуда берутся фильтры в чертеже без фильтров? Как это остановить?

Re: Как удалить фильтры?

> gbl-gbl
Да, похоже... только чтоб удалить много фильтров, кнопку тыкать замучисся.
Откуда берутся? Да через копи-пейст из других чертежей тащатся. Кстати, этого нет в 2005 и вроде бы в 2004.
Зато в 2005 эта прога не нужна... там уже предусмотрено групповое удаление фильтров :))

Re: Как удалить фильтры?

Вопрос в том, какая курица родила первое яйцо? Ведь пользуются  и добавляют фильтры довольно продвинутые юзеры, а их мало. Кроме того, этим летом, в течение всего одного мецяца я обнаружил вопросы по фильтрам на 4-х форумах, 2х русских и 2х американских. Раньше про фильтры вопросов не было. Критическая масса? Кроме того однажды я стал смотреть имена фильтров. Там были имена соовсем из другой оперы, даже не на английском яз. и целая серия юникодом. Что бы это значило? В 2004 есть DELETE ALL но если слоев много, тысяч 15, автокад вышибает. Проги же работают хорошо.

Re: Как удалить фильтры?

> Vova
"Да, да!": -- закричали депутаты из Прибалтики.
Пришли тут чертежы, в навороченной конторе деланные. Но в каждом по 1МБ инфы по фильтрам. Две линии, а чертеж весит 1.5МБ. Названия про ИК, ЭЛ, АР причем на итальянском, польском, испанском...
Может, эпидемия?

> VK
А по другому никак они не могут попасть? Открыты одной программой, например..

Re: Как удалить фильтры?

По другому... Да запросто! Ведь эти фильтры не что иное как записи в словаре. В принципе любая программа или надстройка над АКАДом, которая "умеет" писать такие данные в чертеж, может их туда записывать.

Re: Как удалить фильтры?

Спасибо VK за программу.

Re: Как удалить фильтры?

Поставила пороль на автокадовский файл... и забыла его..
Можно ли его как-то открыть ? (bak-файлов нет)
Спасибо.

Re: Как удалить фильтры?

Ну вот... Приехали.... В версии 2005 фильтры живут в другом словаре. И моя предыдущая програмка их уже не удаляет. Потому написал другую. Дополнительно предусмотрел возможность оставить нужные фильтры. Для этого нужно перечислить их имена в списке при вызове функции. Если нужно удалить все фильтры - то список должен быть пустым.

;; Удаление лишних фильтров слоев из чертежа
;; имена фильтров, которые требуется оставить передаются списком
;; Функция переписана с учетом особенностей версии 2005, где появился новый словарь
(defun all_filters_del (lstnames / vla:lrs vla:xdic vla:dic vla:xrec name DataType DataValue num)
  (setq vla:lrs (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (vla-get-hasextensiondictionary vla:lrs) :vlax-true)
    ;; при наличии словаря требуется детальная проверка
    (progn
      (setq lstnames (mapcar 'strcase lstnames))
      (setq vla:xdic (vla-getextensiondictionary vla:lrs))
      (setq num 0)
      ;; поиск и удаление фильтров версий пре-2005
      (if (progn (vlax-for item vla:xdic
                   (if (= (vla-get-name item) "ACAD_LAYERFILTERS")
                     (setq vla:dic item)
                   ) ;_  if
                 ) ;_  vlax-for
                 vla:dic
          ) ;_  progn
        (progn
          (vlax-for vla:xrec vla:dic
            (if (not (member (strcase (setq name (vla-get-name vla:xrec))) lstnames))
              (progn (vla-remove vla:dic name)
                     (vlax-release-object vla:xrec)
                     (setq num (1+ num))
              ) ;_  progn
            ) ;_  if
          ) ;_  vlax-for
          (vlax-release-object vla:dic)
          (if (zerop num)
            (princ "\nЛишних фильтров 2002 в рисунке не обнаружено.")
            (princ "\nЛишние фильтры 2002 из рисунка удалены.")
          ) ;_  if
        ) ;_ progn
      ) ;_ if
      (setq vla:dic nil)
      (setq num 0)
      ;; поиск и удаление фильтров версии 2005
      (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)
                  (not (member (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
                (vla-remove vla:dic name)
                (vlax-release-object vla:xrec)
                (setq num (1+ num))
              ) ;_  progn
            ) ;_  if
          ) ;_  vlax-for
          (vlax-release-object vla:dic)
          (if (zerop num)
            (princ "\nЛишних фильтров 2005 в рисунке не обнаружено.")
            (princ "\nЛишние фильтры 2005 из рисунка удалены.")
          ) ;_  if
        ) ;_ progn
      ) ;_ if
      (vlax-release-object vla:xdic)
    ) ;_  progn
    (princ "\nФильтров в рисунке не обнаружено.")
  ) ;_  if
  (vlax-release-object vla:lrs)
  (princ)
) ;_ defun
(vl-load-com)
(all_filters_del '("MyFilter1" "MyFilter2" "MyFilter3")) ;_ автозапуск программы для удаления только лишних
;;;(all_filters_del '()) ;_ автозапуск программы для удаления ВСЕХ фильтров