Тема: LISP. Вычисление суммы чисел (например, в экспликации)
Программа подсчета суммы чисел в чертеже.
Разработона для подсчета площадей помещений,
указанных в экспликации, но может использоваться
в любых случаях.
;*******SUMMA_N.LSP - Сумма числовых значений ********** ; Владимир Громов Январь 2005 г. ; (defun C:SUMMA_N ( / p1 p2 ss1 ssn1 n ss pp pp1 sum ssn e et text summa) (setvar "cmdecho" 0) (setq sum nil) (princ "\n Выбор объектов.") (setq p1 (getpoint " Первый угол рамки: ")) (setq p2 (getcorner p2 "\n Второй угол рамки: ")) (setq ss1 (ssget "_W" p1 p2)) (if ss1 (progn (setq ssn1 (sslength ss1) n 0) ;Количество примитивов (setq ss (ssadd)) ;Набор СОЗДАН (пустой пока) (repeat ssn1 (setq pp (ssname ss1 n)) ;Имена примитивов (setq pp1 (entget pp)) ;Данные примитива с именем pp (cond ((= (cdr (assoc '0 pp1)) "TEXT") (ssadd pp ss) ;Набор ТЕКСТОВ )) (setq n (+ n 1)) ) (setq ssn (sslength ss) n 0) (repeat ssn (setq e (ssname ss n)) (setq et (entget e)) (setq text (cdr (assoc '1 et))) (setq text (vl-string-trim "%U" text)) (princ "\n Число ")(princ n)(princ ": ")(princ text) (setq sum (cons (atof text) sum)) (setq n (+ n 1)) ); repeat (princ "\n Количество объектов: ") (princ ssn) (setq summa (apply '+ sum)) (setq summa (strcat " Сумма чисел = " (rtos summa))) (princ summa) (alert summa) ); progn (progn (princ "\n Ничего не выбрано! ") (alert "\n Ничего не выбрано! ") ); progn ); if (princ) )