Chuyển đến nội dung
Diễn đàn CADViet

curet

Thành viên
  • Số lượng nội dung

    1
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi curet


  1. Vào lúc 23/5/2014 tại 08:39, phaothancong đã nói:

    Theo mình đây là giải pháp hoàn hảo nhất , copy link của một bác trên diễn đàn thử ok ngay http://www.cadviet.com/forum/topic/83-lisp-danh-chu-theo-thu-tu/

     

    (defun ketthuc ()
    (setvar "cmdecho" luuecho)
    (setq *error* luu
    luu nil
    luuecho nil
    );setq
    (princ "\nThe la het")
    (princ)
    )
    ;*********************************************************************
    (defun modau ()
    (setq luu *error
    luuecho (getvar "cmdecho")
    *error (ketthuc)
    )
    )
    ;*********************************************************************
    (defun xulytext (text / kytu ma sokt luusokt lui )
    (setq kytu (substr text (strlen text))
    ma (ascii kytu)
    sokt (read kytu) 
    lui 1
    )
    (if (numberp sokt)
    (progn
    (setq luusokt (1+ sokt))
    (if (and (numberp sokt) 
    (> (strlen text) 1)
    )
    (progn
    (setq kytu (substr text (1- (strlen text)))
    sokt (read kytu) 
    )
    (if (numberp sokt) 
    (setq luusokt (1+ sokt)
    lui 2

    )
    )
    );progn
    )
    (if (= luusokt 100) (setq luusokt 0))
    (setq kytu (rtos luusokt 2 0)

    text (strcat (substr text 1 (- (strlen text) lui)) kytu)
    )
    );progn
    (if (or (= kytu "z")
    (= kytu "Z")
    )
    (setq text (strcat text "0")
    textxl "0"
    )
    (setq ma (1+ ma)
    text (strcat (substr text 1 (1- (strlen text))) (chr ma))
    )
    );if
    );if
    )
    ;*********************************************************************
    (defun doitext(tendoituong / chuoi doituong thoat tam dsach kieu text vitri10 vitri11 dem canle)
    ;Neu doi tuong la text thi tiep tuc
    (setq doituong (entget tendoituong)
    kieu (cdr (assoc 0 doituong))
    canle (cdr (assoc 72 doituong))
    )
    (if (or (= kieu "TEXT")
    (= kieu "MTEXT")

    (progn
    (setq textxl (xulytext textxl)
    text (cons 1 textxl)
    vitri10 (cdr (assoc 10 doituong))
    vitri10 (list (+ (car vitri10) (car vitrilech)) (+ (nth 1 vitri10) (nth 1 vitrilech)))
    vitri10 (cons 10 vitri10)
    vitri11 (cdr (assoc 11 doituong))
    vitri11 (list (+ (car vitri11) (car vitrilech)) (+ (nth 1 vitri11) (nth 1 vitrilech)))
    vitri11 (cons 11 vitri11)
    dem 0
    dsach nil
    )
    (foreach tam doituong
    (cond
    ((= (car tam) 1) (setq dsach (append dsach (list text))))
    ((= (car tam) 10) (setq dsach (append dsach (list vitri10))))
    ((= (car tam) 11) (setq dsach (append dsach (list vitri11))))
    ((setq dsach (append dsach (list tam))))
    )
    )
    (entmake dsach)
    );progn
    );if
    );
    ;*********************************************************************
    ;sao doi tuong cu sang vi tri moi

    (defun copy_dt (tendoituong )
    (command "copy" tendoituong "" goc toi )
    );defun

    ;*********************************************************************
    (defun c:ct ( / cumdt dodai thoat dem ten doituong textxl dem goc toi)
    ; Khoi dau cua chuong trinh
    (setq luuecho (getvar "cmdecho")
    luu *error*
    *error* ketthuc
    cumdt (ssget)
    dodai (sslength cumdt)
    goc (getpoint "\nSelect base point:")
    thoat nil
    dem 0
    textxl nil
    );
    (setvar "cmdecho" 0)
    ; Loc ra duoc ong text de xu ly
    (while (and (= thoat nil)
    (< dem dodai)
    )
    (setq ten (ssname cumdt dem)
    dem (1+ dem)
    doituong (entget ten)
    kieu (cdr (assoc 0 doituong))
    )

    (if (or (= kieu "TEXT")
    (= kieu "MTEXT")
    )
    (setq thoat T
    textxl (cdr (assoc 1 doituong)) 
    )
    )
    );
    (if (/= textxl nil) 
    (while T 
    (setq toi (getpoint "\nSelect next point: " goc)
    vitrilech (list (- (car toi) (car goc)) (- (nth 1 toi) (nth 1 goc)))
    dem 0
    )
    (while (< dem dodai)
    (setq ten (ssname cumdt dem)
    dem (1+ dem)
    doituong (entget ten)
    kieu (cdr (assoc 0 doituong))
    )

    (if (or (= kieu "TEXT")
    (= kieu "MTEXT")
    )
    (doitext ten)
    (copy_dt ten)

    );if
    )
    );while
    );if
    (ketthuc)
    );defun

    ;Note: bien toan cuc: textxl vitrilech


    Đây cũng là một lisp dùng cho việc đánh số thứ tự bậc thang hoặc trục bao gồm cả số lẫn chữ nhưng dài dòng hơn lisp của Nguyen Hoanh . Tuy nhiên nếu dùng thì lisp này lại thuận tiện hơn ở 2 điểm:
    - thứ nhất: lisp này dùng cho cả A,B,C sử dụng để đánh trục bản vẽ 
    - thứ hai: chỉ cần đánh lệnh CT rồi chọn đối tượng chuyển đến các chỗ mình cần . Chữ hoặc số bất kỳ sẽ tự động nhảy lên . Ví dụ: khi có một số giá trị là 5, gõ CT bắt 5 chuyển đến các vị trí khác, số thứ tự tự động sẽ là 6,7,8,.... tương tự với khi có một chữ là E, gõ CT bắt E chuyển đến các vị trí khác, chữ thứ tự tự động sẽ là F,G,H,..... Dùng thế này mình đỡ tốn được công đoạn pick lại số đã copy, hỏi số bắt đầu mà gói gọn hết lại thành duy nhất một công đoạn copy thôi . Các bạn thử dùng xem sao .

    Bạn cho mình hỏi làm thế nào để đánh số thứ tự giảm dần vậy. Cám ơn bạn nhiều

×