明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2335|回复: 8

[求助]数字加减一个数,支持小数,支持+-号

[复制链接]
发表于 2007-10-3 12:47:00 | 显示全部楼层 |阅读模式

数字加减一个数,支持小数,支持+-号

如+3.25

点选它后,输入+0.25,就更新成+3。50

如-3。25,输入+0.25,就更新成-3。00

如3。25,输入+0.25,就更新成3。50

发表于 2007-10-5 15:41:00 | 显示全部楼层
也支持一下,这是个比较实用的程序
 楼主| 发表于 2007-10-8 09:15:00 | 显示全部楼层

怎么没有一个lsp程序来顶一下呢

发表于 2009-4-28 18:40:00 | 显示全部楼层

程式呢

发表于 2009-4-28 20:03:00 | 显示全部楼层
  1. (defun calculate(/ number1 number2 tmpnum calc_str numtmp1)
  2.   (setq number1 (entsel "\n请选择文字对象:"))
  3.   (setq number1 (entget (car number1)))
  4.   (vl-load-com)
  5.   (if (or (= (cdr(assoc 0 number1)) "MTEXT") (= (cdr (assoc 0 number1)) "TEXT"))
  6.     (progn
  7.     (if (/= (vl-string-search "." (cdr (assoc 1 number1))) nil)
  8.       (setq tmpnum (atof (cdr (assoc 1 number1))))
  9.       (setq tmpnum (atoi (cdr (assoc 1 number1)))))
  10.    
  11.     (if (/= (rtos tmpnum) (cdr (assoc 1 number1)))
  12.         (progn
  13.     (alert "您点选的串中含有非数字字符!")
  14.     (exit))
  15. )
  16.    
  17.     (setq number2 (getstring "\n请输入要加减的数,请带“+/-”号:"))
  18.     (setq calc_str (substr number2 1 1))
  19.     (setq number2 (substr number2 2))
  20.     (setq numtmp1 (atof number2))
  21.     (if (= calc_str "+")
  22.       (setq tmpnum (+ tmpnum numtmp1))
  23.       (setq tmpnum (- tmpnum numtmp1)))
  24.     (setq number2 (rtos tmpnum))
  25.     (setq number1 (subst (cons 1 number2) (assoc 1 number1) number1))
  26.     (entmod number1)
  27.     (entupd (cdr (assoc -1 number1)))
  28.     ))
  29.   )
发表于 2009-4-28 21:52:00 | 显示全部楼层
简化四则运算
http://zml84.blog.sohu.com/93678331.html
  1. (defun SS-TEXT-GETREAL (SS / LST I)    (setq LST '()   I   0    )    (repeat (sslength SS) (setq LST (cons (read (cdr (assoc 1 (entget (ssname SS I))))) LST)) (setq I (1+ I))    )    (reverse LST))
  2. (defun C:++ ()    (if (setq SS (ssget '((0 . "TEXT")))) (princ (eval (cons '+ (SS-TEXT-GETREAL SS))))    )    (princ))(defun C:-- ()    (if (setq SS (ssget '((0 . "TEXT")))) (princ (eval (cons '- (SS-TEXT-GETREAL SS))))    )    (princ))(defun C:** ()    (if (setq SS (ssget '((0 . "TEXT")))) (princ (eval (cons '* (SS-TEXT-GETREAL SS))))    )    (princ))(defun C:// ()    (if (setq SS (ssget '((0 . "TEXT")))) (princ (eval (cons '/ (SS-TEXT-GETREAL SS))))    )    (princ))
发表于 2009-4-28 22:01:00 | 显示全部楼层

看看偶的

(defun c:nN (/ z ln sh)
  (setq osm (getvar "osmode"))
  (setvar "osmode" 32)
  (setvar "ORTHOMODE" 0)
  (setvar "DIMZIN" 8)
    (prompt "\n--->>>自动编号(复制+1)程序")
  (setq a(entsel "\n请选择一个数字:"))
  (setq ad (cdr(assoc 1 (entget(car a)))))
  (setq len (strlen ad) i 1  sh "" sq "")
  (repeat len
    (setq ln (substr ad i 1))
       (if (or (eq ln ".")(eq (type (distof ln 2)) 'REAL))
 (setq sq(strcat sq ln)) 
      (setq sh(strcat sh ln)))
    (setq i(1+ i))
  )
  (setq sq(atof sq ))
  (setq p1(getpoint "\n请选择基点:"))
  (while (setq  p2(getpoint p1 "\n请指定第二点:"))
    (setq sq(1+ sq))
    (vl-cmdf ".copy" a "" ""  p1 p2)
    (setq  p1 p2 adx(entget(entlast)))
    (if (not sh)
      (setq adx (subst (cons 1 (itoa sq))(assoc 1 adx) adx))
      (progn
           (if (= (type (distof (substr ad 1 1) 2)) 'REAL)
           (setq adx(subst (cons 1 (strcat (rtos sq) sh)) (assoc 1 adx) adx))
    (setq adx(subst (cons 1 (strcat sh (rtos sq))) (assoc 1 adx) adx))
    )
      )
    )
    (entmod adx)
   (setq a(entlast))
    )
  (setvar "osmode" 183)
  (setvar "ORTHOMODE" 1)
  (setvar "DIMZIN" 2)
  (princ))

发表于 2009-4-28 22:44:00 | 显示全部楼层

下面的是我做的程序,都是自己用,也没有进行维护

;;;子程序
(defun c:gf()
(setq bc (getint "\n 请输入步长:"))
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;子程序  (中间有横杠,取后面的数字更改)

(defun ddjq()
(setq shuzi (substr wenzi (+ 2 gang)))
(setq shishu (atoi shuzi))   ;把数字改为实数
(setq qianzhui (substr wenzi 1 (+ 1 gang)))
(if (= lll "<")
(progn
(setq b (+ shishu bc nn))                               ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c ">"))                        ;
(setq e (cons 1 d))                                     ;
(setq ddd (subst e wenzizu ddd))                        ;
(entmod ddd)                                            ;
(princ)                                                 ;
)  ;end progn                                           ;
 
(progn
(setq b (+ shishu bc nn))                               ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c))                        ;
(setq e (cons 1 d))                                     ;
(setq ddd (subst e wenzizu ddd))                        ;
(entmod ddd)                                            ;
(princ)                                                 ;
)  ;end progn                                           ;


) ;end if
)  ;end defun

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:gg()
(prompt "\n 设置步长命令为:gf,初始步长为1")
(if (= bc nil)
(setq bc 1)
)
(setq a (ssget))
(setq len (sslength a))   ;取得对象的个数
(setq n 0)
(setq nn 0)
(command "undo" "begin")
(repeat len
(setq ent (ssname a n))    ;取得实体的名称
(setq ddd (entget ent))      ;得到实体的联合列表

(setq djq (cdr (assoc 0 ddd)))

(if (or (= djq "MTEXT") (= djq "TEXT"))

(dkdk)

)        ;end if

(setq n (+ 1 n))

)       ;end repeat

(setq nn (+ nn bc))
(command "undo" "end")
)


;;;子程序

(defun dkdk()
(setq wenzizu (assoc 1 ddd))         ;取出字的内容(群码为1)
(setq wenzi (cdr wenzizu))         ;文字
(setq gang (vl-string-search "-" wenzi))

(setq wenzilen (strlen wenzi))
(setq fanyihou (vl-string-translate "1234567890" "##########" wenzi))  ;翻译字符

(setq weizhi (vl-string-search "#" fanyihou))  ;找出#的位置

(setq qianzhui (substr wenzi 1 weizhi))   ;取出前缀
(setq shuzi (substr wenzi (+ weizhi 1)))   ;取出字符串形式的数字
(setq shishu (atoi shuzi))   ;把数字改为实数
(setq lll (substr wenzi 1 1))  ;判断第一个字符是什么

(if (= gang nil)
(progn


(cond

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
((= lll "<")                                            ;                                 
(progn                                                  ;
(setq b (+ shishu bc nn))                               ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c ">"))                        ;
(setq e (cons 1 d))                                     ;
(setq ddd (subst e wenzizu ddd))                        ;
(entmod ddd)                                            ;
(princ)                                                 ;
)  ;end progn                                           ;
)  ;end first                                           ;
                                                        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


                                                             ;如果要加判断的话,请选择这里

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(t                                                      ;
(progn                                                  ;
(setq b (+ shishu bc nn))                               ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c))                            ;
(setq e (cons 1 d))                                     ;
(setq ddd (subst e wenzizu ddd))                        ;
(entmod ddd)                                            ;
(princ)                                                 ;
)    ;end progn                                         ;
)                                                       ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


)  ;end cond
)   ;end progn
(ddjq)
)   ;end if

)    ;end defun

发表于 2009-4-29 17:29:00 | 显示全部楼层

;;;同变刷,将文本数字或者尺寸数值内容刷成源数值加上或减去同一个数值(缺省输入)
;;;________________________________________________________________
(defun c:tb ( / uu txt3 ent) 
(if (= chanshu001 nil )(setq chanshu001 -500.0  ))
(if (>= chanshu001 0.0 )(setq uu "+") (setq uu "")  )
(setq txt3 (atof (getstring (strcat "\n同变刷:输入变化的值 <" uu (rtos chanshu001) ">:"   ) )))
(cond
((null txt3) (setq chanshu001 chanshu001))
((= txt3 0.0 ) (setq chanshu001 chanshu001))
(t (setq chanshu001 txt3))) 

    (while t

        (setq ent (car (entsel "\n选择目标文字或尺寸:")))
        (setq ent (entget ent))
       (cond
       ((= (cdr (assoc 1 ent)) "<>{}{}")    (setq txt2  (cdr (assoc 42 ent))) )
       ((= (cdr (assoc 1 ent)) "" )    (setq txt2  (cdr (assoc 42 ent)))    )
       (t     (setq txt2  (atof (cdr (assoc 1 ent)))))
       )    

        (if (>= chanshu001 0.0 )
        (setq ent  (subst (cons 1 (rtos  (+ txt2  (abs chanshu001)) 2 1) ) (assoc 1 ent) ent) )
        ) 
        (if (< chanshu001 0.0 )
        (setq ent  (subst (cons 1 (rtos  (- txt2  (abs chanshu001)) 2 1 ) ) (assoc 1 ent) ent) )
        ) 
        (entmod ent)
        )
)

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

本版积分规则

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

GMT+8, 2025-2-25 05:39 , Processed in 0.204607 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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