Нужен маленький лисп - для текста

Страницы: 1
RSS
Нужен маленький лисп - для текста
Нужен маленький лисп - для работы с текстом.
- задачи
1-я - считал разницу между цифрами, и втавлял в указанную точку (но это вроде было) (в принципе отдельный лисп пускай будет чтобы не мудрить)

2-я и самая главная n-количество цифр складывается (т.е. текст указываешь мышкой )
и делится на кол-во указанных ранее цифр(n) и умножается на цифру указанную мышкой = результат на экран в указанноне место.

- все цифры указываются мышкой
- может быть текст или мтекст
- весь текст содержит только цифры.

Заранее спасибо всем кто откликнулся.
Что-то не совсем поняла, что нужно;
изобрази маленький пример, тогда напишу "маленький лисп" .
Вот изобразил, как понял из описания.
После копирования в командную строку или загрузки из файла (предпочтительней) вызывается на исполнение командами: Number1 или Number2
1-й вариант: из первого элемента вычитает второй и просит указать точку на экране для вывода результата.
2-й вариант: после выбора набора элементов, отделяется последний, остальные складываются и сумма делится на их количество, результат умножается на последний элемент, запрашивается точка на экране для вывода результата.
Выбор элементов производится в цикле стандартно: по одному, рамкой или секрамкой (поэтому во 2-м случае рекомендуется последний элемент выбирать отдельно). Во время вставки результата работают динамические пан и зум. Ограничения: при выводе результата не работают привязки, это решаемо, но на простенький лисп уже не тянет.
Жду вопросы...
Цитата
(if (car (atoms-family 1 '("vl-load-com")))(vl-load-com))
(defun number_error (s)(if txt (vla-delete txt))(setq *error* old_error))
(defun mSpace (/ doc mSp)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= 1 (getvar "TILEMODE"))(setq mSp (vla-get-ModelSpace doc))(setq mSp (vla-get-PaperSpace doc))))
(defun addText (nTxt / ht pick lt pt)
(setq ht 3)
(princ "\nУкажите точку вставки")(setq txt (vla-addtext (mSpace) nTxt (vlax-3d-point '(0 0 0)) ht))
(while (/= pick t)(setq pt (cadr (setq lt (grread t))))(if(and pt (listp pt))
(progn (if (= (car lt) 5)(vla-put-insertionPoint txt (vlax-3d-point pt)))
(setq pick (= 3 (car lt))))(progn (vla-delete txt) (setq txt nil)))))
(defun c:number1 (/ ss len sum)
(setq old_error *error* *error* number_error)
(setq ss (ssget '((0 . "TEXT,MTEXT"))) len (sslength ss))
(if (> len 1)(progn (setq sum (- (atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 0))))
(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 1))))))(addText (rtos sum)))
(princ "\nВыбрано меньше 2-х объектов!"))(setq *error* old_error)(princ))
(defun c:number2 (/ ss len sum k)
(setq old_error *error* *error* number_error)
(setq ss  (ssget '((0 . "TEXT,MTEXT"))) len (1- (sslength ss)))
(if (> len 1)(progn (setq k 0 sum 0)
(repeat len (setq sum (+ sum (atof(vla-get-textstring(vlax-ename->vla-object (ssname ss k))))) k (1+ k)))
(addText (rtos (* (/ sum len)(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss k))))))))
(princ "\nВыбрано меньше 3-х объектов!"))(setq *error* old_error)(princ))
PS Если код копируется в командную строку, обязательно нажмите Enter!
Высота текста задается в строке (setq ht 3). Можете Именить 3 на любое число...
Никогда не говори никогда.
:{}
Спасибо что откликнулись.
Лисп попробовал.
- хотелосьбы что бы он брал стиль и положение(угол) текста - который указываешь.
- и вроде number2 не работает)
Но спасибо.
Добрые люди на caduser написали как раз неделю назад такой лисп.
тот что надо.
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=39133cc

- еще раз  :{}  спасибо  Алексей .
Цитата
Макс генплан пишет:
хотелосьбы что бы он брал стиль и положение(угол) текста - который указываешь
Ну, этого не было в задании... 8)
Я тестировал в 2007 и 2008 асадах, вроде все работало...
Никогда не говори никогда.
Цитата
Алексей Романов пишет:

Вот изобразил, как понял из описания.
После копирования в командную строку или загрузки из файла (предпочтительней) вызывается на исполнение командами: Number1 или Number2
1-й вариант: из первого элемента вычитает второй и просит указать точку на экране для вывода результата.
2-й вариант: после выбора набора элементов, отделяется последний, остальные складываются и сумма делится на их количество, результат умножается на последний элемент, запрашивается точка на экране для вывода результата.
Выбор элементов производится в цикле стандартно: по одному, рамкой или секрамкой (поэтому во 2-м случае рекомендуется последний элемент выбирать отдельно). Во время вставки результата работают динамические пан и зум. Ограничения: при выводе результата не работают привязки, это решаемо, но на простенький лисп уже не тянет.
Жду вопросы...
Цитата
(if (car (atoms-family 1 '("vl-load-com")))(vl-load-com))
(defun number_error (s)(if txt (vla-delete txt))(setq *error* old_error))
(defun mSpace (/ doc mSp)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= 1 (getvar "TILEMODE"))(setq mSp (vla-get-ModelSpace doc))(setq mSp (vla-get-PaperSpace doc))))
(defun addText (nTxt / ht pick lt pt)
(setq ht 3)
(princ "\nУкажите точку вставки")(setq txt (vla-addtext (mSpace) nTxt (vlax-3d-point '(0 0 0)) ht))
(while (/= pick t)(setq pt (cadr (setq lt (grread t))))(if(and pt (listp pt))
(progn (if (= (car lt) 5)(vla-put-insertionPoint txt (vlax-3d-point pt)))
(setq pick (= 3 (car lt))))(progn (vla-delete txt) (setq txt nil)))))
(defun c:number1 (/ ss len sum)
(setq old_error *error* *error* number_error)
(setq ss (ssget '((0 . "TEXT,MTEXT"))) len (sslength ss))
(if (> len 1)(progn (setq sum (- (atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 0))))
(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 1))))))(addText (rtos sum)))
(princ "\nВыбрано меньше 2-х объектов!"))(setq *error* old_error)(princ))
(defun c:number2 (/ ss len sum k)
(setq old_error *error* *error* number_error)
(setq ss  (ssget '((0 . "TEXT,MTEXT"))) len (1- (sslength ss)))
(if (> len 1)(progn (setq k 0 sum 0)
(repeat len (setq sum (+ sum (atof(vla-get-textstring(vlax-ename->vla-object (ssname ss k))))) k (1+ k)))
(addText (rtos (* (/ sum len)(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss k))))))))
(princ "\nВыбрано меньше 3-х объектов!"))(setq *error* old_error)(princ))
PS Если код копируется в командную строку, обязательно нажмите Enter!
Высота текста задается в строке (setq ht 3). Можете Именить 3 на любое число...
Изменено: Панарина - 09.09.2020 10:50:45
Цитата
Алексей Романов пишет:

Вот изобразил, как понял из описания.
После копирования в командную строку или загрузки из файла (предпочтительней) вызывается на исполнение командами: Number1 или Number2
1-й вариант: из первого элемента вычитает второй и просит указать точку на экране для вывода результата.
2-й вариант: после выбора набора элементов, отделяется последний, остальные складываются и сумма делится на их количество, результат умножается на последний элемент, запрашивается точка на экране для вывода результата.
Выбор элементов производится в цикле стандартно: по одному, рамкой или секрамкой (поэтому во 2-м случае рекомендуется последний элемент выбирать отдельно). Во время вставки результата работают динамические пан и зум. Ограничения: при выводе результата не работают привязки, это решаемо, но на простенький лисп уже не тянет.
Жду вопросы...
Цитата
(if (car (atoms-family 1 '("vl-load-com")))(vl-load-com))
(defun number_error (s)(if txt (vla-delete txt))(setq *error* old_error))
(defun mSpace (/ doc mSp)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= 1 (getvar "TILEMODE"))(setq mSp (vla-get-ModelSpace doc))(setq mSp (vla-get-PaperSpace doc))))
(defun addText (nTxt / ht pick lt pt)
(setq ht 3)
(princ "\nУкажите точку вставки")(setq txt (vla-addtext (mSpace) nTxt (vlax-3d-point '(0 0 0)) ht))
(while (/= pick t)(setq pt (cadr (setq lt (grread t))))(if(and pt (listp pt))
(progn (if (= (car lt) 5)(vla-put-insertionPoint txt (vlax-3d-point pt)))
(setq pick (= 3 (car lt))))(progn (vla-delete txt) (setq txt nil)))))
(defun c:number1 (/ ss len sum)
(setq old_error *error* *error* number_error)
(setq ss (ssget '((0 . "TEXT,MTEXT"))) len (sslength ss))
(if (> len 1)(progn (setq sum (- (atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 0))))
(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss 1))))))(addText (rtos sum)))
(princ "\nВыбрано меньше 2-х объектов!"))(setq *error* old_error)(princ))
(defun c:number2 (/ ss len sum k)
(setq old_error *error* *error* number_error)
(setq ss  (ssget '((0 . "TEXT,MTEXT"))) len (1- (sslength ss)))
(if (> len 1)(progn (setq k 0 sum 0)
(repeat len (setq sum (+ sum (atof(vla-get-textstring(vlax-ename->vla-object (ssname ss k))))) k (1+ k)))
(addText (rtos (* (/ sum len)(atof (vla-get-textstring(vlax-ename->vla-object (ssname ss k))))))))
(princ "\nВыбрано меньше 3-х объектов!"))(setq *error* old_error)(princ))
PS Если код копируется в командную строку, обязательно нажмите Enter!
Высота текста задается в строке (setq ht 3). Можете Именить 3 на любое число...














где прописать "+" в положительную отметку 0.01
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)