水平
我有一个水平(单行和多文本)的图纸,目前设置为本地基准,我需要修改所有的军械基准。为了帮助减少执行此操作所需的时间,我正在寻找lisp例程,该例程可以找到小数点后3位的级别,并向其中添加一个集合数字。(即在图纸上的每一层增加0.57m。提前谢谢你的帮助 看看李的网站。我很确定他有一个LISP程序,可以做你想做的事。 如果我理解你的问题,对于类似的情况,我使用这个例程。作者未知。
(defun chgterr (s)
(if (/= s "Function cancelled")
(princ (strcat "\nError: " s))
)
(setq p nil)
(setq *error* olderr)
(princ)
)
(defun C:INC (/ p l n e os as ns st s nsl osl sl si chf chm olderr)
(setq olderr*error*
*error* chgterr
chm 0)
(setq p (ssget))
(setq inc (getreal "\nIncrement:"))
(setq l 0 n (sslength p))
(while (< l n)
(if (= "TEXT"
(cdr (assoc 0 (setq e (entget (ssname p l))))))
(progn
(setq s (cdr (setq as (assoc 1 e))))
(setq mn (atof s))
(setq nm (+ mn inc))
(setq s (rtos nm))
(setq e (subst (cons 1 s) as e))
(entmod e)
(setq chm (1+ chm))
)
)
(setq l (1+ l))
)
(princ chm)
(princ " text lines")
(princ " changed.")
(terpri)
(setq *error* olderr)
(princ)
) 太好了,这正是我想要的,谢谢你的帮助:)
这稍微简单一些,并且支持“撤消”功能:
(vl-load-com)
(defun c:FOO (/ *error* ss i acDoc)
(defun *error* (msg)
(if acDoc
(vla-endundomark acDoc)
)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (and (setq ss (ssget '((0 . "MTEXT,TEXT") (1 . "*#.#*"))))
(setq i (getreal "\nEnter increment: "))
)
(progn
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
)
(vlax-for x (vla-get-activeselectionset acDoc)
(vla-put-textstring
x
(rtos (+ i (atof (vla-get-textstring x))) 2 3)
)
)
(prompt (strcat "\n** " (itoa (sslength ss)) " object(s) modified ** ")
)
)
)
(*error* nil)
)
对于文字和多行文字:
(defun chgterr (s)
(if (/= s "Function cancelled")
(princ (strcat "\nError: " s))
)
(setq p nil)
(setq *error* olderr)
(princ)
)
(defun C:INC (/ p l n e os as ns st s nsl osl sl si chf chm olderr)
(setq olderr*error*
*error* chgterr
chm 0)
(setq p (ssget '((0 . "TEXT,MTEXT"))))
(setq inc (getreal "\nIncrement:"))
(setq l 0 n (sslength p))
(while (< l n)
(cdr (assoc 0 (setq e (entget (ssname p l)))))
(progn
(setq s (cdr (setq as (assoc 1 e))))
(setq mn (atof s))
(setq nm (+ mn inc))
(setq s (rtos nm))
(setq e (subst (cons 1 s) as e))
(entmod e)
(setq chm (1+ chm))
);progn
(setq l (1+ l))
); while
(princ chm)
(princ " text lines")
(princ " changed.")
(terpri)
(setq *error* olderr)
(princ)
);defun
我当然希望用户总是选择一个有效的选择集。。。示例:考虑一个TextString=“领结很酷”。
页:
[1]