Тема: Как удалить фильтры?
Возможно ли это сделать, например, одной операцией, т.е. не удалять каждый фильтр по отдельности?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Autodesk → AutoCAD → Как удалить фильтры?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли это сделать, например, одной операцией, т.е. не удалять каждый фильтр по отдельности?
Из рабочего каталога AutoCAD'а.
Узнать его можно в свойствах иконки запуска AutoCAD'а.
Так нет такого файла вообще.
Есть filter.lsp,filter.fas, filter.dcl
Проясню ситуацию:
Имеются ввиду фильтры слоев
Одним "махом" не получиться.
А зачем так много создал???
"filter.nfl" лежит по умолчанию в корневой папке АКАДа.
Если же имеется в виду фильтр слоев из Layer Properties Manager, то имхо он хранится в файле чертежа.
Я уже давно пытаюсь найти ответ на этот вопрос (см. форум от 22.01.2003 в 10:15:33), но никто не знает ответа...
***Я работаю с огромной библиотекой блоков (созданных как мной, так и не мной), "заражённых" большим количеством Named Layer Filters. Каждый раз при вносе такого блока в общий чертёж он добавляет перечень своих Named Layer Filters, таким образом затрудняя работу поиска нужного тебе фильтра. А если таких блоков сотни?... Как стирать Named Layer Filters по одному я знаю, а как их стереть во всех блоках одним махом - нет. Может быть, кто-нибудь сталкивался с этой проблемой и знает ответ? Если да, то ответьте, пожалуйста.***
Я вообще ими не пользуюсь.
Просто ка-то скопировали что-то из файла с этими фильтрами - вот они и прицепились. Сейчас они везде и их огромное количество. Удалять по одному нереально, пробовал - терпения не хватило. Думаю, что надо несколько часов, чтобы только из одного файла их убрать.
Такое количество фильтров делает работу невыносимой. Мало того, что Autocad дольше думает, так еще и с плоттерами проблемы возникают.
A как из файла чертежа эти фильтры вытащить?
У меня есть способ, но он не всегда работает.
Сделай Save As как AutoCAD R12/LT2 DXF (*.dxf).
При этом AutoCAD теряет всякие навороты 2000-ых AutoCAD-ов.
> Александр
Посмотрел dxf с добавленными фильтрами (блокнотом). Там добавлены несколько неграфических объектов: словарь, где перечислены имена фильтров и XDATA с параметрами этих фильтров (может и еще что-нибудь). Остается проанализировать, что и как надо удалить. Естественно, программным путем.
Здесь придется писать программу.
Вот программа, которую я писал для других целей.
Доработав, можно чистить твою библиотеку от мусора
;**********************************************
; 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)
)
Прошу прощения, в vk (14.05.2003 в 17:51:34) не XDATA а XRECORD
Попробуйте применить следующую функцию для удаления всех фильтров из текущего чертежа:
(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'а
> igor
не... просто руки кривые, а подправить - "нет технической возможности"....
если только так:
В последнюю строку программы вкралась опечатка. Следует читать так:
(all_filters_del) ;_ запуск
Пользовался > VK (2003-05-17 15:02:37) этой прогой -- всё работает чики-пики.
Вопрос.
Насколько удаление этой программой схоже с зажатием кнопки "Делете лайер филтер" в свойствах слоёв? Имеется ввиду, не остаётся ли в чертеже чего-нибудь не удалённого?
Откуда берутся фильтры в чертеже без фильтров? Как это остановить?
> gbl-gbl
Да, похоже... только чтоб удалить много фильтров, кнопку тыкать замучисся.
Откуда берутся? Да через копи-пейст из других чертежей тащатся. Кстати, этого нет в 2005 и вроде бы в 2004.
Зато в 2005 эта прога не нужна... там уже предусмотрено групповое удаление фильтров :))
Вопрос в том, какая курица родила первое яйцо? Ведь пользуются и добавляют фильтры довольно продвинутые юзеры, а их мало. Кроме того, этим летом, в течение всего одного мецяца я обнаружил вопросы по фильтрам на 4-х форумах, 2х русских и 2х американских. Раньше про фильтры вопросов не было. Критическая масса? Кроме того однажды я стал смотреть имена фильтров. Там были имена соовсем из другой оперы, даже не на английском яз. и целая серия юникодом. Что бы это значило? В 2004 есть DELETE ALL но если слоев много, тысяч 15, автокад вышибает. Проги же работают хорошо.
> Vova
"Да, да!": -- закричали депутаты из Прибалтики.
Пришли тут чертежы, в навороченной конторе деланные. Но в каждом по 1МБ инфы по фильтрам. Две линии, а чертеж весит 1.5МБ. Названия про ИК, ЭЛ, АР причем на итальянском, польском, испанском...
Может, эпидемия?
> VK
А по другому никак они не могут попасть? Открыты одной программой, например..
По другому... Да запросто! Ведь эти фильтры не что иное как записи в словаре. В принципе любая программа или надстройка над АКАДом, которая "умеет" писать такие данные в чертеж, может их туда записывать.
Поставила пороль на автокадовский файл... и забыла его..
Можно ли его как-то открыть ? (bak-файлов нет)
Спасибо.
Ну вот... Приехали.... В версии 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 '()) ;_ автозапуск программы для удаления ВСЕХ фильтров
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Autodesk → AutoCAD → Как удалить фильтры?
Форум работает на PunBB, при поддержке Informer Technologies, Inc