|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Поковыряй с помощью этого
Пособие по расшифровке DXF регионов и солидов И здесь обсуждали http://www.autocad.ru/cgi-bin/f1/board.cgi?t=23596eY |
||||
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
->kpblc
Это не мой случай, поэтому о масштабах думать не надо. Программа об этом думает на предыдущих этапах. Всё верно, но ведь тела - это набор граней, а они вершинами, как и полилинии. (Всё ж только зашифровано, а это очень не удобно!) |
|||
|
||||
Регистрация: 22.06.2005
Rostov-on-Don
Сообщений: 5
|
как контролировать ESC (или любую другую клавишу) во время выполнения LISP программы?
пример: Код:
процедура зачиски меня не интересует, я её напишу, но вот перехват нажатия кнопок (с последующим вызовом определенной процедуры) я нигде не нашел. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
"На все случаи жизни" корректный выход по ESC не получится. При нажатии ESC в работу включается стандартная функция *error*. Обычно ее переопределяют. В общем случае именно здесь должно быть восстановление всех требуемых параметров. И соответствующая структура программы - не делать досрочного выхода через exit и quit в разных местах, а всегда делать единственный штатный выход с завершением всех логически требуемых действий.
В Lisp, в отличие от других систем программирования, функции типа Exit вываливают сразу из программы, а не в структуру более высокого уровня. Самое лучшее - написать "низкоуровневые" функции для любого ввода (то есть момента, когда пользователь реально может прервать программу). А обработчики досрочных прерываний оставить на случаи, когда пользователь прерывает "зависшие" длительные действия. Подробно обо всем этом см. книгу "САПР на базе AutoCAD - как это делается" - здесь цитировать нет времени. Там используется единственная низкоуровневая функция ввода, заменитель всех get*-функций. Позволяет вводить все, что угодно с опциональными значениями по умолчанию, ключевыми словами, базовыми точками и т.д. Нажатие ESC во время ввода блокируется, но всегда имеется возможность штатного выхода по умолчанию или в контекстном меню. Что касается обработки любых клавиш, то это возможно с помощью функции grread. Она позволяет делать экзотичные действия, но в рядовых ситуациях применять ее не стоит. Подобные функции сделаны и для выбора примитивов - чтобы проконтролировать осознанно ли отказался пользователь от указания объекта, или просто промахнулся. В таких случаях можно использовать анализ системной переменной ERRNO. Кроме того, имеется замечательная функция vl-catch-all-error-p (и vl-catch-all-apply), позовляющая отлавливать любые ошибки (вплоть до деления на 0), не разрушая программу. Она же предотвращает неправильные движения "шаловливых ручек". Если заключить vl-catch-all-error-p в свою функцию-обертку, то можно и предотвращать ошибки, и получать о них внятные сообщения, и предусматривать правильный дальнейший ход программы. |
|||
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825
|
Как сделать возможность выбора опций при указке точки (getpoint)\объекта (entsel)? Т.е. например:
(while (setq (getpoint "\nУкажите начальную точку [Delta] <Выход> :")) -- );end while Так вот если не нажал enter и не указал точку, но ввел ключевое слово, например delta, надо будет указать эту delta, после чего вернуться указке точки. Что-то наподобие того о чем говорил ShaggyDoc в 62-м посте: Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Комбинацию (initget) И (getpoint), наверное? Я не уверен, потому как не особо работал с такими задачами...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 22.08.2006
/dev/null
Сообщений: 91
|
to krieger
(while (not flag) (initget "Line Scale" 128) (setq t1 (getpoint "\nНачальная точка или[Line/Scale]: ")) (cond ((eq t1 "Scale") (setq brkscale (getreal "\nМасштаб символа разрыва= ")) (princ (strcat "\nМасштаб= " (rtos brkscale 2 0)))) ((eq t1 "Line") (setq protobreakln (car (entsel)) protobreakln-elist (entget protobreakln) t1 (cdr (assoc 10 protobreakln-elist)) t2 (cdr (assoc 11 protobreakln-elist)) flag t) ) ((eq (type t1) 'list) (setq flag t) (setq t2 (getpoint t1 "\nКонечная точка-> ")))));end while |
|||
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825
|
Еще вопросики:
1. После использования функции (entmod) изменяемый объект пропадает с экрана (но выделяется) и появляется только после регенерации (_regen). Регенерацию после каждого изменения объекта в больших чертежах делать накладно. Можно ли регенерировать отдельный объект? Пробывал функцию redraw - непомогло. 2. Почему не загружается VLX приложение функцией load, если не указать полный путь к файлу (однако путь прописан в путях поддержки)? Может есть какие аналоги - пробежаться по путям доступа и найти мое приложение? 3. Как сравнить два списка? Одинаковые - T, нет - nil. 4. Как определить вес линий назначенный слою. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
1. Попробуй (entupd) либо (vla-update).
2. Может, (findfile)? 3. Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.05.2007
Москва
Сообщений: 1
|
Очень надеюсь на вашу помощь в решении задачи:
С помощью представления cond или case определить функцию, которая возвращает в качестве значения столицу заданного аргумента государств. Реализовать на Lisp300. Заранее благодарен. ----------------------------------------------------------- В Xlisp удалось реализовать таким образом: Код:
Необходимо переделать под Lisp300. |
|||