本帖最后由 springwillow 于 2015-2-7 19:00 编辑
虽然vectra兄的程序也能满足你的要求,但是感觉不够简练,通用性也不是很高。试试我这个吧!其中的xxexp函数可以去一刀屠文的帖子找- (defun c:tt ( / endnum ent firstendnum ss sslen txt txt1)
- (vl-load-com)
- (princ"by springwillow")
- (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
- (setq firstendnum (getvar 'Lastprompt))
- (princ "\n选择文字: ")
- (if (setq ss (ssget ":S" '((0 . "TEXT"))))
- (repeat (setq sslen (sslength ss))
- (setq ent (entget (ssname ss (setq sslen (1- sslen))))
- txt1 (cdr (assoc 1 ent)))
- (while (vl-string-search "\U+03B401" txt1)
- (setq txt1 (vl-string-subst "" "\U+03B401" txt1)))
- (setq txt (vl-string-left-trim "xx=" (vl-string-left-trim " " txt1))
- txt (apply 'strcat (xxexp"[\\d+-/x\\\+]" txt "")))
- (while (vl-string-search "x" txt)
- (setq txt (vl-string-subst "*" "x" txt)))
- (command "cal" txt)
- (setq endnum (getvar 'Lastprompt))
- (if (/= endnum "表达式语法错误")
- (entmod (subst (cons 1 (strcat txt1 "=" endnum)) (assoc 1 ent) ent)))
- (setq firstendnum endnum)
- )
- )
- (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
- (princ)
- )
|