|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
10.02.2004, 09:42 | #1 | |
!!! Help plz !!! Lisp
Проектирование обустройства нефтяных месторождений
Самара
Регистрация: 28.08.2003
Сообщений: 352
|
||
Просмотров: 6379
|
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
(defun c:abstxt ()
(princ "\nSelect First String Number: ") (setq txt1(entget (car (entsel)))) (setq line1 (cdr (assoc 1 txt1))) (setq num1 (atof line1)) (if (= num1 0.0) (progn (alert "\nSelected string is not a number") (quit) ) ) (princ "\nSelect Second String Number: ") (setq txt2(entget (car (entsel)))) (setq line2 (cdr (assoc 1 txt2))) (setq num2 (atof line2)) (if (= num2 0.0) (progn (alert "\nSelected string is not a number") (quit) ) ) (setq pt (getpoint"\nInsertion point for resulting text: ")) (command "text" pt "" pause (rtos (abs (- num1 num2)) 2 3 )) (princ) ) |
|||
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
Спасибо всем кто откликнулся!
2 Arcady: При запуске программы выскакивает ошибка ;error: too few arguments 2 All: А как модифицировать программу чтобы результат выводился не в новом тексте, а в существующем, и что бы после запятой было только два знака |
|||
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Этот вариант округлит до двух знаков. А со второй частью надо немного повозится, но не сегодня - иду спать, у нас тут поздно а завтра рано (4:30) вставать :shock:
(defun c:abstxt () (princ "\nSelect First String Number: ") (setq txt1(entget (car (entsel)))) (setq line1 (cdr (assoc 1 txt1))) (setq num1 (atof line1)) (if (= num1 0.0) (progn (alert "\nSelected string is not a number") (quit) ) ) (princ "\nSelect Second String Number: ") (setq txt2(entget (car (entsel)))) (setq line2 (cdr (assoc 1 txt2))) (setq num2 (atof line2)) (if (= num2 0.0) (progn (alert "\nSelected string is not a number") (quit) ) ) (setq pt (getpoint"\nInsertion point for resulting text: ")) (command "text" pt "" pause (rtos (abs (- num1 num2)) 2 2 )) (princ) |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Перечитал ветку заново.... Третий текст (новый) можно вернуть, в моем последнем варианте немного изменена строка
Код:
Код:
:?: В первом постинге Цитата:
|
|||
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
2 vk: Активно пользую твою программу, еще раз спасибо. Есть небольшие проблемы: Как заставить прогу выполняться не один раз, а до тех пор пока не надоест ( ). Поставил загрузку на кнопочку - работает, ставлю * перед ^c^c, начинается непрерывный цикл. Я так понимаю надо циклить в самой проге, а где не знаю
На счет фиксированного числа. К результату вычислений мне надо, например, прибавить 0,12 на протяжении всей работы программы. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Ну давай по порядку.
Зациклить конечно можно и в проге, однако рассмотрим два сценария: 1) дополнительный запрос программы на продолжение или прекращение работы. Соответственно на каждом прогоне будет задаваться вопрос, который требует ответа. 2) прекращение программы по "пустому" вводу при указании примитива Второй вариант кажется более предпочтительным. Тогда можно не заморачиваясь, просто заменить if на while в строке Код:
Постоянное число добавить... Если это не вводимое с клавы или выбираемое на экране число, то очень просто - строку (rtos (abs (- дополним до вида (rtos (+ 0.12 (abs (- , естественно не забываем в нужном месте поставить дополнительно закрывающую скобку В противном случае это число придется указывать не третьим, а скорее нулевым, тоесть, до указания первого числа. Соответственно, делать это надо до цикла. Аналогично первому или второму тексту, проверяем его, выцепляем числовое значение и через переменную передаем его в функцию (+ ...) Надеюсь, не сильно намудрил :?: PS: только сейчас заметил, что забыл включить восстановление LUPREC в *error*. Надо добавить строку (setvar "luprec" prec) |
|||
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
Спасибо, все предельно понятно! Работает отлично. Но осталось пару непоняток:
Цитата:
(setvar "luprec" prec) добавть не в (defun *error*..., а в цикл :?: Цитата:
|
|||
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
2 Startrek: Че то не срабатывает програмуля. Во первых, не хватает одной ) в конце (но это лирика 8) ), Самое главное, что вместо результата вставляет \, а сам результат вставляет уже после завершения работы команды text, на что ессесвено Acad пишет:
Код:
|
|||