Lisp и создание фильтра слев. кривой код или баг автокада?
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp и создание фильтра слев. кривой код или баг автокада?

Lisp и создание фильтра слев. кривой код или баг автокада?

Ответ
Поиск в этой теме
Непрочитано 12.08.2014, 13:51 #1
Lisp и создание фильтра слев. кривой код или баг автокада?
Vladimir_Sergeevich
 
рисую дороги, в перерывах курю Lisp
 
Пермь
Регистрация: 20.04.2011
Сообщений: 475

не так давно на нашем форуме стибрил функцию создания фильтра слов.
Код:
[Выделить все]
 (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 "проектные слои" "~*|*")
и фильтр вроде бы как и появляется, токо с одним НО.
при активном фильтре в селекторе слоев болтаются ВСЕ слои. скрин прикладываю.
если закрыть чертеж и открыть снова или создать другой фильтр - все начинает работать как надо.

и вот собственно вопрос: этот баг - результат недоделанности кода или же дело в самом автокаде?
з.ы. акад 2010 рус

Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 53
Размер:	95.9 Кб
ID:	133504  

__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Просмотров: 1227
 
Непрочитано 12.08.2014, 14:23
#2
Кулик Алексей aka kpblc
Moderator

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


Если такой фильтр создать руками - какой будет результат?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.08.2014, 15:04
#3
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Когда создавал руками - сразу показывает только слои по фильтру. это обычный фильтр по свойствам с маской по имени.
Когда надоело на каждом новом чертеже делать одно и то же - нашел функцию создания этого фильтра, но вот обнаружил такую неприятность небольшую.
Повторю еще один момент: если создать другой фильтр (я его и удалал сразу), созданный программно начинает работать как должен.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp и создание фильтра слев. кривой код или баг автокада?

Реклама i
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. skkkk Готовые программы 144 25.07.2024 10:48
Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders 99xt1 LISP 24 01.12.2014 12:24
Создание гиперссылки с помошью Lisp BoTTePa3 LISP 3 03.06.2013 13:18
LISP создание списка из text 4ertegn1k LISP 10 09.03.2011 15:32