img
Các tiện ích copy nội dung

Copy nội dung TEXT

 
;Copy TEXT, MTEXT, DIMENSION
;www.vietlisp.com
;--------------------------------------------------------------------
(defun c:mat (/ source target itarget str)
(command "undo" "be")
 
(prompt "\nSelect *TEXT, DIMENSION source:")
(setq source (ssget "+.:S:N" '((0 . "*TEXT,DIMENSION"))))
(if (and
      source
      (setq source (ssname source 0))
      (setq str (cdr (assoc 1 (entget source))))     
      (progn (prompt "\nSelect *TEXT, DIMENSION Target:") T)     
      (setq target (ssget '((0 . "*TEXT,DIMENSION"))))
      )
  (progn
    (setq i 0)
    (while (setq itarget (ssname target i))
          (entmod (subst  (cons 1 str) (assoc 1 (entget itarget)) (entget itarget)))
           (setq i (1+ i))      
      )
   
    (command "undo" "be")
    (redraw)
    )))
       

 

Copy tăng dần

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

Ghi nhớ 1 số ?

Đôi khi trong quá trình thao tác bản vẽ, zoom qua zoom lại, tính tính toán toán và bạn cần nhớ 1 con số nào đó đã ghi trên bản vẽ. Số dễ nhớ thì có thể nhẩm và nhớ. Nhưng số dài loằng ngoằng thì chắc là bạn phải ghi ra giấy. Lệnh tự tạo sau đây giúp bạn ghi con số cần nhớ lên thanh status bar của Autocad.
 
(defun c:ltext ()
 (setq entity (entget (car (entsel "\nPick Text to Display: "))))
 (if (= "TEXT" (cdr (assoc 0 entity)))
     (progn
      (setq info (CDR (assoc 1 entity)))
       (grtext -1 info)
 )
  (prompt "\nEntity was not text ")
)
 (princ)
)

Sau khi đánh lệnh ltext bạn chọn text cần ghi nhớ.

 

Purge nhiều bản vẽ

Sau khi hoàn thành đồ án, để lưu trữ hay đóng gói đồ án gửi đi. Công việc cần làm là bạn phải sử dụng lệnh Purge để xóa tất cả các đối tượng thừa không được sử dụng như: Blocks, Dimstyles LAyers, LTypes, MAterials, Plotstyles.v.v... Mẹo sau đây giúp bạn thực hiện công việc này một cách nhanh chóng cho tất cả bản vẽ trên 1 thư mục.
Bước 1: Tạo 1 file autopurge.lsp có nội dung như sau:
(setvar "clayer" "0")
(Repeat 5 (command "purge" "a" "*" "n"))   
(command "SAVE" "")
(command "CLOSE")
Bước 2: Mở autocad, gõ lệnh AP , Bấm chọn nút Contenst, bấm Add, chọn file autopurge.lsp vừa lưu. Xong bấm Close để đóng.
Bước 3: Gọi lệnh open, tới thư mục chứa bản vẽ, chọn hết bản vẽ cần purge và open.
Bước 4: Sau khi cad xử lý xong và tự đóng các bản vẽ. Bạn vào lại bước 2 và remove file auotoparge.lsp. Đóng autocad.
(Bước này không được quên đấy :D)
 
Bạn có thể thêm các lệnh theo ý mình vào trước dòng (command "save").
 
Chúc các bạn thành công!