wayne_myles 发表于 2015-12-26 13:40:56

求代码 点击一下数字 就变成 此数字加上固定数字的运算结果!

本帖最后由 wayne_myles 于 2015-12-29 15:22 编辑

求助各位大大!!!
点击一下数字 就变成 此数字加上固定数字的运算结果!

表达不好 我就举个例子!
cad中 不同位置 有不同的数字    我想得到 每个数字+78 的结果   

想要的效果是 我先定义+78 然后我单击22就变成80   我单击23就变成101   我单击100就变成178.。。。。。。
假如可以的话+78这个数字可以自定义(比如+!比如+8)   最好改变后的数字变成红色 ---方便区别是否单击过!!

麻烦各位大大了!!!!呵呵先谢谢了

补充 !已解决方案见7# 龙哥代码完美运行   谢谢龙哥了!

wayne_myles 发表于 2015-12-26 13:44:10

本帖最后由 wayne_myles 于 2015-12-26 13:52 编辑

发张美女镇楼!!哈http://bbs.mjtd.com/static/image/common/emp.gif

wzg356 发表于 2015-12-26 13:58:52

(+ (atof(cdr(assoc 1(entget(car(entsel)))))) 78)

wayne_myles 发表于 2015-12-26 14:23:12

本帖最后由 wayne_myles 于 2015-12-26 14:42 编辑

wzg356 发表于 2015-12-26 13:58 static/image/common/back.gif
(+ (atof(cdr(assoc 1(entget(car(entsel)))))) 78)
可行谢谢就是结果显示在命令行之中稍有不便
是否可以把原来的数字变成运算结果?!!!!谢谢大侠

wzg356 发表于 2015-12-26 15:36:56

本帖最后由 wzg356 于 2015-12-26 21:49 编辑

(defun c:adnum ( / ss i val1 val2 ent newstr)
(setvar "dimzin" 1)
(if (setq ss (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))));只选取数字文本
(progn
    (setq i 0 )
    (setq val1 (getreal "\n输入要加的数:"))
    (setq val2 (getint "\n输入保留小数位:"))
    (repeat (sslength ss)
      (setq ent (entget(ssname ss i))
         newstr(rtos (+ (atof(cdr(assoc 1 ent))) val1) 2 val2)
      )
      (entmod (setq ent (subst (cons 1 newstr) (assoc 1 ent) ent)))
      ;(if (assoc 62 ent)
      ;(entmod (subst (cons 62 1) (assoc 62 ent) ent))
      ;(entmod (cons (cons 62 1)ent))      
      ;)
      (setq i (+ 1 i))      
    )
)
(alert "\n没有选中数字!")
)
(princ)
)

wayne_myles 发表于 2015-12-26 17:01:31

wzg356 发表于 2015-12-26 15:36 static/image/common/back.gif


已经运行很好!!!!谢谢
希望您有空的话 帮忙改进下已经改变的数字变成红色 再次谢谢大神!!!

llsheng_73 发表于 2015-12-26 18:40:42

本帖最后由 llsheng_73 于 2015-12-26 19:51 编辑

wayne_myles 发表于 2015-12-26 17:01 http://bbs.mjtd.com/static/image/common/back.gif
已经运行很好!!!!谢谢
希望您有空的话 帮忙改进下已经改变的数字变成红色 再次谢谢大神!!!

(defun c:tt(/ ss e)
(setvar "dimzin" 1)
(setq *a*(if(setq b(getint(strcat"保留小数位["(if *a*(itoa *a*)"0")"]")))b(if *a* *a* 0)))
(if(setq ss (ssget '((1 . "*#*"))))
    (foreach e(mapcar'(lambda(x / e a)(if(and(=(type(setq e(cadr x)))'ename)
          (setq a(distof(cdr(assoc 1(entget e))))))
            (list e a)))(ssnamex ss))
      (if e(entmod(mapcar'cons'(-1 1 62)(list(car e)(rtos(+ 78(last e))2 *a*)1)))))))

ll_j 发表于 2015-12-26 20:35:30

到我的网络U盘中下载一个ce.lsp,通用文本计算。

wzg356 发表于 2015-12-26 21:45:14

llsheng_73 发表于 2015-12-26 18:40 static/image/common/back.gif


谢谢大咖指点
(setq ss (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))));只选取数字文本

llsheng_73 发表于 2015-12-26 22:45:53

本帖最后由 llsheng_73 于 2015-12-26 22:48 编辑

wzg356 发表于 2015-12-26 21:45 http://bbs.mjtd.com/static/image/common/back.gif
谢谢大咖指点
(setq ss (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))));只选取数字文本

"1.2.3"或者"1-2"都会被 (ssget '((0 . "TEXT") (1 . "~*[~`--9]*")))选中,而类似1e-8这种实实在在的数字却被过滤掉了
个人认为,无法直接通过过滤表来选择数字文本。。。只能大致过滤然后对文本进行测试后进行剔除
页: [1] 2
查看完整版本: 求代码 点击一下数字 就变成 此数字加上固定数字的运算结果!