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

Lisp đánh chữ theo thứ tự???

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

bác hướng dẫn kĩ hơn khi dùng lips này được ko ?? sau khi tích vào text nó yêu cầu nhập số bắt đầu e ko biết nhập gì vào !!

Hề hề hề,

Lisp yêu cầu bạn nhập số bắt đầu thì bạn cứ số mà nhập, chớ nhập chữ là Ok. Tỷ như nhập 1, 10, 100, 1000 .... cứ thoải cái mái mà nhập.

@ quan08:

Thay (ssget '((0."TEXT"))) bằng (ssget "f" '((0."TEXT"))).

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

Hề hề hề,

Lisp yêu cầu bạn nhập số bắt đầu thì bạn cứ số mà nhập, chớ nhập chữ là Ok. Tỷ như nhập 1, 10, 100, 1000 .... cứ thoải cái mái mà nhập.

@ quan08:

Thay (ssget '((0."TEXT"))) bằng (ssget "f" '((0."TEXT"))).

Sau "f" là 1 List các tọa độ điểm bác Bình ạ!

(ssget "f" lstpoint '((0 . "TEXT")))

Với lstpoint là List các tọa độ điểm.

Có thể dùng ACET

(ssget "f" (ACET-UI-FENCE-SELECT) '((0 . "TEXT")))

  • Vote tăng 1

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

(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ác ơi xem có vẫn đề gì không em dùng nó hay bị treo cad lắm .....thank

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

mình thấy cac lip bạn cho rất hay. nhưng cho mình góp ý nếu. khi gõ lệnh chỉ chọn đối tượng chứ ko thay đổi dc thông số .

Và các bạn có thể giúp mình thay đổi

TN77/84 tiếp theo TN78/84 thì làm sao

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

mình thấy cac lip bạn cho rất hay. nhưng cho mình góp ý nếu. khi gõ lệnh chỉ chọn đối tượng chứ ko thay đổi dc thông số .

Và các bạn có thể giúp mình thay đổi

TN77/84 tiếp theo TN78/84 thì làm sao

Hề hề hề,

Lisp chỉ đáp ứng cho từng cấu trúc text cụ thể chứ không thể cho mọi cấu trúc mong muốn. Bởi vậy nếu cấu trúc text của bạn khác với cấu trúc của text mẫu thì bạn cần sửa lại lisp. Điều này tuy không khó nhưng nó yêu cầu bạn phải cung cấp mẫu text đúng và ổn định về cấu trúc. Ví dụ : TN77/84 thì chỉ có hai chữ số dùng để đánh thứ tự. Như vậy nếu bạn nhập TN1/84 hay TN125/84 thì lisp sẽ có vấn đề.

Vậy nên bạn cần thống nhất mẫu text thì người giúp bạn mới có thể tìm ra phương cách giải quyết được. 

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

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

Cho e đào lại nó lên với

E muốn đánh số thứ tự bắt từ kí tự bên trong, chứ không phải kí tự cuối cùng: ( VD: RL42-D80 lên đến RL43-D80 ) thì phải làm sao ạ? viết dùm e với ạ?

  • Vote giảm 1

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

code Autolisp:

 

 

(defun c:dchu (/ tdt csht sdt index tt entdt)

(defun thay (tt key moi / cu)

(setq cu (assoc key tt))

(subst (cons key moi) cu tt)

)

(setq tdt (ssget '((0 . "TEXT")))

csht (getint "\nSo bat dau: ")

sdt (sslength tdt)

index 0

)

(repeat sdt

(setq entdt (ssname tdt index)

index (1+ index)

tt (entget entdt)

tt (thay tt 1 (itoa csht))

csht (1+ csht)

)

(entmod tt)

(entupd entdt)

)

(princ)

)

 

Khi dùng lệnh, chỉ cần pick các text theo đúng thứ tự, là ok. Có thể dùng tham số f(ence) để chọn cho nhanh theo thứ tự.

Conlonbay dùng thử, có gì thì hồi âm nhé!

Lsp này hay nhưng nó không có số 0 ở đầu. vd: khi gõ lệnh và nhập số bắt đầu là 08200 nhưng nó chỉ cho ra là 8200(thiếu số 0 ở đầu) và nếu tích hợp luôn được số và chữ thì hay lắm. vd: tăng dần E08200, E8201, ...

Mong bác Nguyen Hoanh sửa giúp. Thanks! 

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

CHo mình nhờ tí nhé.

Mình có bản vẽ khi đặt lệnh in xong hết , nhưng khi preview thì lại không thấy bản vẽ hiện lên. Rất mong các bác chỉ giáo giúp em> Thanks! Tất nhiên mình chỉ muốn soi bản vẽ để chuyển qua PDF.

  • Vote giảm 1

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


×