这个问题不复杂. (defun c:sum() (if (/= sum_flag nil) (initget "Offset Precession") (initget 1 "Offset Precession") ) (setq sum_flag T) (setq mode (getkword "Offset/Precession/<select Object:>")) (cond ((= mode "Offset") (progn (setq x_delt (getreal "\nX offset:")) (setq x_delt (getreal "\nX offset:")) )) ((= mode "Precession") (setq prec (getint "\nPrecession:")) ) (t (cat_sum)) ) ) ;-------------------------------------------------------------- (defun cat_sum() (setq ss (ssget (list (cons -4 "<or") (cons 0 "text") (cons 0 "mtext") (cons -4 "or>") ))) (if (= ss nil) (exit)) (setq len (sslength ss)) (setq i 0) (setq tmp 0) (while (< i 0) (progn (setq ent (ssname i ss)) (setq ent_list (entget ent)) (setq tmp (+ (atof (cdr (assoc 1 ent_list))) tmp)) (setq i (1+ i)) ) ) (setq tmp_str (rtos 2 prec tmp) (princ tmp_str) (setq ss nil) (setq ent (car (entsel "参考字体"))) (setq pt (getpiont "\n插入点:")) (setq ent_list (entget ent)) (setq ent_list (subst (cons 1 tmp_str) (assoc 1 ent_list) ent_list)) (setq ent_list (subst (cons 10 pt) (assoc 10 ent_list) ent_list)) (setq ent_list (subst (cons 71 0) (assoc 70 ent_list) ent_list)) (entmake ent_list) (setq ent_list nil) (princ) ) |