明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1275|回复: 7

[讨论] 求一个简单的数字求和lisp

[复制链接]
发表于 2018-7-5 14:18:46 | 显示全部楼层 |阅读模式
如题,工作中需要大量统计单行文本的数字求和,希望一个lisp能实现输入命令--框选数字文本--程序求和--选择一个文本--该文本覆盖为求和数据,同时命令行提示求和值。
手上有的求和lisp和插件都是求和后新建个文本,我想直接覆盖某个文本,因为这个文本的位置已经留好了。当然如果lisp最后一步能提示新建或者覆盖文本最好了,非常感谢!
发表于 2018-7-5 14:26:01 | 显示全部楼层
 楼主| 发表于 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)
)

评分

参与人数 1明经币 +1 收起 理由
zhangcan0515 + 1

查看全部评分

发表于 2018-7-5 17:04:06 | 显示全部楼层
论坛上应该很多的吧,这样的文字求和
 楼主| 发表于 2018-7-5 17:19:29 | 显示全部楼层
evayleung 发表于 2018-7-5 17:04
论坛上应该很多的吧,这样的文字求和

我想要最后一步,指定某个文本,替换求和结果,我搜了半天,没搜到。。。
发表于 2018-7-5 19:22:17 | 显示全部楼层
再从论坛上找个文字刷的源码,从里面参考一段就可以的
发表于 2020-9-21 11:49:42 | 显示全部楼层
谢谢楼主发的问题,让我学习到了!!
发表于 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))
          )
  );把这个接上去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 05:20 , Processed in 0.175943 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表