|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
15.12.2017, 09:14 | #1 | |
Какой-то глюк в LAYOUT - как отловить его программно?
г. Норильск
Регистрация: 15.08.2005
Сообщений: 470
|
||
Просмотров: 2673
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Ты бы код, что ли, показал
Код:
----- добавлено через ~2 мин. ----- Пример вызова: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Код простой до безобразия. :-)
Вот фрагмент: Код:
в совершенно конкретном единичном чертеже происходит глюк. (tt ) попробую чуть позже, сейчас надо убегать по срочному делу. ----- добавлено через ~3 мин. ----- Да, вкладка ЛАЙОУТ только одна, проверка на это дело производится до вызова этой части. Если вкладок несколько, этот фрагмент кода обходится.
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Кстати, замени у себя command на command-s
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Прибежал - попробовал.
То же самое. Команда: Команда: (tt "Вып1" "888") nil Команда: (tt "888" "777") nil Первый вызов без проблем, второй - не меняет и диагностику не выводит. Вкладка "888" блокируется, удалять её Автокад отказывается. >>>Кстати, замени у себя command на command-s Меняю мало-помалу. В обработчике ошибок (а там у меня тоже были command) уже заменил, т.к. действительно они не отрабатывали, и выдавали лишние сообщения, а command-s - отрабатывают. В других местах меняю по мере обнаружения проблем, т.к. не ясно себе представляю, чем одна отличается от другой, хотя мануал вроде бы и прочитал.
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Если я правильно понимаю, то command-s выполняется в тот момент, когда ты ее вызываешь в коде. command и vl-cmdf ставятся "в очередь", которая обрабатывается уже после того, как сработал лисп. Могу ошибаться, естественно.
P.S. Специально несколько раз прогнал - переименование листа выполняется корректно. Удаление выполняется корректно. Даже если лист еще ни разу не активировался. Может, у тебя с ACAD'ом что-то "не то" и какое-то дополнение влезает? Я-то тестировал на "чистом"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Может быть...
У меня (ACAD2016x64Rus) Но всё это безобразие происходит в одном-единственном файле. В него вставлена какая-то 3D-модель (кто и в чём её делал - неведомо). В других файлах всё штатно - что (tt ...), что команды классического автолиспа. В принципе, ситуацию можно отловить, выставив чего-нибудь в глобальную переменную перед вызовом (command-s "_-layout" "_ren" ...) и сбросив сразу же после, а если "вылетело и не сбросилось" - обработать в *error* по наличию этой переменной да и обнулить её там же. Но - подумалось мне - вдруг есть более другие штатные средства. Например, некая системная переменная (хранящаяся в чертеже), которая управляет поведением Лайоутов.
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Следовательно, проблема в файле. _.audit, _.purge, _.-wblock - рецепты-то стандартные.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
О!
Ещё один момент обнаружил. Дай, думаю, посмотрю, что у него внутри "глазами". Сохранил в DXF. И что же? Лайоут, который всем показывал, что он "переименовался", отображаясь новым именем в ответе на (setq laylst (layoutlist)) и на названии вкладки, в реальности оставался под старым именем (исходное было "ВЫП1"), на которое он радостно отзывался при вызове команды _layout и позволял делать с собой что угодно, включая удаление. А вот (tt ) после первого переименования его не видит всё равно - ни по "старому" (скрытому), ни "новому" (отображаемому) имени. Во как! ----- добавлено через ~9 мин. ----- Да, "_аудит" помогает (найдено и исправлено 14 ошибок), после чего моя программа радостно шурует дальше. В принципе - решение есть: до проблемного места выставляем в глобальную переменную признак "опасности", который снимаем после его прохождения, если вылетели - обрабатываем его в *error*, где выводим пользователю сообщение о необходимости запустить аудит файла. Как-то так... Всем спасибо за участие!
__________________
Счастливо, Алексей! |
|||
|
||||
как вариант, без проверки на дубль
Код:
Последний раз редактировалось koMon, 15.12.2017 в 17:53. |
||||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Всем привет!
Да, этот вариант на "кривом файле" работает: Команда: (load "r2") Layout_rename Команда: (Layout_rename "Вып1" "777") nil Команда: (Layout_rename "777" "888") Can't Rename "777" to "888" Т.е. на сообщение об ошибке мы выходим, но счастья это не принесло, т.к. после первого переименования (формально выполненного успешно), далее по ходу программы следует команда (setvar "ctab" namlay) которая тоже будет давать ошибку. В приведённом выше примере это выглядит так: Команда: (setvar "ctab" "777") Настройка переменной AutoCAD отвергнута: "ctab" "777"
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Сделано?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Да сделано конечно, я же писал об этом выше...
Проблема-то ведь не в том, как победить конкретный файл (она уже решена), а в том, как сделать универсальный lisp-код, который будет корректно обрабатывать эту ситуацию, ежели она встретится в дальнейшем на другом файле. ----- добавлено через ~1 мин. ----- Я специально сейчас тестирую этот участок кода на бережно сохранённой "кривой копии" файла. :-)))
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
ИМХО намного проще при открытии файла выполнять его проверку.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Теоретически да, но не хотелось терять время (секунды, конечно)
на профилактической проверке Аудитом каждого файла. Да и "неспортивно" оно как-то... Но всё оказалось ещё интереснее. После первого же переименования Лайоута файл становился "кривым окончательно", и ему не помогал даже Аудит. Т.е. программа, сама того не ведая и не желая вносила в файл критичные изменения, что плохо от слова "совсем". Пришлось по ходу ставить метку "групповой отмены при аварии" и передавать это дело (т.е. и вывод человеческого сообщения о проблеме пользователю и откат в начальное состояние) на давным-давно переопределённую *error*. Ну, было в ней до этого 150 строчек кода, добавил ещё 20. В общем - поразвлекался малость. :-))) Зато теперь всё работает как надо.
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Скока-скока??? Блин, че-то у тебя не то в *error*, похоже, творится.
P.S. Я вообще не переопределю *error* уже лет 5, наверное. И горя не знаЮ vl-catch-* зачем выдумали, как думаешь?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Она у меня универсальная на три довольно специфических вида деятельности.
В основном идёт восстановление системных переменных, отработка глобальных переменных "в зависимости от", записи логов в файлы и прочая и прочая. Как была написана лет 15 назад - так её и не трогал с тех пор. :-)
__________________
Счастливо, Алексей! |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Копирование, сортировка, переименование листов (layout) | VVA | Готовые программы | 96 | 08.12.2023 14:11 |
Какой нормативный документ действующий по эвакуационным путям и выходам? | kolja | Поиск литературы, чертежей, моделей и прочих материалов | 4 | 13.08.2010 10:19 |
Как применить настройки к Layout (AutoCAD MDT) | DonVik | Программирование | 5 | 06.08.2009 16:50 |
Печать (несколько layout за один раз) | Малюк | AutoCAD | 2 | 25.07.2008 10:38 |
Программно задать размер листа в Layout | Ax3 | Программирование | 6 | 02.03.2008 11:28 |