lixwkkk 发表于 2018-7-5 14:18:46

求一个简单的数字求和lisp

如题,工作中需要大量统计单行文本的数字求和,希望一个lisp能实现输入命令--框选数字文本--程序求和--选择一个文本--该文本覆盖为求和数据,同时命令行提示求和值。
手上有的求和lisp和插件都是求和后新建个文本,我想直接覆盖某个文本,因为这个文本的位置已经留好了。当然如果lisp最后一步能提示新建或者覆盖文本最好了,非常感谢!

Andyhon 发表于 2018-7-5 14:26:01

ref:
http://bbs.mjtd.com/thread-14951-2-1.html
http://bbs.mjtd.com/thread-93132-1-1.html
http://bbs.mjtd.com/thread-175849-1-1.html
http://bbs.mjtd.com/thread-23688-2-1.html
http://bbs.mjtd.com/thread-23688-1-1.html
http://bbs.mjtd.com/thread-53387-1-1.html
...

lixwkkk 发表于 2018-7-5 16:07:43

Andyhon 发表于 2018-7-5 14:26
ref:
http://bbs.mjtd.com/thread-14951-2-1.html
http://bbs.mjtd.com/thread-93132-1-1.html


我都看了一遍,没有类似的,只有一个是求和然后新建个文本。。。
(DEFUN C:KK()
(setq jd (getint "input 精度<0>:"))
(if (= jd nil) (setq jd 0))
(princ "\nselect object:")
(setq s (ssget))
(setq n (sslength s))
(setq k 0 )(setq mm 0.0)
(while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq t1 (assoc '0 a))
      (setq t1 (cdr t1))
      (if (= t1 "TEXT") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (setq tx (atof tx))
          (setq mm (+ tx mm))
         ))
      (if (= t1 "DIMENSION") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (if (and (/= tx "")(/= tx "<>"))(setq tx (atof tx)))
          (if (or (= tx "")(= tx "<>"))(progn
            (setq tx (assoc '42 a))
            (setq tx (cdr tx))
            ))
          (if (= k 0) (setq MM TX) (setq mm (+ tx mm)))
         ))
      (setq k (+ k 1))
)
(setq mm (rtos mm 2 jd))
(setq po (getpoint "\n指定计算结果的写入点:"))
(command "text" po """" mm)
)

evayleung 发表于 2018-7-5 17:04:06

论坛上应该很多的吧,这样的文字求和

lixwkkk 发表于 2018-7-5 17:19:29

evayleung 发表于 2018-7-5 17:04
论坛上应该很多的吧,这样的文字求和

我想要最后一步,指定某个文本,替换求和结果,我搜了半天,没搜到。。。

evayleung 发表于 2018-7-5 19:22:17

再从论坛上找个文字刷的源码,从里面参考一段就可以的

zhangcan0515 发表于 2020-9-21 11:49:42

谢谢楼主发的问题,让我学习到了!!

2496653555 发表于 2021-8-15 17:53:12

(initget "1 2")
(setq fs(getkword "\n(1)新建文本 (2)覆盖文本<1>:"));暂停输入
(cond
          ((or(= fs "1")(= fs nil))
   (setq po (getpoint "\n指定计算结果的写入点:"))
               (entmake (list '(0 . "TEXT") (cons 1 mm)(cons 8 "txt")(cons 10 po)(cons 40 h2)(cons 62 7)))
          )
          ((= fs "2")
                  (while(/= (cdr(assoc 0 (setq en (entget(car (entsel "\n请选择要覆盖的文本: ")))))) "TEXT"))
                  (entmod (subst (cons 1 mm) (assoc 1 en) en))
          )
);把这个接上去
页: [1]
查看完整版本: 求一个简单的数字求和lisp