lisp求平均值的问题
小弟刚接触二次开发,想在cad下实现框选一组数据求取平均值,用lisp实现,先谢谢了 杨春平 发表于 2017-8-25 09:44我把无痕的代码复制在txt文件,改为lsp还是不行唉
(defun c:pjz (/ ss lst n) (defun xss2lst (ss / i e lst) (setq i -1) (while (setq e(ssname ss (setq i (1+ i)))) (setq lst (cons e lst)) ) lst ) (if (setq ss (ssget '((0 . "*TEXT")(1 . "#*#")))) (progn (foreach n (xss2lst ss) (if (setq v (distof(cdr(assoc 1(entget n))))) (setq lst(cons v lst))) ) (princ "\n 求和结果=") (princ(/ (apply '+ lst)(length lst))) ) )(princ) ) (princ "\n pjz = 求数字文本平均值.----by 无痕 2006.8")
复制这一段就可以了,再不行就仿照他的自己写,例子都给出来了。 杨春平 发表于 2017-8-24 17:03
大神,我不会二次开发,但是特别想用改该程序,是不是把代码复制到txt中,保存为lsp格式的就可以了?求指教 ...
06年的代码了,,可以复制在txt文件,改为lsp就可以用了。 水吉空 发表于 2017-8-25 11:00
(defun c:pjz (/ ss lst n) (defun xss2lst (ss / i e lst) (setq i -1) (while (setq e(ssname ss...
好的,谢谢 <P>(defun ar-average (lst / n ll i);;求平均数函数<BR>(setq n 0)<BR>(setq ll 0.)<BR>(setq i 0)<BR>(setq n (length lst))<BR>(repeat n<BR>(setq ll (+ ll (abs (nth i lst))))<BR>(setq i (1+ i))<BR>)<BR>(setq aver (/ ll n))<BR>aver<BR>)</P>
<P>EXP:<BR>(setq lst (list 10. 20. 30. 40.))<BR>(setq average (ar-average lst))<BR>_$ 25.0<BR></P>
<P>不知道是这样算的吗</P>
<P> </P>
<P>有错的话请提供一下数学公式吧</P> (defun C:test (/ ss idx lst aver)<BR> (if (setq ss (ssget '((0 . "*TEXT"))))<BR> (progn<BR> (setq idx 0)<BR> (while (<= idx (1- (sslength ss)))<BR> (if (numberp (read (cdr (assoc 1 (entget (ssname ss idx))))))<BR> (setq<BR> lst (cons (read (cdr (assoc 1 (entget (ssname ss idx)))))<BR> lst<BR> )<BR> )<BR> )<BR> (setq idx (1+ idx))<BR> )<BR> (if (> (length lst) 0)<BR> (progn<BR> (setq aver (/ (apply '+ lst) (length lst)))<BR> (alert (strcat (itoa (length lst))<BR> " number(s) selected.\nAverage: "<BR> (rtos aver 2 4)<BR> )<BR> )<BR> )<BR> (alert "No numder selected.")<BR> )<BR> )<BR> (alert "No numder selected.")<BR> )<BR>) ;; pjz = 求数字文本平均值.----by 无痕 2006.8
(defun c:pjz (/ ss lst n)
(defun xss2lst (ss / i e lst)
(setq i -1)
(while (setq e(ssname ss (setq i (1+ i))))
(setq lst (cons e lst))
) lst
)
(if (setq ss (ssget '((0 . "*TEXT")(1 . "#*#"))))
(progn (foreach n (xss2lst ss)
(if (setq v (distof(cdr(assoc 1(entget n))))) (setq lst(cons v lst)))
)
(princ "\n 求和结果=")
(princ(/ (apply '+ lst)(length lst)))
)
)(princ)
)
(princ "\n pjz = 求数字文本平均值.----by 无痕 2006.8")
<P>(defun c:pjz()<BR> (setq xzj (ssget))<BR> (setq sm (sslength xzj))<BR> (setq j 0)<BR> (setq i 0)<BR> (setq c 0)<BR> (repeat sm<BR> (setq ca (cdr(nth 1 (entget(ssname xzj j)))))<BR> (if (or (= ca "MTEXT") (= ca "TEXT"))<BR> (progn<BR> (if (atof(cdr (assoc 1 (entget(ssname xzj j)))))<BR> (progn<BR> (setq i (+ i 1))<BR> (setq sz (atof(cdr (assoc 1 (entget(ssname xzj j))))))<BR> (setq zs (+ sz c))<BR> (setq c zs)<BR> )<BR> )<BR> )<BR> )<BR> (setq j (+ j 1))<BR> )</P>
<P> (setq pjs (/ zs i))<BR> (print "平均数是:" )<BR> pjs<BR> )</P> <P>太感谢楼上的各位了,谢谢!!</P> 经过测试,由无痕兄所写的代码简洁,且能够实现,再次向热心的朋友表示感谢 求大神分享CAD求平均值的程序? 大神,我不会二次开发,但是特别想用改该程序,是不是把代码复制到txt中,保存为lsp格式的就可以了?求指教
页:
[1]
2