|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
01.08.2004, 20:41 | #1 | |
Фильтры слоев
Engineer
New-York
Регистрация: 05.09.2003
Сообщений: 10,288
|
||
Просмотров: 7583
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Фильтры слоев тащатся из других чертежей, если использовать copy-paste. Вот так, если источников было много - то вполне может такая ерунда получиться. Притом, если притащенные примитивы даже и будут удалены, то фильтры все равно останутся.
А вот если тащить к примеру блоки через дизайн-центр, то фильтры не добавляются Я тоже в свое время писал небольшой лисп для тотальной чистки фильтров Код:
|
|||
|
||||
Сообщений: n/a
|
|
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
1. Kiri...co.il> Здесь еще один лисп. Можешь сравнить с первыми двумя о оценить, что лучше и почему. И если результат сравнения сообщишь всем, это будет ценно.
;| Written by: R. Robert Bell Purpose: Allows the user to enter a wildcard string to keep any matching filters. Sample string: "`#*,MW*" will keep all filters beginning with a "#" or "MW" Copyright © 2004 by R. Robert Bell |; (defun rrbI:LayerFiltersDelete (strKeepWC / objXDict) ;; This function insures that an Extension Dictionary exists, and works on both locations for layer filters (vl-load-com) ; load ActiveX if needed (vl-catch-all-apply ; trap error if no extension dictionary (function (lambda () (setq objXDict (vla-GetExtensionDictionary ; bind dictionary to variable (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)))))))) (cond (objXDict ; if the extension dictionary exists (or ; use OR to return T for success (rrbIeleteAllXRecs objXDict "ACAD_LAYERFILTERS" strKeepWC) ; pre-2005 layer filters (rrbIeleteAllXRecs objXDict "AcLyDictionary" strKeepWC))))) ; 2005 layer filters (defun rrbIeleteAllXRecs (objXDict dictName strKeepWC / objDict i) ;; This function performs the chore of deleting each filer that doesn't match the wildcard (vl-catch-all-apply ; trap errors (function (lambda () (setq objDict (vla-Item objXDict dictName)) ; get layer filters dictionary (vlax-for objXRec objDict ; loop thru all XRecords in the dictionary (cond ((not (and strKeepWC (wcmatch (vla-Get-Name objXRec) strKeepWC))) ; if deleting all filters, or current doesn't match wildcard (setq i (1+ (cond (i) ; increment counter (0)))) ; initialize counter (vla-Delete objXRec))))))) ; delete filter (cond (i (princ (strcat "\n" (itoa i) " filters deleted."))))) ; if counter is bound, report number of filters deleted (defun C:LFD (/ inpKeep) ;; Main command-line function (setq inpKeep (getstring "\nWildcard mask for filters to keep, or <Enter> to delete all: ")) (rrbI:LayerFiltersDelete (cond ((/= inpKeep "") inpKeep))) ; pass nil to subr if user hit <Enter> (princ)) ; clean exit 2. VK> Я перенес через клипборд содержимое файла с большим количеством фильтров в новый (пустой) файл. Фильтры в новый файл не переехали. В исходном файле было ... 6270 (!) фильтров, причем имена подавляющего большинства из них были вполне логическими, например, (даю в переводе) Мебель, 7-ой этаж, архитект. Целая серия таких: Покажи все замороженные, Покажи все включенные и т. д. Надо бы понять, как это получается. Предлагаю всем посмотреть свои файлы, особенно если они пришли к вам извне, почистить их либо лиспами, либо, если 2004-2005-то штатными средствами и посмотреть, как снизился вес файла. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Цитата:
Может, это имеет значение? |
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
VK> Проверил в 2002, там действительно фильтры наследуются. А в 2004-нет!. Раскпопали еще одно неуказанное положительное отвичие!
Kirill.co.il> Скопиуй код (Ctrl+C) в новый файл Notepad (Блокнот). Заведи директорию под именем LISP. Сохрани файл здесь под именем, например, LayerFiltersDelete.lsp Далее открой автокадовский файл с фильтрами. Открой Explorer (Проводник) на директории LISP. Прижми строку где файл левой кнопкой мыши и тащи в чертеж. Тут-же смотри в командную строку. Увидишь там какую-то абревиатуру. В моем случае это LFD (от Layer Filters Delete) В других лиспаз будет свое. Это и есть имя команды, набери ее и жми Enter. Таким способом ты загрузишь лисп только в один файл и на одну сессию. Для вечной загрузки надо сделать еже манипуляци, но меня срочно зовут, кто-нибудь об-ясните пож. |
|||