(vl-load-com)
;来源
;http://bbs.mjtd.com/forum.php?mod=viewthread&tid=107935&highlight=cal%2B%BC%C6%CB%E3
;计算数学表达式,返回实数
;这个无法在64bit的CAD上使用,为什么?
(defun MyCal (express / STR wscript)
(setq str (strcat "dim ret \n ret=" express))
(setq wscript (vlax-create-object "ScriptControl"))
(vlax-put wscript 'language "vbs")
(vlax-invoke-method wscript 'ExecuteStatement str)
(vlax-invoke-method wscript 'eval "ret")
)
;主要函数,计算表达式,"1+2*3" 返回 "1+2*3=7"
(defun c:ks( / I NEWTXT NUM SS SSDATA TXT )
(setvar "DIMZIN" 0)
(if(setq ss (ssget(list
(cons 0 "*TEXT")
(cons 1 "*#*")
(cons -4 "<NOT")
(cons 1 "*[a-zA-Z=]*");不包含任何字母与等号
(cons -4 "NOT>")
)))
(progn
(setq i -1)
(repeat(sslength ss)
(setq ssdata (entget(ssname ss (setq i (1+ i)))))
(setq txt (cdr(assoc 1 ssdata)))
(if(setq num (MyCal txt))
(progn
(setq newtxt (strcat txt "=" (rtos num 2 3)))
(entmod(subst(cons 1 newtxt)(cons 1 txt)ssdata))
)
)
)
)
)
(princ)(prin1)
)