Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
colonbay

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

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

colonbay    85

Em vẽ thang mà cứ ngồi FIX từng số 1 của text. Ghét. Có ai có lisp kiểu dạng đánh chư theo thứ tự koh? :lol:

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
Jin Yong    334

Em vẽ thang mà cứ ngồi FIX từng số 1 của text. Ghét. Có ai có lisp kiểu dạng đánh chư theo thứ tự koh? :lol:

Việc viết code tự động đánh chữ theo thứ tự là khá đơn giản, nhưng bạn có thể mô tả kỹ hơn yêu cầu không, và có thể ví dụ bằng ảnh minh hoạ nữa

  • 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
Nguyen Hoanh    4.524

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

  • 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
Hieuss    162

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

  • Vote tăng 4

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
hoai46ctt    33

Lisp này rất hay, nhưng cứ pick đến 100 trở đi là bị quay về 1. Mình chuyên về nước đôi khi số thứ tự lại vượt 100. Thế là lại dùng phương pháp thủ công DDEDIT. Mong các Pro xửa hộ mình. MÌnh xin cảm ơn.

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
Nguyen Hoanh    4.524
Lisp này rất hay, nhưng cứ pick đến 100 trở đi là bị quay về 1. Mình chuyên về nước đôi khi số thứ tự lại vượt 100. Thế là lại dùng phương pháp thủ công DDEDIT. Mong các Pro xửa hộ mình. MÌnh xin cảm ơn.

Bạn dùng mã này:

(defun c:ct ( / ss entp gtlast)
 (defun read_text (ent)
   (cdr (assoc 1 (entget ent)))
 )
 (defun write_text (ent gt / tt old new)
   (setq tt  (entget ent)
  old (assoc 1 tt)
  new (cons 1 gt)
  tt  (subst new old tt)
   )
   (entmod tt)
 )
 (defun is_number(s)
   (wcmatch s "0,1,2,3,4,5,6,7,8,9")
 )
 (defun is_char(c )
   (wcmatch c "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,A,B,C,D,E,F,G,H,I,J,K,L,M
,N,O,P,Q,R,S,T,U,V,W,X,Y,")
 )
 (defun next_text (str / i)
   (cond
     ((is_number (substr str (strlen str) 1))
      (progn
 (setq i (strlen str))
 (while (and
	  (> i 1)
	  (is_number (substr str i 1)))
   (setq i (1- i))	
 )
 (strcat (substr str 1 i) (itoa (1+ (atoi (substr str (1+ i))))))
      )
     )
     ((is_char (substr str (strlen str) 1))
      (progn
 (strcat (substr str 1 (1- (strlen str))) (chr (1+ (ascii (substr str (strlen str))))))
      )
     )
     (t str)
   )

 )
 (setq SS (ssget ":S" '((0 . "TEXT"))))
 (if ss
   (progn
     (setq
       entp   (ssname ss 0)
dgoc   (cdr (assoc 10 (entget entp)))
gtlast (read_text entp)
     )
     (while (setq p (getpoint dgoc "\nVao diem: "))
(command ".copy" ss "" dgoc p)
(setq
  entl	 (entlast)
  gtlast (next_text gtlast)
)
(write_text (entlast) gtlast)
     )
   )
 )
 (princ)
)

Tên lệnh và cách thức giống hệt lệnh CT cũ nhưng khắc phục được nhược điểm số 100 và chữ Z.

  • Vote tăng 2

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
vndesperados    253
Bạn dùng mã này:

(defun c:ct ( / ss entp gtlast)
 (defun read_text (ent)
   (cdr (assoc 1 (entget ent)))
 )
 (defun write_text (ent gt / tt old new)
   (setq tt  (entget ent)
  old (assoc 1 tt)
  new (cons 1 gt)
  tt  (subst new old tt)
   )
   (entmod tt)
 )
 (defun is_number(s)
   (wcmatch s "0,1,2,3,4,5,6,7,8,9")
 )
 [b](defun is_char(c )
   (wcmatch c "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,A,B,C,D,E,F,G,H,I,J,K,L,M

,N,O,P,Q,R,S,T,U,V,W,X,Y,")
 )[/b]
 (defun next_text (str / i)
   (cond
     ((is_number (substr str (strlen str) 1))
      (progn
 (setq i (strlen str))
 (while (and
	  (> i 1)
	  (is_number (substr str i 1)))
   (setq i (1- i))	
 )
 (strcat (substr str 1 i) (itoa (1+ (atoi (substr str (1+ i))))))
      )
     )
     ((is_char (substr str (strlen str) 1))
      (progn
 (strcat (substr str 1 (1- (strlen str))) (chr (1+ (ascii (substr str (strlen str))))))
      )
     )
     (t str)
   )

 )
 (setq SS (ssget ":S" '((0 . "TEXT"))))
 (if ss
   (progn
     (setq
       entp   (ssname ss 0)
dgoc   (cdr (assoc 10 (entget entp)))
gtlast (read_text entp)
     )
     (while (setq p (getpoint dgoc "\nVao diem: "))
(command ".copy" ss "" dgoc p)
(setq
  entl	 (entlast)
  gtlast (next_text gtlast)
)
(write_text (entlast) gtlast)
     )
   )
 )
 (princ)
)

Tên lệnh và cách thức giống hệt lệnh CT cũ nhưng khắc phục được nhược điểm số 100 và chữ Z.

 

 

Bác Hòanh đã check cái này chưa vậy? Bác thử với những số như là 26, 36, 16 chưa? Vì nếu lên đến 29 thì sau đó là 210, 211 (theo mình nghĩ nó sẽ là 30 hoặc 31 chứ)hoặc sau 39 sẽ là 310, 311 (40, 41)

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
Nguyen Hoanh    4.524
Bác Hòanh đã check cái này chưa vậy? Bác thử với những số như là 26, 36, 16 chưa? Vì nếu lên đến 29 thì sau đó là 210, 211 (theo mình nghĩ nó sẽ là 30 hoặc 31 chứ)hoặc sau 39 sẽ là 310, 311 (40, 41)

Cảm ơn vndesperados đã check hộ, lúc viết mình ngồi ở máy nhà người bạn, không có ACAD nên không test được.

 

đoạn mã trên nhầm ở dòng lệnh (> i 1)

sửa lại thành (> i 0) là sẽ chạy ngon trong mọi trường hợp.

để nguyên (> i 1) sẽ chạy sai trong trường hợp text toàn là số, còn vẫn đúng trong trường hợp text gồm cả số và chữ (ví dụ text có giá trị 'bac 123').

  • Vote tăng 2

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
sirdo    0
(defun ketthuc ()

...

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 .

 

Cái này hay quá, nhưng mà sao không dùng cho text dạng: Kt-01 -> Kt-02... Vậy?

Tớ muốn đánh số kiểu như: Kt-01 -> kt-02.... tự động thì làm thế nào? 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
tambat    7

Bác Hoanh ơi ! Lisp này rất hay nhưng thường trong ký hiệu của các trục thì chúng ta không thường cho phần chữ hay số đó nằm trong vòng tròn hay một khung nào đó tùy thích, vậy bác có thể chỉnh sửa lại nó làm sao để làm được điều này hay không ?.

ví dụ mình đã có sẵn các vòng tròn định sẵn (tại các vị trí cần đánh số thứ thự) kết quả của lisp đánh số thứ tự đó thì phần chữ nó nằm ngay chính giữa của vòng tròn (hay khung) sẵn có. (đối với vòng tròn, trong quá trình vao diem minh bat điềm bằng "center".

 

Hay bác có thể hoàn thiện luôn tùy chọn khung bao (vòng tròn hay khung nào đó mà thông dụng trong quá trình ghi trục ...) ! Minh ham quá rùi phải không bác, mong bác đùng trách nhé, cũng chỉ vì minh không biết gì cả nên xin hoi bác maaaaaaaaaaaaaà

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
Nguyen Hoanh    4.524
Bác Hoanh ơi ! Lisp này rất hay nhưng thường trong ký hiệu của các trục thì chúng ta không thường cho phần chữ hay số đó nằm trong vòng tròn hay một khung nào đó tùy thích, vậy bác có thể chỉnh sửa lại nó làm sao để làm được điều này hay không ?.

ví dụ mình đã có sẵn các vòng tròn định sẵn (tại các vị trí cần đánh số thứ thự) kết quả của lisp đánh số thứ tự đó thì phần chữ nó nằm ngay chính giữa của vòng tròn (hay khung) sẵn có. (đối với vòng tròn, trong quá trình vao diem minh bat điềm bằng "center".

 

Hay bác có thể hoàn thiện luôn tùy chọn khung bao (vòng tròn hay khung nào đó mà thông dụng trong quá trình ghi trục ...) ! Minh ham quá rùi phải không bác, mong bác đùng trách nhé, cũng chỉ vì minh không biết gì cả nên xin hoi bác maaaaaaaaaaaaaà

Bạn hãy làm ngược lại!

Tức là bạn viết text bằng lệnh trên, xong rồi mới vẽ hình tròn.

Lệnh vẽ hình tròn quanh 1 đối tượng text là TCIRCLE (trong bộ Express của CAD).

Như thế, khi vẽ ở máy nào bạn cũng làm đượ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
vndesperados    253
Cái này hay quá, nhưng mà sao không dùng cho text dạng: Kt-01 -> Kt-02... Vậy?

Tớ muốn đánh số kiểu như: Kt-01 -> kt-02.... tự động thì làm thế nào? Thanks!

 

http://www.cadviet.com/upfiles/SDS.zip

 

Cái này hơi khác với mấy cái trên nhưng mà đúng ý bạn đó

Lưu ý: Trên bản vẽ phải có ít nhất một style có chiều cao chữ > 0

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
tambat    7
Bạn hãy làm ngược lại!

Tức là bạn viết text bằng lệnh trên, xong rồi mới vẽ hình tròn.

Lệnh vẽ hình tròn quanh 1 đối tượng text là TCIRCLE (trong bộ Express của CAD).

Như thế, khi vẽ ở máy nào bạn cũng làm được.

 

làm như thế thì vòng tròn đó không đều nhau vì số thứ tự đánh ra là 1, 2 ..., 10, 10 chứ không phải là 01, 02, ..., 10 ..., chúng ta chỉ có thể offset nó thối. hơn nữa phần đánh số (chữ) theo thư tự này thường dùng vào đánh cho ký hiệu các trục, khi đó nó phải nằm gay chính giữa. bác có thể sữa lại sao cho khi chúng ta vào điểm thì điểm đó sẽ là tâm của text (MC).

 

Biết là lisp này rất bổ ích, giúp rút ngắn thời gian vẽ rất nhiều nếu trong bản vẽ cần phải đánh thứ tự nhiều, song nếu các bác có thể thêm được phần tự vẽ luôn vòng tròn hay ký hiệu trục thông dụng thì tính hiệu dụng của lisp nay sẽ không dừng lại ở mức hiện nay.

 

Chúc các bác sức khỏe dồi dào để trào ra lisp

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
ngagau    0
http://www.cadviet.com/upfiles/SDS.zip

 

Cái này hơi khác với mấy cái trên nhưng mà đúng ý bạn đó

Lưu ý: Trên bản vẽ phải có ít nhất một style có chiều cao chữ > 0

làm theo cách trên là hay vừa chiến text được vừa số được ... chỉ việc pick và pick thế thôi ...

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
Nguyen Hoanh    4.524
làm như thế thì vòng tròn đó không đều nhau vì số thứ tự đánh ra là 1, 2 ..., 10, 10 chứ không phải là 01, 02, ..., 10 ..., chúng ta chỉ có thể offset nó thối. hơn nữa phần đánh số (chữ) theo thư tự này thường dùng vào đánh cho ký hiệu các trục, khi đó nó phải nằm gay chính giữa. bác có thể sữa lại sao cho khi chúng ta vào điểm thì điểm đó sẽ là tâm của text (MC).

Bạn hãy thử dùng lệnh TCOUNT đi đã!

- Lệnh này cho phép các đường tròn có bán kính bằng nhau, không quan trọng chiều dài của chữ.

- Lệnh này sẽ căn tâm hình tròn vào tâm của chữ (không phải điểm chèn). Nên chữ sẽ cân đối trong vòng tròn.

 

Hai mối lo ngại của bạn là ảo đấy!

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
nvc    3
Bạn hãy thử dùng lệnh TCOUNT đi đã!

- Lệnh này cho phép các đường tròn có bán kính bằng nhau, không quan trọng chiều dài của chữ.

- Lệnh này sẽ căn tâm hình tròn vào tâm của chữ (không phải điểm chèn). Nên chữ sẽ cân đối trong vòng tròn.

 

Hai mối lo ngại của bạn là ảo đấy!

 

 

Bạn sang đây xem nhé.

http://www.cadviet.com/forum/index.php?showtopic=7786

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

===================================

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 đỡ

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
gnutirt    0
http://www.cadviet.com/upfiles/SDS.zip

 

Cái này hơi khác với mấy cái trên nhưng mà đúng ý bạn đó

Lưu ý: Trên bản vẽ phải có ít nhất một style có chiều cao chữ > 0

minh test SDS của bác vndesperdos thì thi nhấn 1 điểm bất kỳ để kết thúc chương sau khi thực hiện xong cái thiết lập bị 1 error "Requires numeric distance or second point." hix, ai test thử chỉ giáo mình 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

===================================

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

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

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.

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
conan_91    0

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

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


×