mattCAD 发表于 2022-7-6 06:27:22

水平

我有一个水平(单行和多文本)的图纸,目前设置为本地基准,我需要修改所有的军械基准。为了帮助减少执行此操作所需的时间,我正在寻找lisp例程,该例程可以找到小数点后3位的级别,并向其中添加一个集合数字。(即在图纸上的每一层增加0.57m。
 
提前谢谢你的帮助

Tyke 发表于 2022-7-6 06:42:05

看看李的网站。我很确定他有一个LISP程序,可以做你想做的事。

teknomatika 发表于 2022-7-6 06:52:17

如果我理解你的问题,对于类似的情况,我使用这个例程。作者未知。
 
(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)
)

mattCAD 发表于 2022-7-6 07:06:03

太好了,这正是我想要的,谢谢你的帮助:)

BlackBox 发表于 2022-7-6 07:07:38

 
这稍微简单一些,并且支持“撤消”功能:

(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)
)

teknomatika 发表于 2022-7-6 07:17:54

 
对于文字和多行文字:
 
 
 
(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

BlackBox 发表于 2022-7-6 07:29:42

 
我当然希望用户总是选择一个有效的选择集。。。示例:考虑一个TextString=“领结很酷”。
页: [1]
查看完整版本: 水平