|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Лисп (создание фильтров)
Инженер-конструктор
Минск, Беларусь
Регистрация: 25.09.2004
Сообщений: 315
|
||
Просмотров: 3878
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Имеешь в виду фильтры слоев?
"Делать" их довольно просто - достаточно что нибудь притащить из другого файла и все фильтры притащатся (в 2002 работает, а потом кажется это исправили). Вот тут есть моя программка от 2004-12-03 16:16:17, которая оставляет только нужные фильтры, остальные удаляет. Для создания фильтров "с нуля" не делал. |
|||
![]() |
|
||||
Регистрация: 15.04.2005
Сообщений: 243
|
Цитата:
Взята отсюда: http://discussion.autodesk.com/threa...sageID=1128314 Для создания фильтров пользуюсь MlayerF.lsp от Kojacek. Взята отсюда: http://discussion.autodesk.com/threa...sageID=1169460 Всё работает без проблем. |
|||
![]() |
|
||||
Инженер-конструктор Регистрация: 25.09.2004
Минск, Беларусь
Сообщений: 315
|
Я такую фишку хочу сделать:
По команде лисп удаляет все старые фильтры, создает новые фильтры, создает новые слои, переносит созданные слои в фильтры. Но по сути перевод в фильтры не нужен... Проги посмотрю на работе... Спасибо.
__________________
Постинг воспринимать как личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.04.2005
Сообщений: 243
|
Цитата:
1. Создание фильтров. Это код, который я использую: ;----------------------------- ;;; ;;; Function can define a named layer filter ;;; by Jacek (kojacek) kojacek@poczta.onet.pl (2000) ;;; (defun dict:MlayerF (NAME FILTER / LayTbl ExtDict LayColl ExtDictData GrpList NewDict Temp XdLst XrecData NewXRec ) (setq LayTbl (cdr (assoc 330 (entget (tblobjname "LAYER" "0"))))) (setq ExtDict (cdr (assoc 360 (entget LayTbl)))) (if (not ExtDict) (progn (vl-load-com) (setq LayColl (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) (setq ExtDict (vla-GetExtensionDictionary LayColl)) (setq ExtDict (vlax-vla-object->ename ExtDict)) ) ) (setq ExtDictData (entget ExtDict)) (while ExtDictData (setq Temp (if (= (caar ExtDictData) 3) (list (cons (cdr (car ExtDictData)) (cdr (cadr ExtDictData)))) ) ExtDictData (cdr ExtDictData) ) (setq GrpList (append GrpList Temp)) ) (if (or (not GrpList) (not (cdr (assoc "ACAD_LAYERFILTERS" GrpList)))) (progn (setq DictList (list (cons 0 "DICTIONARY") (cons 100 "AcDbDictionary"))) (setq NewDict (entmakex DictList)) (setq NewDict (dictadd ExtDict "ACAD_LAYERFILTERS" NewDict)) ) (setq NewDict (cdr (assoc "ACAD_LAYERFILTERS" GrpList))) ) (setq ExtDictData Nil Temp Nil GrpList Nil) (setq ExtDictData (entget NewDict)) (while ExtDictData (setq Temp (if (= (caar ExtDictData) 3) (list (cons (cdr (car ExtDictData)) (cdr (cadr ExtDictData)))) ) ExtDictData (cdr ExtDictData) ) (setq GrpList (append GrpList Temp)) ) (if (or (not GrpList) (not (cdr (assoc FILTER GrpList))) ) (progn (setq XdLst (list (cons 0 "XRECORD") (cons 100 "AcDbXrecord"))) (setq XrecData (append XdLst (list (cons 1 NAME)(cons 1 FILTER)(cons 1 "*")(cons 1 "*") (cons 70 0)(cons 1 "*")(cons 1 "*"))) ) (setq NewXRec (entmakex XRecData)) (dictadd NewDict Name NewXRec) ) Nil ) ) (dict:MLayerF "PLBG" "P-*,*|P-*,PZ-*,*|PZ-*,PZZ-*,*|PZZ-*,*|PE-*") (dict:MLayerF "ELEC" "E-*,*|E-*,EZ-*,*|EZ-*,EZZ-*,*|EZZ-*,*|EE-*") ;--------------------------- Он создаёт два фильтра - PLBG и ELEC (см две последнии линии кода). Фильтр PLBG показывает слои, которые в оригинальном и референс черетежах начинаются с P- , PZ- и PZZ- Фильтр ELEC показывает слои, которые в оригинальном и референс черетежах начинаются с E- , EZ- и EZZ- Можно создать фильтров сколько угодно. Сохраняешь файл в директории включённой в путь поиска AutoCAD, например, с именем FILTERS01.lsp. Запускаешь из меню [FILTERS]^C^C^C(LOAD "FILTERS01.LSP"). 2. Удаление фильтров. Довольно давно на Autodesk(овском) сайте нашёл код, которым и пользуюсь (кто автор не помню): ;------------------------- (defun C:LayerFiltersDelete () (vl-Load-Com) (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) "ACAD_LAYERFILTERS"))) (princ "\nAll layer filters have been deleted.") (princ)) (defun C:LFD () (C:LayerFiltersDelete)) :-------------------------------- Сохранил с именем LFD.lsp Когда необходимо делаю appload и запускаю из командной строки. 3. По поводу первого линка в моём предыдущем постинге, может пригодится. Эта программа удаляет установки бумаги. Я её использую в своём меню перед тем, как импортировать новые. Удачи! |
|||
![]() |
|
||||
Инженер-конструктор Регистрация: 25.09.2004
Минск, Беларусь
Сообщений: 315
|
Спасибо... В принципе с программкими я разобрался, тока не знал как одному фильтру присвоить разные критерии... Спасибо...
Хотелось бы еще VK услышать... Мне его прога понравилась именно за то что она оставляет указанные фильтры...[/b]
__________________
Постинг воспринимать как личное мнение. |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
>Torero
Программа практически не отлаживалась, сам пользуюсь ей довольно редко. К сожалению на своих чертежах не могу воспроизвести эту сбойную ситуацию. Если не сложно, замыль нечищеный фрагмент чертежа, где эта прога дает ошибку. Ну и имена фильтров, которые необходимо оставить. Попробую разобраться. Хотя, по идее, такого Цитата:
Кстати, в виде текстового (.LSP) файла эта прога лежит на http://vkle.bazarov.net/afd.zip |
|||
![]() |