找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1694|回复: 4

[求助] 文本运算求助

[复制链接]
发表于 2014-7-15 17:15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
下面这个程序是选择一个数与另一个数就行运算,存在好多问题,求大神出手完善!另外想请高手帮忙修改成,选择一组数与另一组数运算,结果存为第三组数
关键是想看看ss1中,如何分别取出文本存为lst1
  1. (defun c:tt ( / en1 en2 h lay x1 x2 x3 pt)
  2.   (setq kk (getint "\n选择集运算,请选择运算符[1-加 2-减 3-乘 4-除 5-百分比]:"))
  3.   (setq en1 (entget (car(entsel "\n选择第一个数字")))
  4.         en2 (entget (car(entsel "\n选择第二个数字")))
  5.         h (cdr(assoc 40 en1))
  6.         lay (cdr(assoc 8 en1))
  7.         x1 (atof(cdr(assoc 1 en1)))
  8.         x2 (atof(cdr(assoc 1  en2)))
  9.         )
  10. (cond
  11.    ((= kk 1) (setq x3 (rtos (+ x1 x2) 2 2)))
  12.    ((= kk 2) (setq x3 (rtos (- x1 x2) 2 2)))
  13.    ((= kk 3) (setq x3 (rtos (* x1 x2) 2 2)))
  14.    ((= kk 4) (setq x3 (rtos (/ x1 x2) 2 2)))
  15.    ((= kk 5) (setq x3 (strcat (rtos (* (/ x1 x2) 100) 2 2) "%")))
  16.    (T (progn (princ "\n运算符不正确,系统强制进行加法运算!")(setq x3 (rtos (+ x1 x2) 2 2))))
  17. )
  18. (setq pt (getpoint "\n请选择输出位置:"))
  19. (entmake (list '(0 . "text") (cons 1 x3) (cons 8 lay) (cons 10 pt) (cons 11 pt)(cons 72 1)(cons 73 2) (cons 40 h)))
  20. (princ)
  21. )





论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-15 23:51:14 | 显示全部楼层
这种程序有太多版本了,楼下就有高飞鸟版主写的一个

本来用惯了 XDAPI,现在用的电脑只有 AutoCAD  2015 ,用了一个 ET 函数简单写了一个, 写文字部分自己加上即可
  1. (defun c:tt (/ tf Gettotle1 GetTotle ss key code val)
  2.   (defun GetTotle (ss func)
  3.     (apply func
  4.            (mapcar '(lambda (x)
  5.                       (distof (cdr (assoc 1 (entget x))))
  6.                     )
  7.                    (acet-ss-to-list ss)
  8.            )
  9.     )
  10.   )
  11.   (defun Gettotle1 (str str1 func func1 / e num n)
  12.     (if        (and (progn
  13.                (princ str)
  14.                (setq s1 (ssget ":S" '((0 . "text"))))
  15.              )
  16.              (progn
  17.                (princ str1)
  18.                (setq ss (ssget '((0 . "text"))))
  19.              )
  20.         )
  21.       (progn
  22.         (setq e (ssname s1 0))
  23.         (ssdel e ss)
  24.         (setq num (GetTotle ss func)
  25.               n          (distof (cdr (assoc 1 (entget e))))
  26.         )
  27.         (apply 'func1 (list n num))
  28.       )
  29.     )
  30.   )
  31.   (setq tf t)
  32.   (princ "\n计算方式[+ | - | * | / ]<+>: ")
  33.   (while tf
  34.     (setq key  (grread)
  35.           code (car key)
  36.           val  (cadr key)
  37.     )
  38.     (if        (= code 2)
  39.       (cond
  40.         ((or (= val 43) (= val 13)) ;_ +
  41.          (princ "\n选择相加数 ....")
  42.          (if (setq ss (ssget '((0 . "text"))))
  43.            (princ (GetTotle ss '+))
  44.          )
  45.          (setq tf nil)
  46.         )
  47.         ((= val 42) ;_ *
  48.          (princ "\n选择相乘数....")
  49.          (if (setq ss (ssget '((0 . "text"))))
  50.            (princ (gettotle ss '*))
  51.          )
  52.          (setq tf nil)
  53.         )
  54.         ((= val 95) ;_ /
  55.          (gettotle1 "\n拾取被减数..." "\n选择减数...." '+ '-)
  56.          (setq tf nil)
  57.         )
  58.         ((= val 47) ;_ -
  59.          (gettotle1 "\n拾取被除数..." "\n选择除数...." '* '/)
  60.          (setq tf nil)
  61.         )
  62.         (t
  63.          (princ "\n**Invide Key!")
  64.          (princ "\n计算方式[+ | - | * | / ]<+>: ")
  65.         )
  66.       )
  67.       (setq tf nil)
  68.     )
  69.   )
  70.   (princ)
  71. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10389个

财富等级: 富甲天下

发表于 2014-7-16 07:47:55 | 显示全部楼层
  1. ...
  2. (if (setq ss1 (ssget '((0 . "TEXT"))))
  3. (setq lst1 (mapcar 'cdr (mapcar '(lambda (a) (assoc 1 a)) (mapcar 'cadr (ssnamex ss1)))))
  4. )
  5. ...

点评

不错,要的就是这一句,刚开始我还打算用repeat呢。 三个mapcar~  详情 回复 发表于 2014-7-16 20:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-7-16 08:49:24 | 显示全部楼层
推荐一下我的ce程序,可以在我的网络U盘下载。
一组和另一组进行运算,涉及的方面很多,诸如判别数据数量是否相等,选择集怎样排序,得到的结果按怎样的格式输出,等等等等,不是一两句话能说清的。
ce是早期的程序,有点乱,现在也没精力改了,如果有兴趣,可以也下载ca看看,这个程序近年改过,条理相对清楚,也涉及到一组和另一组运算,不妨看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-16 20:08:50 | 显示全部楼层

不错,要的就是这一句,刚开始我还打算用repeat呢。
三个mapcar~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-12 14:10 , Processed in 0.174953 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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