明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1858|回复: 11

[提问] 求帮忙改下求和lsp,求和结果覆盖选择的文本

[复制链接]
发表于 2018-7-5 17:01:11 | 显示全部楼层 |阅读模式
这个lsp挺好用,定义精度,求和,写文本到CAD,但是我想要的是最后一步提示选择文本,然后把求和结果覆盖过去,哪位帮忙改下呢。
(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)
)

发表于 2018-7-5 17:33:16 | 显示全部楼层
到我的网络U盘(看签名)去下载一个Ce.lsp,功能比你想要的多。
发表于 2018-7-5 18:27:34 | 显示全部楼层
本帖最后由 尘缘一生 于 2018-7-5 18:30 编辑

【三领外挂】采用的,提供出来

  1. ;;-------求和并写出-----------------------------------------------------------
  2. (defun c:qiuhe(/ e e1 p n l l1 d pt0 pt2 pt3 ang hi)
  3.   (command)
  4.   (SSET)
  5.   (setvar "LUPREC" 2);;;;精度到小数点后2位
  6.   (setq pt0 0)
  7.   (setq e(ssget))
  8.   (setq p (sslength e))
  9.   (setq n 0)
  10.   (setq p (- p 1))
  11.   (while (<= n p)
  12.     (setq e1(entget(ssname e n)))
  13.     (if (="TEXT" (cdr(assoc 0 e1)))
  14.       (progn
  15.         (setq pt2(atof(cdr(assoc 1 e1))))
  16.         (setq pt0(+ pt0 pt2))
  17.       )
  18.     )
  19.     (setq n(+ n 1))
  20.   )  
  21.   (alert(setq pt0 (rtos pt0))) ;;;;;把和数字变为字符串,并显示出来
  22.   (setq l(strlen pt0))      
  23.   (while (="0" (substr pt0 l))
  24.     (setq pt0 (substr pt0 1 (- l 1)))
  25.     (setq l(strlen pt0))
  26.   )
  27.   (if (="." (substr pt0 l))
  28.     (setq pt0 (substr pt0 1 (- l 1)))
  29.     (setq l(strlen pt0))
  30.   )  
  31.   (CHZI)
  32.   (SSET1)
  33. )


  34. ;;----------------------------------------------------------------------------

  35. (defun SSET( )
  36.   (setq oldos (getvar "OSMODE"))
  37.   (setq oldorh (getvar "ORTHOMODE"))
  38.   (setq oldsn (getvar "SNAPMODE"))
  39.   (setq oldlup (getvar "LUPREC"))
  40.   (setvar "OSMODE" 0) ;;;捕捉关闭
  41.   (setvar "ORTHOMODE" 0) ;;;正交关闭
  42.   (setvar "SNAPMODE" 0);;;;实体捕捉关闭
  43.   (setvar "CMDECHO" 0)
  44.   (setvar "TEXTEVAL" 1)
  45. )

  46. ;;---------------------------------------------------------------------------
  47. (defun SSET1( )
  48.   (setvar "ORTHOMODE" oldorh)  ;;;恢复正交
  49.   (setvar "OSMODE" oldos)  ;;;恢复正交
  50.   (setvar "SNAPMODE" oldsn) ;;;;恢复实体捕捉  
  51.   (setvar "LUPREC" oldlup)  ;;;;恢复数值小数位数
  52.   (setvar "CMDECHO" 1)
  53. )

  54. ;;------根据给出的字符串pt0改-写字符----------------------------------------------------
  55. (defun CHZI ( )
  56.   (setq oldlup (getvar "LUPREC"))
  57.   (setvar "LUPREC" 0);;;;精度到各位,以便后续取得标准颜色号
  58.   (princ "\n 选择修改数字,空选(右键)即写出: ")
  59.   (setq e1(ssget))
  60.   (if (/= e1 nil)  
  61.     (progn  
  62.       (setq p (sslength e1))
  63.       (setq n 0)
  64.       (setq p (- p 1))
  65.       (while (<= n p)  
  66.         (setq e(entget(ssname e1 n)))         
  67.         (if (OR (="TEXT" (cdr(assoc 0 e)))(="MTEXT" (cdr(assoc 0 e))))
  68.           (progn
  69.             (setq ang(angtos (cdr(assoc 50 e)) 0 2))
  70.             (setq hi(cdr(assoc 40 e)))
  71.             (setq sty(cdr(assoc 7 e)))        
  72.             (setq pt1(cdr(assoc 10 e)))
  73.             (entdel(ssname e1 n))
  74.             (command "TEXT" "S" sty pt1 hi ang pt0)
  75.             (vl-cmdf "_.JustifyText" (entlast) "" "ML")
  76.             (command "CHANGE" (entlast) "" "P" "C" (rtos (1+ (rem (getvar "CPUTICKS") 8))) "")                  
  77.           );;;;progn
  78.         )  ;;;; end if
  79.         (setq n (+ n 1))
  80.       );;;;while
  81.     );;;progn
  82.   )
  83.   (if (= e1 nil)
  84.     (progn   
  85.       (setq pt3 (nth 1 (grread 5)))  ;取得文字写入点     
  86.       (command "TEXT" pt3 (* (getvar "DIMSCALE") 3.0) 0 pt0)  
  87.       (vl-cmdf "_.JustifyText" (entlast) "" "ML")
  88.       (command "MOVE" (entlast) "" pt3 pause"")
  89.       (command "CHANGE" (entlast) "" "P" "C" (rtos (1+ (rem (getvar "CPUTICKS") 8))) "")
  90.     )                                  ; progn
  91.   )
  92.   (setvar "LUPREC" oldlup)  ;;;;恢复数值小数位数
  93. )

  94. ;;-----------------------------------------------------------------------------------



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-7-5 19:13:03 | 显示全部楼层
ll_j 发表于 2018-7-5 17:33
到我的网络U盘(看签名)去下载一个Ce.lsp,功能比你想要的多。

谢谢前辈,您的lsp里最后一步没有我要的功能,就是计算结果覆盖指定文本,其他的运算,常青藤软件的求和都能实现的。
 楼主| 发表于 2018-7-5 19:18:08 | 显示全部楼层
尘缘一生 发表于 2018-7-5 18:27
【三领外挂】采用的,提供出来

多谢!最后一步有数据覆盖指定文本了,但是能否删除一部分啊,不想要弹窗提示,覆盖的数据会变颜色,这个功能可以去掉吗,然后还缺个精度指定参数。。。。。我只想要个简单的求和加覆盖指定文件

点评

不变颜色,把commang CHANGE 一句去掉即可了。  发表于 2018-7-5 22:46
发表于 2018-7-6 18:08:26 | 显示全部楼层
(DEFUN C:KK()
(setvar "cmdecho" 0)
(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))
(initget "1 2")
(setq fs(getkword "\n(1)新建文本 (2)覆盖文本<1>:"))
(cond
        ((or(= fs "1")(= fs nil))
   (setq po (getpoint "\n指定计算结果的写入点:"))
   (command "text" po ""  "" mm)
        )
        ((= fs "2")
                (while(/= (cdr(assoc 0 (setq en (entget(car (entsel "\n请选择要覆盖的文本: ")))))) "TEXT"))
                (entmod (subst (cons 1 mm) (assoc 1 en) en))
        )
)
(setvar "cmdecho" 1)
)
发表于 2018-7-6 18:12:06 | 显示全部楼层
本帖最后由 lifuq1979 于 2018-7-6 18:26 编辑

希望可以帮到你,最好把(setq s (ssget))改成
(setq s (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))))选取纯数字文本
发表于 2018-7-6 18:19:22 | 显示全部楼层
(DEFUN C:KK()
(setvar "cmdecho" 0)
(setq jd (getint "input 精度<0>:"))
(if (= jd nil) (setq jd 0))
(princ "\nselect object:")
;(setq s (ssget))
(setq s (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))))
(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))
(initget "1 2")
(setq fs(getkword "\n(1)新建文本 (2)覆盖文本<1>:"))
(cond
        ((or(= fs "1")(= fs nil))
   (setq po (getpoint "\n指定计算结果的写入点:"))
   (command "text" po ""  "" mm)
        )
        ((= fs "2")
                (while(/= (cdr(assoc 0 (setq en (entget(car (entsel "\n请选择要覆盖的文本: ")))))) "TEXT"))
                (entmod (subst (cons 1 mm) (assoc 1 en) en))
        )
)
(setvar "cmdecho" 1)
)
发表于 2018-7-6 18:20:46 | 显示全部楼层
希望可以帮到你
发表于 2018-7-6 19:02:07 | 显示全部楼层
简化了一下
(DEFUN C:KK()
  (setvar "cmdecho" 0)
  (setq jd (getint "input 精度<0>:"))
  (if (= jd nil) (setq jd 0))
  (setq s (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))))
  (setq k -1 mm 0.0)
  (repeat (sslength s)
      (setq a (entget (ssname s (setq k(1+ k)))))
      (setq tx (cdr (assoc '1 a)))
      (setq tx (atof tx))
      (setq mm (+ tx mm))
  )
  (setq mm (rtos mm 2 jd))
  (initget "1 2")
  (setq fs(getkword "\n(1)新建文本 (2)覆盖文本<1>:"))
  (cond
          ((or(= fs "1")(= fs nil))
     (setq po (getpoint "\n指定计算结果的写入点:"))
     (command "text" po ""  "" mm)
          )
          ((= fs "2")
                  (while(/= (cdr(assoc 0 (setq en (entget(car (entsel "\n请选择要覆盖的文本: ")))))) "TEXT"))
                  (entmod (subst (cons 1 mm) (assoc 1 en) en))
          )
  )
  (setvar "cmdecho" 1)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 09:38 , Processed in 0.153623 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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