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  

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

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


Если такой фильтр создать руками - какой будет результат?
__________________
Моя библиотека 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 и создание фильтра слев. кривой код или баг автокада?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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