找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 772|回复: 2

[LISP程序]:add框选加法程序

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

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

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

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

使用道具 举报

发表于 2004-9-28 14:05:24 | 显示全部楼层
谢谢楼主提供 程序很是不错

;;;
;;; ------------
;;; * 数字运算 *
;;; ------------
;;; ADD、SUB、MUL、DIV 保留原有数字,而且ADD与MUL可多选。
;;; AD1、SU1、MU1、DI1 改变原有数字
;;; ADM、MUM 将所选文字增加(乘以)相同的量
;;; INC 按给定增量(缺剩值为1)递增。

;;; 注意:若为MTEXT,需将其打散。
;;; 有效位数取统缺省值,结果字高为第一个所选数字的字高。
;;;

;;;
;;; ADDITION CALCULATION
;;;
(defun C:ADD (/ ns s n i e eb ds i ss pt bool th blio cmdo)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq bool "T")
  (princ "\nPlease choose numbers:")
  (setq ns (ssget))
  (if ns
    (progn
      (setq s 0.0)
      (setq i 0)
      (setq n (sslength ns))
      (while (< i n)
        (setq e (ssname ns i))
        (setq eb (entget e))
        (if (= "TEXT" (cdr (assoc 0 eb)))
          (progn
            (if        bool
              (progn
                (setq th (cdr (assoc 40 eb)))
                (setq bool nil)
              )
            )
            (setq ds (atof (cdr (assoc 1 eb))))
            (setq s (+ s ds))
          )
        )
        (setq i (1+ i))
      )
      (setq ss (rtos s 2 3))
      (setq pt (getpoint "\nInsert point of result:"))
      (command "text" pt th 0 ss)
   
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)


;;;
;;; SUBTRACTION CALCULATION
;;;
(defun C:SUB (/ ae be a b c ss pt th blio cmdo)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq ae (car (entsel "\nPick number from which being subtracted:")))
  (setq be (car (entsel "\nPick subtract number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq th (cdr (assoc 40 (entget ae))))
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (setq c (- a b))
        (setq ss (rtos c 2 3))
        (setq pt (getpoint "\nInsert point of result:"))
        (command "text" pt th 0 ss)
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)


;;;
;;; MULTIPLICATION CALCULATION
;;;
(defun C:MUL (/ ns s i n e eb ds i ss pt th bool blio cmdo)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq bool "T")
  (princ "\nPlease choose numbers:")
  (setq ns (ssget))
  (if ns
    (progn
      (setq i 0
            s 1.0
      )                                        ;s--result,orign value is 1.0
      (setq n (sslength ns))
      (while (< i n)
        (setq e (ssname ns i))
        (setq eb (entget e))
        (if (= "TEXT" (cdr (assoc 0 eb)))
          (progn
            (if        bool
              (progn
                (setq th (cdr (assoc 40 eb)))
                (setq bool nil)
              )
            )
            (setq ds (atof (cdr (assoc 1 eb))))
            (setq s (* s ds))
          )
        )
        (setq i (1+ i))
      )
      (setq ss (rtos s 2))
      (setq pt (getpoint "\nInsert point of result:"))
      (command "text" pt th 0 ss)
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)


;;;
;;; DIVIDING CALCULATION
;;;

(defun C:DIV (/ ae be a b ss th pt)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq ae (car (entsel "\nPick being divided number:")))
  (setq be (car (entsel "\nPick divide number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq th (cdr (assoc 40 (entget ae))))
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (if (> (abs b) 0.0000001)
          (setq ss (rtos (/ a b) 2))
          (setq ss "ERROR")
        )
        (setq pt (getpoint "\nInsert point of result:"))
        (command "text" pt th 0 ss)
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)



;;;
;;; ADDITION CALCULATION (changed)
;;;
(defun C:AD1 (/ ae be a b c ss al)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (command "redraw")
  (setq ae (car (entsel "\nPick number which being added:")))
  (setq be (car (entsel "\nPick adding number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (setq c (+ a b))
        (setq ss (rtos c 2))
        (setq al (entget ae))
        (setq al (subst (cons 1 ss) (assoc 1 al) al))
        (entmod al)
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)


;;;
;;; SUBTRACTION CALCULATION (changed)
;;;

(defun C:SU1 (/ ae be a b c ss al)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (command "redraw")
  (setq ae (car (entsel "\nPick number from which being subtracted:")))
  (setq be (car (entsel "\nPick subtract number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (setq c (- a b))
        (setq ss (rtos c 2))
        (setq al (entget ae))
        (setq al (subst (cons 1 ss) (assoc 1 al) al))
        (entmod al)
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)



;;;
;;; MULTIPLICATION CALCULATION (changed)
;;;

(defun C:MU1 (/ ae be a b c ss al)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (command "redraw")
  (setq ae (car (entsel "\nPick being multiplied number:")))
  (setq be (car (entsel "\nPick multiply number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (setq c (* a b))
        (setq ss (rtos c 2))
        (setq al (entget ae))
        (setq al (subst (cons 1 ss) (assoc 1 al) al))
        (entmod al)
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)


;;;
;;; DIVIDING CALCULATION (changed)
;;;
(defun C:DI1 (/ ae bd a b c ss al)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (command "redraw")
  (setq ae (car (entsel "\nPick being divided number:")))
  (setq be (car (entsel "\nPick divide number:")))
  (if (and ae be)
    (if        (and (= "TEXT" (cdr (assoc 0 (entget ae))))
             (= "TEXT" (cdr (assoc 0 (entget be))))
        )
      (progn
        (setq a (atof (cdr (assoc 1 (entget ae)))))
        (setq b (atof (cdr (assoc 1 (entget be)))))
        (if (> (abs b) 0.0000001)
          (progn
            (setq ss (rtos (/ a b) 2))
            (setq al (entget ae))
            (setq al (subst (cons 1 ss) (assoc 1 al) al))
            (entmod al)
          )
          (alert "ERROR")
        )
      )
    )
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)

;;;------------------------------------------------
;;;
;;; subroutine for ADM and MUM
;;;
(defun MUL_CHANGE (cal / s b1 ns s ss n i ae a b c al blio cmdo)
  ;;cal is "+" or "*"
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (command "undo" "begin")
  (if (= cal "+")
    (setq s "Increase" b1 0.0)
    (setq s "Multiply" b1 1.0)
  )
  (princ "\nPlease choose numbers:")
  (setq ns (ssget))
  (if ns
    (progn
      (setq b (getreal (strcat "\n" s " valve <" (rtos b1 2 1) ">:")))
      (if (/= (type b) 'REAL)
        (setq b b1)
      )
      (setq i 0)
      (setq n (sslength ns))
      (while (< i n)
        (setq ae (ssname ns i))
        (if (= "TEXT" (cdr (assoc 0 (entget ae))))
          (progn
            (setq a (atof (cdr (assoc 1 (entget ae)))))
                (if (= cal "+")
              (setq c (+ a b))
              (setq c (* a b))
            )
            (setq ss (rtos c 2))
            (setq al (entget ae))
            (setq al (subst (cons 1 ss) (assoc 1 al) al))
            (entmod al)
          )
        )
        (setq i (1+ i))
      )
    )
  )
  (command "undo" "end")
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
) ;end defun

;;;
;;; ADD MULTI-NUMBER and CHANGE THEM
;;;
(defun C:ADM ()
  (mul_change "+")
  (princ)
)

;;;
;;; MULTIPLY MULTI-NUMBER and CHANGE THEM
;;;
(defun C:MUM ()
  (mul_change "*")
  (princ)
)

;;;------------------------------------------------

;;;------------------------------------------------
;;;
;;; INCREASE CALCULATION
;;;
(defun C:INC (/ blio cmdo d ae a i ab al)
  (setq blio (getvar "blipmode"))
  (setq cmdo (getvar "cmdecho"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq d (getreal "\nInput increase quantum <1>:"))
  (if (/= (type d) 'REAL)
    (setq d 1)
  )
  (setq ae (car (entsel "\nPick number to change:")))
  (setq a (atof (cdr (assoc 1 (entget ae)))))
  (setq i 1)
  (while ae
    (if        (= "TEXT" (cdr (assoc 0 (entget ae))))
      (progn
        (if (= i 1)
          (setq a (- a d))
        )
        (setq ab (rtos (setq a (+ a d)) 2))
        (setq al (entget ae))
        (setq al (subst (cons 1 ab) (assoc 1 al) al))
        (entmod al)
      )
    )
    (setq ae (car (entsel "\nPick number to change:")))
    (setq i (1+ i))
  )
  (setvar "blipmode" blio)
  (setvar "cmdecho" cmdo)
  (princ)
)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 04:22 , Processed in 0.438111 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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