找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1022|回复: 5

[编程申请]:申请老大门编辑一个简单的计算程序

[复制链接]
发表于 2006-9-11 16:00:51 | 显示全部楼层 |阅读模式

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

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

×
;;;拾取数字求和
(defun c:szh (/ ss n totn adn)
(prompt "\n拾取数字求和: ")
(setq ss (ssget '((0 . "TEXT")))
n 0
)
(setq totn 0.0)
(while (setq en (ssname ss n))
(setq adn (atof (cdr (assoc 1 (entget en)))))
(setq totn (+ totn adn))
(setq n (1+ n))
)
(princ (strcat "\n数字和: "))
(princ totn)
(princ)
)
我的这个LISP程序是比较老的计算数字求和的程序,他有几个不足之处,希望能帮忙解决。
1、他的精确度不够,如果数据在五位数还好,一旦超过五位数,他就会自动四舍五入最后一个小数点的数据,是计算结果不准确,如果是7位数,那连小数点后面的数据全都没有了。最近做的项目比较大,这个程序就没用了,请帮忙把精确度提高到9位(虽然短期不可能用到,但谁知道呢)。
2、他计算出结果后,不能直接表示出来,必须在文本栏里看,然后自己写出来,很不方便,希望能修改一下。
希望修改的步骤是这样的:输入命令-----选择所要相加的数据(只能默认选择数字,其他信息都不能选择)-----在鼠标指定处自动标注出所有数字相加的结果(默认字体大小为2000,字体图层默认为当前图层)。

然后麻烦在编辑一个数字相减的LISP,选择两个数据,默认大减小就可以了。

我知道论坛里面肯定有,但是我找了好久都没有合适的,所以…………呵呵,麻烦高手了。 您轻轻一抬手,我免受十年苦啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-9-12 09:32:50 | 显示全部楼层
;;;****************************************
;;; No.3 数字型文本内容值求和/平均值 函数  
;;;****************************************
(defun C:Sum(/ ss1 n sumAll i TextEntData1 TextEntName1 TextValue1 TextString1)
        (CMDINIT0);保存用户系统变量.
        (setvar "DIMZIN" 8)
        (setq ss1 (ssget '((0 . "TEXT")))) ;Select only "TEXT"
        (TextHighlight ss1 30 "TEXT");高亮度显示选中文本边框.
        (setq sumAll 0.0)
        (if        (null ss1)
                (princ "\n没有TEXT文本类型对象被选择!") ;then
                (progn ;else
                        (setq n (sslength ss1))
                        (if        (not (= nil n)) ;No select objects
                                (progn;then
                                        (setq i 0)
                                        (while (< i n)
                                                (setq TextEntData1 (entget (ssname ss1 i)))
                                                (setq TextEntName1 (cdr (car TextEntData1)))
                                                (setq TextString1 (CDR (ASSOC 1 TextEntData1)))
                                                (setq TextValue1 (atof TextString1))
                                                (setq sumAll (+ sumAll TextValue1))

                                                (setq i (+ i 1))
                                        );end_while
                                        (princ (strcat "\n计数:" (itoa n) "  求和值=" (rtos sumAll 2) "  平均值=" (rtos (/ sumAll n) 2)))                               
                                );end_progn
                                (princ "\n没有TEXT文本类型对象被选择!") ;else
                        );end_if
                );end_progn
        );end_if
        (CMDINIT1);恢复用户系统变量.
);end_defun

;;;*************************************
;;; No.5 数字型文本内容值混合运算 函数  
;;;*************************************
(defun C:xCal(/ ss0 ss1 JSMode oldJSMode sumAll sumSub0 sumSub1)
        (CMDINIT0);保存用户系统变量.
        (setvar "DIMZIN" 8)
       
        (setq JSMode "+")
        (setq sumAll 0.0)
        (setq ss0 (ssget '((0 . "TEXT")))) ;Select only "TEXT"
        (TextHighlight ss0 30 "TEXT");高亮度显示选中文本边框.
        (if        (null ss0)
                (princ "\n没有TEXT文本类型对象被选择!") ;then
                (progn ;else
                        (setq sumSub0 (JiSuan_Add ss0));Added these Data!
                        (setq sumAll sumSub0);Let the result added to value sumAll.
                       
                        (while (/= JSMode "=")
                                (initget "+ - * / =")
                                (setq oldJSMode JSMode)
                                (setq JSMode (getkword (strcat "\n运算规则: 等于(=)/加(+)/减(-)/乘(*)/除(/)<" oldJSMode ">:")))
                                (if (= JSMode nil) (setq JSMode oldJSMode))

                                (if (= JSMode "=")
                                        (princ (strcat "\n计算结果: " (rtos sumAll 2)));then
                                        (progn;else
                                                (setq ss1 nil)
                                                (while (null ss1);Selected the number-data type textset
                                                        (setq ss1 (ssget '((0 . "TEXT")))) ;Select only "TEXT"
                                                        (TextHighlight ss1 30 "TEXT");高亮度显示选中文本边框.
                                                        (if        (null ss1) (princ "\n没有TEXT文本类型对象被选择!"))
                                                );end_while
                                                (setq sumSub1 (JiSuan_Add ss1))
                                                (cond
                                                        ((= JSMode "+") (setq sumAll (+ sumAll sumSub1)))
                                                        ((= JSMode "-") (setq sumAll (- sumAll sumSub1)))
                                                        ((= JSMode "*") (setq sumAll (* sumAll sumSub1)))
                                                        ((= JSMode "/") (setq sumAll (/ sumAll sumSub1)))
                                                );end_cond
                                        );end_progn
                                );end_if
                        );end_while
                       
                );end_progn
        );end_if
        (CMDINIT1);恢复用户系统变量.
);end_defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-18 16:05:14 | 显示全部楼层

楼上的不能用啊

命令: sum
no function definition: CMDINIT0

我使用的版本是CAD2006,软件提示命令不可用。而且,我看了一下你的函数,好象还要多几个选项选什么平均值之类的东西。我希望不要把工具复杂化了,这样不好,到现在为止我工作4年了,基本上没碰到过求平均值的要求出现,所以那个平均值不要也罢。
第二个程序我就没有用了,我希望只要相减的命令就够用了,乘法和除法也是一百年用不到一次的工具,还让他出来浪费时间,启不难受得很。所以麻烦高手帮忙简单的写一个,我想把事情简单点,直接点会更好些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-19 12:33:22 | 显示全部楼层
我只要求和的,可运行不了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-19 18:11:12 | 显示全部楼层
试试签名栏下的“数字运算”程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-20 12:18:20 | 显示全部楼层
使用了,非常不错,但是不知道还能不能改进一下,可以给最后的显示数据加后缀。比如平方米的符号,或者米的符号,这样就完美了。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 04:16 , Processed in 0.208613 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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