Chuyển đến nội dung
Diễn đàn CADViet
nguyen.van.long

Nhờ sữa AUTOLISP

Các bài được khuyến nghị

E có cái lisp đánh số tự động cho Block Att nhưng khi sữ dụng thi nó vẫn đánh số nhưng thứ tự đánh số thị nó bị lộn xộn, bây giờ e muốn sữa lai là đánh số từ trái qua phải

Ví dụ :là “01/21”

Sau khi dùng lisp 

Thì kết quả là “01/21”;“02/21”;“03/21”;“04/21”..........

Mong các pro sữa giúp e được không ak

 

(defun c:stt (/ ans ins lst blkName tagName ent)
  (vl-load-com)
  (while (not (and
        (setq ent (car (nentsel "\n Chon thuoc tinh can danh so: ")))
        (if ent (eq (cdr (assoc 0 (entget ent))) "ATTRIB") ) ) )
    (princ "\n Ban chon nham roi! ")    )
  (setq blkName (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent))))))
    tagName (cdr (assoc 2 (entget ent)))    )

  (initget 1 "Yes No")
  (setq x (getkword "\nBan co muon nhap tong so bv ? (Yes or No) "))
  (if (= x "Yes")
    (progn
      (or Suffix (setq   Suffix "/00"))
      (setq ans (getstring t (strcat "\n Nhap tong so bv <<" Suffix ">> :")))
      (if (/= ans "")(setq Suffix ans)) )
    (setq Suffix ""))

  (or stt (setq stt 1))
  (initget 6)
  (setq ans (getint (strcat "\n Nhap so bat dau <<"(itoa stt) ">> :")))
  (if ans (setq stt ans))
  (if (> stt 9)
    (setq str (strcat (itoa stt) Suffix ))
    (setq str (strcat "0" (itoa stt)   Suffix)) )

  
    
  (princ "\nChon Khung ten can danh so thu tu :")
  (if (ssget(list (cons 0 "INSERT")(cons 66 1)(cons 2 blkName)))
    (progn
      (vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-Acad-Object)))
    (setq ins (vlax-safearray->list (variant-value (vla-get-InsertionPoint e)))
          lst (cons (list e ins)lst))    )
      (setq lst (vl-sort lst '(lambda (x y) (or    (> (cadr (cadr x)) (cadr (cadr y)))
                        (and (< (car (cadr x)) (car (cadr y)))
                             (= (cadr (cadr x)) (cadr (cadr y))) ) ) ) ))
      (foreach e (append (mapcar 'car lst) )
    (foreach Att (vlax-invoke e 'GetAttributes)
      (if (= (vla-get-TagString att) tagName)
        (vla-put-TextString att str) ))
    (setq stt (+ 1 stt))
    (if (> stt 9)
      (setq str (strcat  (itoa stt) Suffix))
      (setq str (strcat  "0" (itoa stt)  Suffix )) ))  ) )
  (princ))
 

 

 

danh-so-thu-tu-stt.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn có thể nghiên cứu thêm hàm vl-sort.

Thông thường mình có tùy chọn sắp xếp hoặc ko sắp xếp bản vẽ. Với th ko sắp xếp bản vẽ thì mình hay sử dụng select object fence (chọn bản vẽ theo đoạn thẳng) bản vẽ nào cắt qua đoạn thẳng đó trước thì đánh trước. Rất nhanh

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×