AutoLisp‎ > ‎Tiện ích‎ > ‎

Copy tăng dần

đăng 07:16, 29 thg 11, 2010 bởi Lisp Việt   [ đã cập nhật 09:28, 10 thg 10, 2011 ]
Lệnh sau đây cho phép bạn copy nhiều text, mỗi text nếu có chứa số ở cuối chuỗi sẽ được tăng lên 1 đơn vị khi copy.
Download file dưới đây và dùng lệnh ap để load lên trước khi sử dụng.
Lệnh: c+
Code:

; copy text +
; www.vietlisp.com
;-------------------------------------------------------------------------------
(defun c:c+ (/ copy+ ss sslst i k p1 p2 )
 
(defun copy+ (ename p1 p2 add / ent i number str)

     (command "copy" ename "" p1 p2)
     (setq ent (entget (entlast)))
     (if (setq str (cdr (assoc 1 ent)))
         (progn
         (setq i 1)
         (while (<= i (strlen str))
         (if (not (wcmatch (substr str i) "*@*"))
              (progn
              (setq number (substr str i))
              (setq i 10000)
              )
              (setq i (1+ i))
              )
         )
 (if number (setq str (strcat (substr str 1 (- (strlen str) (strlen number)))
 (if (vl-string-search " " number) " " "")
 (itoa (+ (atoi number) add)))))

 (setq ent (subst (cons 1 str) (assoc 1 ent) ent))
 (entmod ent)
 )
)
)

(setq ss (ssget))
    (if ss
         (progn
         (setq sslist (append))
         (setq i 0)

         (while (setq ename (ssname ss i))
         (setq sslst (append sslst (list ename)))
         (setq i (1+ i))
         )

        (setq k 1)
(setq p1 (getpoint"\nSpecify base point or [Displacement/mOde] <Displacement>:"))
(while
     (setq p2 (getpoint p1 "\nSpecify second point or <use first point as displacement>:"))
     (mapcar '(lambda (x) (copy+ x p1 p2 k)) sslst)
     (setq k (1+ k))
 )
))
(princ)
)

 
 
Comments