|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Не могу разобраться с *error*
Инженер-строитель
Киров
Регистрация: 15.08.2007
Сообщений: 2,204
|
||
Просмотров: 6913
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Функция *error* срабатывает при генерации ошибки, а не при прерывании выполнения стандартной команды AutoCAD'a.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Так а какая задача полностью? На http://www.arcada.com.ua/forum/viewtopic.php?t=1088 было немного обсуждения по поводу программного завершения команд.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Сформулирую немного иначе (может понятнее будет) - прерывание большинства (если не всех) встроенных команд автокада ESC является штатным и не вызывает ошибки, а прерывание функций автолиспа ESC'ом приводит к прерыванию фвыполнения выражений автолисп, что считается ошибкой.
Например, если прервать такие конструкции - ошибка будет: Код:
Код:
|
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Разобрался. Или думаю, что разобрался...
Просто не было должного понимания работы *error*. У Полещука целая страница про это написана, но сколько не перечитывал - нихрена не понял, а здесь всё разжевали в двух строках. Спасибо всем! Насчет конкретной задачи. Был макрос - поворот с копированием: Код:
С учетом вышеприведенных советов вместо макроса получился уже лисп, в котором все это дело отлавливается: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
"Вредность" не уменьшилась. У тебя набор не обнуляется, а их может быть создано не более 128 штук в течение одной сессии одного файла.
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Цитата:
to kpblc Спасибо за поправки. Про (ssget) я не знал. Кстати, сразу возник вопрос: а что будет, если наборов будет больше 128? Набрал (repeat 129 (ssget)), но чё-то задолбался выделять, думаю, зачем мучаться, если есть знающие люди... |
|||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну можно было добиться аналогичного эффекта, сделав:
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Код:
![]() Лиспик, я-п переделал как-то так: Код:
|
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Здравствуйте!
К сожалению, коротко не выйдет. Поскольку обдумав суть вопроса и внимательно прочитав всю ветку, пришел к выводу, что нужно описывать и условия задачи, которая мотивировала меня напрячься в отношение *error*. Итак, цитирую Полещука: Цитата:
Теперь о самой задаче (в принципе факультативная информация). Есть куча 3d solid-ов. Хочу отсеять все НЕ "Box"-ы: Код:
Цитата:
![]() Спасибо, что дочитали до конца. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Как один из вариантов: http://autolisp.ru/2009/09/13/error-catch/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Огромнейшее спасибо Всем откликнувшимся! С утра попробовал "изменить тактику захвата противника", но пока все в песок!
![]() Лиспер, очень признателен за замечание! Думаю с него вечером и начну. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Увы!Вот что (правильно сказать) не получилось: Код:
Консоль выдает: Цитата:
А теперь все то же самое, только с помощью: Код:
Цитата:
Последний раз редактировалось AMATOP, 03.10.2011 в 22:44. Причина: Пришел вечер |
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Вынужден опять надоедать почтеннейшему обществу.
Все о той же ошибке. Ведь то что ее обработать можно - сомнений нет. Факты: Код:
... ; SolidType (RO) = Ошибка ... Каким образом не происходит остановка выполнения кода?
__________________
Все люди думают по-разному! А тупят одинаково :rolleyes: Последний раз редактировалось AMATOP, 11.11.2011 в 00:26. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Как я понимаю, SolidType "срабатывает" только для фигур, созданных изначально средстваи AutoCAD: box, torus, cylinder etc. После выполнения любой операции над твердым телом это свойство "уничтожается".
А что код не останавливается - ну, значит, так дамп написан... --- Добавлено: Для выполнения задачи "Есть куча 3d solid-ов. Хочу отсеять все НЕ "Box"-ы" я б, наверное, использовал нечто типа: Код:
__________________
(/= RegDate StartReadDate) Последний раз редактировалось Лиспер, 11.11.2011 в 00:29. |
|||
![]() |