Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
36 replies to this topic

#21 dragontalon0802

dragontalon0802

    biết lệnh erase

  • Members
  • PipPipPip
  • 103 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 02 September 2011 - 04:29 PM

===================================
cảm ơn bạn rât nhiều nhưng cho mình hỏi, mình làm với text font chữ là txt thì đưọc, nhưng với các font chứ khác thì toàn bị lỗi font như : 1~. 1&...
mong bạn giúp đỡ

Đào mộ để các cao thủ giải quyết trường hợp trên. Mình down thử nhiều lisp copy tăng theo thứ tự mà cái nào cũng bị lỗi. Có bro nào giải quyết dùm với. Thanks
  • -1

#22 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 September 2011 - 05:59 PM

Bạn đã down những cái nào và những cái nào lỗi ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#23 quan08

quan08

    biết vẽ pline

  • Members
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 September 2011 - 08:47 AM

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é!

Nhờ các bác sửa lisp này sau khi đánh lệnh mặc định có sẵn tham số f để chọn luôn khỏi phải đánh chữ f sau đó mới nhập số bắt đầu.Chân thành cảm ơn trước.
  • 0

#24 conan_91

conan_91

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 March 2012 - 12:12 AM

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é!

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 !!
  • 0

#25 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 March 2012 - 08:28 AM

Nhập Số Bắt đầu : bạn nhập số nguyên để lisp bắt đầu đánh số
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#26 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 06 March 2012 - 10:30 AM

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"))).
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 06 March 2012 - 11:02 AM

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")))
  • 1

#28 hoanghai0000

hoanghai0000

    biết zoom

  • Members
  • Pip
  • 18 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 September 2012 - 05:44 PM

(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
  • 0

#29 chukhaicdb

chukhaicdb

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 March 2015 - 09:01 AM

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


  • 0

#30 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 March 2015 - 09:32 AM

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. 


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#31 chukhaicdb

chukhaicdb

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 March 2015 - 10:42 AM

 mình ko biết viết lisp nên muốn nhờ mọi ng giúp mình viết lip thay đổi

TN 11/84 tiếp theo TN 12/84 có dc ko


  • 0

#32 anhhongwru

anhhongwru

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 14 July 2015 - 11:36 AM

(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 ạ?


  • -1

#33 phamtronghuy

phamtronghuy

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 September 2015 - 08:25 PM

e thấy líp cua bac nhu lol


  • 0

#34 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 17 September 2015 - 09:06 PM

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! 


  • 0

#35 leetunghoanh

leetunghoanh

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 04 February 2016 - 09:17 AM

bác Nguyen Hoanh ơi lisp CT của bác bị lỗi nếu ta dời gốc tọa độ origin ,sao để khắc phục đuọc lỗi này vây bác, thanks
  • 0

#36 Khonghedongian

Khonghedongian

    biết vẽ circle

  • Members
  • PipPip
  • 34 Bài viết
Điểm đánh giá: -5 (bình thường)

Đã gửi 04 February 2016 - 09:39 AM

mình sưu tầm được 1 lisp đánh stt rất hay của anh em trên diễn đàn chia sẻ. mình đang sử dụng khung tên đóng block attribute. thấy rất thuận tiên.
lệnh sbv nhéhttp://www.cadviet.c...h_stt_nhanh.rar


  • 0

#37 nguyenthuan42

nguyenthuan42

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 04 February 2016 - 11:53 AM

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.


  • -1