数字运算
<p>;;;<br/>;;; ------------<br/>;;; * 数字运算 *<br/>;;; ------------<br/>;;; +、-、*、/ 保留原有数字,而且+与*可多选。<br/>;;; +0、-0、*0、/0 改变原有数字<br/>;;; ++、** 将所选文字增加(乘以)相同的量<br/>;;; +- 按给定增量(缺剩值为1)递增。</p><p>;;; 注意:若为MTEXT,需将其打散。<br/>;;; 有效位数取统缺省值,结果字高为第一个所选数字的字高。<br/>;;;</p><p>;;;<br/>;;; ADDITION CALCULATION <br/>;;;<br/>(defun C:+ (/ ns s n i e eb ds i ss pt bool th blio cmdo)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(setq bool "T")<br/>(princ "\nPlease choose numbers:")<br/>(setq ns (ssget))<br/>(if ns<br/>(progn<br/>(setq s 0.0)<br/>(setq i 0)<br/>(setq n (sslength ns))<br/>(while (< i n)<br/>(setq e (ssname ns i))<br/>(setq eb (entget e))<br/>(if (= "TEXT" (cdr (assoc 0 eb)))<br/>(progn<br/>(if bool<br/>(progn<br/>(setq th (cdr (assoc 40 eb)))<br/>(setq bool nil)<br/>)<br/>)<br/>(setq ds (atof (cdr (assoc 1 eb))))<br/>(setq s (+ s ds))<br/>)<br/>)<br/>(setq i (1+ i))<br/>)<br/>(setq ss (rtos s 2 3))<br/>(setq pt (getpoint "\nInsert point of result:"))<br/>(command "text" pt th 0 ss)</p><p>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p><br/>;;;<br/>;;; SUBTRACTION CALCULATION <br/>;;;<br/>(defun C:- (/ ae be a b c ss pt th blio cmdo)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(setq ae (car (entsel "\nPick number from which being subtracted:")))<br/>(setq be (car (entsel "\nPick subtract number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq th (cdr (assoc 40 (entget ae))))<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(setq c (- a b))<br/>(setq ss (rtos c 2 3))<br/>(setq pt (getpoint "\nInsert point of result:"))<br/>(command "text" pt th 0 ss)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p><br/>;;;<br/>;;; MULTIPLICATION CALCULATION <br/>;;;<br/>(defun C:* (/ ns s i n e eb ds i ss pt th bool blio cmdo)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(setq bool "T")<br/>(princ "\nPlease choose numbers:")<br/>(setq ns (ssget))<br/>(if ns<br/>(progn<br/>(setq i 0<br/>s 1.0<br/>) ;s--result,orign value is 1.0<br/>(setq n (sslength ns))<br/>(while (< i n)<br/>(setq e (ssname ns i))<br/>(setq eb (entget e))<br/>(if (= "TEXT" (cdr (assoc 0 eb)))<br/>(progn<br/>(if bool<br/>(progn<br/>(setq th (cdr (assoc 40 eb)))<br/>(setq bool nil)<br/>)<br/>)<br/>(setq ds (atof (cdr (assoc 1 eb))))<br/>(setq s (* s ds))<br/>)<br/>)<br/>(setq i (1+ i))<br/>)<br/>(setq ss (rtos s 2))<br/>(setq pt (getpoint "\nInsert point of result:"))<br/>(command "text" pt th 0 ss)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p><br/>;;;<br/>;;; DIVIDING CALCULATION <br/>;;;</p><p>(defun C:/ (/ ae be a b ss th pt)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(setq ae (car (entsel "\nPick being divided number:")))<br/>(setq be (car (entsel "\nPick divide number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq th (cdr (assoc 40 (entget ae))))<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(if (> (abs b) 0.0000001)<br/>(setq ss (rtos (/ a b) 2))<br/>(setq ss "ERROR")<br/>)<br/>(setq pt (getpoint "\nInsert point of result:"))<br/>(command "text" pt th 0 ss)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p></p><p>;;;<br/>;;; ADDITION CALCULATION (changed)<br/>;;;<br/>(defun C:+0 (/ ae be a b c ss al)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(command "redraw")<br/>(setq ae (car (entsel "\nPick number which being added:")))<br/>(setq be (car (entsel "\nPick adding number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(setq c (+ a b))<br/>(setq ss (rtos c 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ss) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p><br/>;;;<br/>;;; SUBTRACTION CALCULATION (changed)<br/>;;;</p><p>(defun C:-0 (/ ae be a b c ss al)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(command "redraw")<br/>(setq ae (car (entsel "\nPick number from which being subtracted:")))<br/>(setq be (car (entsel "\nPick subtract number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(setq c (- a b))<br/>(setq ss (rtos c 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ss) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p></p><p>;;;<br/>;;; MULTIPLICATION CALCULATION (changed)<br/>;;;</p><p>(defun C:*0 (/ ae be a b c ss al)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(command "redraw")<br/>(setq ae (car (entsel "\nPick being multiplied number:")))<br/>(setq be (car (entsel "\nPick multiply number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(setq c (* a b))<br/>(setq ss (rtos c 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ss) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p><br/>;;;<br/>;;; DIVIDING CALCULATION (changed)<br/>;;;<br/>(defun C:/0 (/ ae bd a b c ss al)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(command "redraw")<br/>(setq ae (car (entsel "\nPick being divided number:")))<br/>(setq be (car (entsel "\nPick divide number:")))<br/>(if (and ae be)<br/>(if (and (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(= "TEXT" (cdr (assoc 0 (entget be))))<br/>)<br/>(progn<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq b (atof (cdr (assoc 1 (entget be)))))<br/>(if (> (abs b) 0.0000001)<br/>(progn<br/>(setq ss (rtos (/ a b) 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ss) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>(alert "ERROR")<br/>)<br/>)<br/>)<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p>;;;------------------------------------------------<br/>;;;<br/>;;; subroutine for ADM and MUM <br/>;;;<br/>(defun MUL_CHANGE (cal / s b1 ns s ss n i ae a b c al blio cmdo)<br/>;;cal is "+" or "*"<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(command "undo" "begin")<br/>(if (= cal "+") <br/>(setq s "Increase" b1 0.0) <br/>(setq s "Multiply" b1 1.0)<br/>)<br/>(princ "\nPlease choose numbers:")<br/>(setq ns (ssget))<br/>(if ns<br/>(progn<br/>(setq b (getreal (strcat "\n" s " valve <" (rtos b1 2 1) ">:")))<br/>(if (/= (type b) 'REAL)<br/>(setq b b1)<br/>)<br/>(setq i 0)<br/>(setq n (sslength ns))<br/>(while (< i n)<br/>(setq ae (ssname ns i))<br/>(if (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(progn<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(if (= cal "+") <br/>(setq c (+ a b))<br/>(setq c (* a b))<br/>)<br/>(setq ss (rtos c 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ss) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>)<br/>(setq i (1+ i))<br/>)<br/>)<br/>)<br/>(command "undo" "end")<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>) ;end defun</p><p>;;;<br/>;;; ADD MULTI-NUMBER and CHANGE THEM<br/>;;;<br/>(defun C:++ ()<br/>(mul_change "+")<br/>(princ)<br/>)</p><p>;;;<br/>;;; MULTIPLY MULTI-NUMBER and CHANGE THEM<br/>;;;<br/>(defun C:** ()<br/>(mul_change "*")<br/>(princ)<br/>)</p><p>;;;------------------------------------------------</p><p>;;;------------------------------------------------<br/>;;;<br/>;;; INCREASE CALCULATION <br/>;;;<br/>(defun C:+- (/ blio cmdo d ae a i ab al)<br/>(setq blio (getvar "blipmode"))<br/>(setq cmdo (getvar "cmdecho"))<br/>(setvar "blipmode" 0)<br/>(setvar "cmdecho" 0)<br/>(setq d (getreal "\nInput increase quantum <1>:"))<br/>(if (/= (type d) 'REAL)<br/>(setq d 1)<br/>)<br/>(setq ae (car (entsel "\nPick number to change:")))<br/>(setq a (atof (cdr (assoc 1 (entget ae)))))<br/>(setq i 1)<br/>(while ae<br/>(if (= "TEXT" (cdr (assoc 0 (entget ae))))<br/>(progn<br/>(if (= i 1)<br/>(setq a (- a d))<br/>)<br/>(setq ab (rtos (setq a (+ a d)) 2))<br/>(setq al (entget ae))<br/>(setq al (subst (cons 1 ab) (assoc 1 al) al))<br/>(entmod al)<br/>)<br/>)<br/>(setq ae (car (entsel "\nPick number to change:")))<br/>(setq i (1+ i))<br/>)<br/>(setvar "blipmode" blio)<br/>(setvar "cmdecho" cmdo)<br/>(princ)<br/>)</p><p>(princ "\n\tc:INC loaded. start command with INC.")<br/>(princ) </p><p>求平均值:<br/>(defun C:-+( / sum n tum x ss2 ssna ss1)<br/>(setq ss1 (ssget '((0 . "text")))) <br/>(setq ssna(sslength ss1)) <br/>(princ (strcat "\n 共选择了" (itoa ssna) "个数据文本。"))<br/>(setq sum 0.0 n 0 tum 0)<br/>(while (< n ssna) <br/>(setq ss2 (assoc 1 (entget (ssname ss1 n)))) <br/>(setq x (atof (cdr ss2))) <br/>(setq tum (+ tum (* x x)))<br/>(setq sum (+ sum x) n (1+ n)) <br/>)</p><p>(setq afcx (sqrt (/ (- tum (* n (/ sum n)(/ sum n))) (- n 1))))</p><p>(princ (strcat "\n 样本数=" (rtos n) " 总和=" (rtos sum 2 4) " 平均值=" (rtos (/ sum ssna) 2 4) ))<br/>(princ (strcat " 平方和=" (rtos tum 2 4) " 标准差('n-1'方法)=" (rtos afcx 2 4) ))<br/>(princ)<br/>) <br/></p> 加载时提示c:INC loaded. start command with INC.; 错误: 输入的列表有缺陷,是不是哪里有问题 有批量求乘,批量求除的命令吗 http://ljttjl.ys168.com 20091020算数表达式文字求值这种对字符串表达式的计算用geomcal.arx里的 cal 函数最好了。 超棒,这个程序,呵呵,收藏了, 计算出来的数据是横着的,
页:
[1]