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.
Nguyen Hoanh

Đánh số thứ tự bằng lệnh Tcount

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

MoYeu    0
Bác nào cho em hỏi tý, cái Lisp này mà muốn:

Giá trị đuợc chọn <12 thì thêm là "abc" ở đầu

Còn Nếu giá trị đuợc chọn mà >12 thì thêm xyz ở đầu

Có cao thủ nào giúp em với!

 

Không bác nào ra tay cứu giúp thảo muội tý à

Cũng không có ai nói j....huhuu.... :cheers:

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
ssg    1.088
Không bác nào ra tay cứu giúp thảo muội tý à

Cũng không có ai nói j....huhuu.... :cheers:

1. Vì yêu cầu của bạn hơi... kỳ cục! Bạn có thể nói rõ, bạn cần cái lisp kiểu như vậy để làm gì không? Người lập trình chỉ có hứng thú khi biết rằng, lisp họ viết ra có thể giúp ích được cho nhiều người chứ không chỉ đáp ứng một yêu cầu đặc biệt của một người nào đó.

2. Nếu giá trị = 12 thì sao?

3. Dù sao thì yêu cầu của bạn cũng thuộc dạng đơn giản, bạn thử lisp này xem. Giá trị = 12 cũng thêm xyz luôn. Tên lệnh ABC:

 

(defun C:ABC( / ss e d txt )
(setq ss (ssget '((0 . "TEXT"))))
(while (setq e (ssname ss 0))
   (setq
       d (entget e)
       txt (cdr (assoc 1 d))
   )
   (if (< (atof txt) 12) (setq txt (strcat "abc" txt)) (setq txt (strcat "xyz" txt)))
   (setq d (subst (cons 1 txt) (assoc 1 d) d))
   (entmod d)
   (ssdel e ss)
)
(princ)
)

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
MANHHUNGXDA    458
1. Vì yêu cầu của bạn hơi... kỳ cục! Bạn có thể nói rõ, bạn cần cái lisp kiểu như vậy để làm gì không? Người lập trình chỉ có hứng thú khi biết rằng, lisp họ viết ra có thể giúp ích được cho nhiều người chứ không chỉ đáp ứng một yêu cầu đặc biệt của một người nào đó.

2. Nếu giá trị = 12 thì sao?

3. Dù sao thì yêu cầu của bạn cũng thuộc dạng đơn giản, bạn thử lisp này xem. Giá trị = 12 cũng thêm xyz luôn. Tên lệnh ABC:

 

(defun C:ABC( / ss e d txt )
(setq ss (ssget '((0 . "TEXT")))))

 

Viết lisp theo "phong cách SSG!"

Thật đơn giản!

  • 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
pccc    253
Viết lisp theo "phong cách SSG!"

Thật đơn giản!

 

đúng là thật đơn giản

nhưng với iem thấy khó lắm bác HÙNG ạ

 

theo em

các bác trên diễn đàn mở lớp học viết lips

từ ABC... em xin tình nguyện làm chân trực nhật lớ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
The-moon    36

Bạn thử dùng Lisp này đi: Lệnh tắt là CCC, Chúc thành công...

 

;;;Viet boi Nguyen Van Quy

;*********************************************************************

(defun ketthuc ()

(setvar "cmdecho" luuecho)

(setq *error* luu

luu nil

luuecho nil

);setq

(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 200) (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:CCC ( / cumdt dodai thoat dem ten doituong textxl dem goc toi)

; Khoi dau cua chuong trinh

(princ "\nCopy Inteligent...\n")

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

)

)

);

(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

(ketthuc)

);defun

(princ "Type \"XXX\" to start")

;Note: bien toan cuc: textxl vitrilech

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
thanghaita    1
Nhiều khi chúng ta cần phải sửa từng text một để điền các số theo thứ tự tăng dần. Chẳng hạn phải điền chuỗi D1, D2, D3, D4,...D1000 theo thứ tự tăng dần của trục Y. nếu sửa bằng tay thì rất lâu. Lệnh Tcount của Express Tool cho phép chúng ta làm điều này.

 

Command: tcount

Chương trình sẽ cho bạn chọn đối tượng

Select objects: Specify opposite corner: 5 found

Select objects:

Chương trình hỏi bạn sắp xếp các đối tượng theo chiều tăng trục x, trục y hay theo thứ tự lúc bạn chọn các đối tượng

Sort selected objects by [X/Y/Select-order] <Y>:

Chương trình hỏi bạn số đầu tiên mà bạn đánh, số gia mà bạn cho vào. Ví dụ 2,-1 sẽ đánh các số: 2, 1, 0, -1, -2, ...

Specify starting number and increment (Start,increment) <2,-1>:

 

Chương trình hỏi bạn cách đánh số vào text: Overwrite - ghi đè luôn vào text, Prefix - viết thêm vào phía trước, Suffix - viết thêm vào phía sau, Find&replace - Thay những cụm từ được chỉ định bằng các text số này.

Placement of numbers in text [Overwrite/Prefix/Suffix/Find&replace..] <

Find&replace>:

Nếu bạn chọn Find&replace, máy hỏi thêm cụ từ mà bạn muốn chỉ định.

Enter search string <kts>:

Và cuối cùng chương trình thông báo có bao nhiêu đối tượng text đã được sửa

5 objects modified.

Em thực hiện nhưnng ko được nó vẫn bị cách, nhờ bác chỉ rõ thêm cho em. Muốn đánh theo thứ tự a,b,c... thì làm thế nà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
hoacotu    18
Có mẹo này bạn có thể làm được:

 

- Đầu tiên, bạn tạo 1 text có nội dung là cadviet.

 

- Bạn copy đối tượng này thành nhiều (bạn muốn bao nhiêu chữ thì copy bấy nhiêu đối tượng).

 

- Bạn dùng lệnh TCount và chọn các đối tượng này:

Command: TCOUNT

Select objects: Specify opposite corner: 5 found

Select objects:

Sort selected objects by [X/Y/Select-order] <Select-order>:

Specify starting number and increment (Start,increment) <48,1>: 65,1

Placement of numbers in text [Overwrite/Prefix/Suffix/Find&replace..] <

Suffix>: S

5 objects modified.

 

Bây giờ trên màn hình sẽ là các chuỗi 'cadviet 65', 'cadviet 66', 'cadviet 67',...

 

- Bạn dùng lệnh FIND rồi thay toàn bộ các chuỗi 'cadviet ' (nhớ là có dấu cách ở cuối cùng) thành '%%'.

 

Trên màn hình bây giờ là thứ bạn cần.

 

 

Mình cảm ơn bạn nhiều!

Mình thấy nhiều bạn đã không làm được khi đến chỗ dùng lệnh Find để thay thế Text.

Mình cũng nằm trong số đó. Bạn đừng bực mình nhé!

Mình đã đọc kỹ, đã làm nhiều lần nhưng vẫn không có cách nào để đánh A, B, C, ....bằng cách dùng lệnh Tcount.

Vậy mình thay mặt các bạn vẫn chưa làm được lệnh này mong muốn bạn có thể hướng dẫn lại đoạn thay Text được không???

Mình và các bạn mong chờ sự giúp đỡ và lòng rộng lượng của bạn!

 

-Hoa cô tử -

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
thu.nivl    1
Mình cảm ơn bạn nhiều!

Mình thấy nhiều bạn đã không làm được khi đến chỗ dùng lệnh Find để thay thế Text.

Mình cũng nằm trong số đó. Bạn đừng bực mình nhé!

Mình đã đọc kỹ, đã làm nhiều lần nhưng vẫn không có cách nào để đánh A, B, C, ....bằng cách dùng lệnh Tcount.

Vậy mình thay mặt các bạn vẫn chưa làm được lệnh này mong muốn bạn có thể hướng dẫn lại đoạn thay Text được không???

Mình và các bạn mong chờ sự giúp đỡ và lòng rộng lượng của bạn!

 

-Hoa cô tử -

Mình cũng bó tay chổ này luô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
angel-Devil    2

Mình cũng bó tay chổ này luôn

[/quote

Thật ra cũng đơn giản thôi. Bạn cần biết rằng kí tự %% là dạng kí tự đặc biệt. Nếu viết %%c thì là biểu tượng chữ phi, %%u là gạch dưới. Cũng tương tự như vậy %%65 là mã kí tự của chữ a, %%66=b, %%67=c.

Vậy thủ thuật ở đây như sau.

Tạo một chuỗi kí tự bất kì ví dụ cadviet

Dùng Tcount đánh số hiệu cho nó với lựa chọn là hậu tố (suffix) kết quả các bạn có được là theo bác Hoàng chỉ dạy là cadviet 66, cadviet 67 ... Nhớ lưu ý rằng có kí tự cách giữa chữ cadviet và số.

Dùng find trong edit để thay thế 'cadviet ' nhớ là từ cadviet+1 phím cách thì mới đúng và thay thế bằng từ '%%' khi đó chuỗi kí tự cadviet 66,cadviet 67 sẽ thành %%66,%%67... và nó sẽ tự động chuyển thành a,b,c thôi

  • 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
hiepnq    2
Tớ là thành viên mới toanh, chưa post bài lần nào, các bạn cho tớ hỏi một chút: Làm thế nào để đánh STT tự động dãy 1S, 2S, 3S... nhanh nhất nhỉ. Mình thường xuyên phải làm công việc đánh STT này nhưng mỗi lần làm lại copy rồi sửa thủ công từng text một thấy mất thời gian quá. Ai biết thì chỉ cho tớ với nhé. Cảm ơn nhiều.

Nhờ bác Hoành viết cho cái lips ý

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
tuanvu    1
Có phải cái này dùng để đánh trục và bậc cầu thang ko Hoành? Anh cũng đang dùng 1 cái lisp nhưng sử dụng nhanh hơn.

anh ơi ! anh có thể gửi cái list đó lên chia sẻ với bọn em được không ?

cảm ơn anh nha.

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
ngongtroi    0
Em làm rồi nhưng nó chỉ hiện ra %% 65, %% 66, %% 67,... thôi

Nếu tôi không nhầm thì chỉ khi sử dụng Dtext mới ra được kết quả là A, B, C thôi. Còn nếu sử dụng Text hay Mtext thì sẽ chỉ ra %%65... Bạn thử lại xem 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
billgateviet    29
Nhiều khi chúng ta cần phải sửa từng text một để điền các số theo thứ tự tăng dần. Chẳng hạn phải điền chuỗi D1, D2, D3, D4,...D1000 theo thứ tự tăng dần của trục Y. nếu sửa bằng tay thì rất lâu. Lệnh Tcount của Express Tool cho phép chúng ta làm điều này.

 

Command: tcount

Chương trình sẽ cho bạn chọn đối tượng

Select objects: Specify opposite corner: 5 found

Select objects:

Chương trình hỏi bạn sắp xếp các đối tượng theo chiều tăng trục x, trục y hay theo thứ tự lúc bạn chọn các đối tượng

Sort selected objects by [X/Y/Select-order] <Y>:

Chương trình hỏi bạn số đầu tiên mà bạn đánh, số gia mà bạn cho vào. Ví dụ 2,-1 sẽ đánh các số: 2, 1, 0, -1, -2, ...

Specify starting number and increment (Start,increment) <2,-1>:

 

Chương trình hỏi bạn cách đánh số vào text: Overwrite - ghi đè luôn vào text, Prefix - viết thêm vào phía trước, Suffix - viết thêm vào phía sau, Find&replace - Thay những cụm từ được chỉ định bằng các text số này.

Placement of numbers in text [Overwrite/Prefix/Suffix/Find&replace..] <

Find&replace>:

Nếu bạn chọn Find&replace, máy hỏi thêm cụ từ mà bạn muốn chỉ định.

Enter search string <kts>:

Và cuối cùng chương trình thông báo có bao nhiêu đối tượng text đã được sửa

5 objects modified.

hi các bác . Em muốn hỏi các bác một vấn đề không biết tcount có dùng được không . Đó là đánh số thứ tự bản vẽ dưới dạng " Bản vẽ số :n/150" với n chạy từ 1 đến 150 thì có được không . Mong các bác đại cao thủ chỉ cho mấy chiêu để em lĩnh hội . thanks you .

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

Chào bác.

Em biết bác là cao thủ của trang này rùi. Bác cho em biết lệnh vẽ đường nằm giữa 2 đường được không. Bác cho em bộ Lisp ra đề tay thép được không. em cảm ơn trước nhé.

Email: ksnguyenvanbien@gmail.com

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
minhhung29    2

Mình cũng bó tay chổ này luôn

Thật ra cũng đơn giản thôi. Bạn cần biết rằng kí tự %% là dạng kí tự đặc biệt. Nếu viết %%c thì là biểu tượng chữ phi, %%u là gạch dưới. Cũng tương tự như vậy %%65 là mã kí tự của chữ a, %%66=b, %%67=c.

Vậy thủ thuật ở đây như sau.

Tạo một chuỗi kí tự bất kì ví dụ cadviet

Dùng Tcount đánh số hiệu cho nó với lựa chọn là hậu tố (suffix) kết quả các bạn có được là theo bác Hoàng chỉ dạy là cadviet 66, cadviet 67 ... Nhớ lưu ý rằng có kí tự cách giữa chữ cadviet và số.

Dùng find trong edit để thay thế 'cadviet ' nhớ là từ cadviet+1 phím cách thì mới đúng và thay thế bằng từ '%%' khi đó chuỗi kí tự cadviet 66,cadviet 67 sẽ thành %%66,%%67... và nó sẽ tự động chuyển thành a,b,c thôi

 

mình đã làm như những gì hướng dẫn,nhưng vẫn không thay %% thành A,B,C..... XIN CHỈ GIÁO THÊM , THANKS !!

(Có nhầm lẫn trong hình số 4 việc có và không có khoảng trắng nha các bạn, sorry!)

 

 

19093186.jpg

79222546.jpg

 

90942998.jpg

 

h4a.jpg

 

h4b.jpg

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

Đánh thứ tự A, B, C,.. sao bạn nói đơn giãn quá ma sao tôi làm không được, bạn có thể nói cụ thể hơn được không. Sao khi làm như những gì chỉ dẫn phía trên thì trên màn hình là %%65, %%66,.. chứ không phải A,B...như mong muốn. Nếu %%65 là ký hiệu của chữ A thi chắc trong text nếu mình đánh %%65 thì nó ra là A (như là %%d thì là 'phi')

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
thiep    263
Đánh thứ tự A, B, C,.. sao bạn nói đơn giãn quá ma sao tôi làm không được, bạn có thể nói cụ thể hơn được không

Chào các bạn, xin gửi đến 1 lisp đánh số tự động rất hay Thiep sưu tầm của tác giả Lee McDonnell. Các bạn tải 2 file *.lsp và *.dcl này về và cho vào thư mục support của AutoCad.

http://www.cadviet.com/upfiles/2/autonum_v4.lsp

http://www.cadviet.com/upfiles/2/autonum_v4.rar

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
legiang610    2
Thật ra cũng đơn giản thôi. Bạn cần biết rằng kí tự %% là dạng kí tự đặc biệt. Nếu viết %%c thì là biểu tượng chữ phi, %%u là gạch dưới. Cũng tương tự như vậy %%65 là mã kí tự của chữ a, %%66=b, %%67=c.

Vậy thủ thuật ở đây như sau.

Tạo một chuỗi kí tự bất kì ví dụ cadviet

Dùng Tcount đánh số hiệu cho nó với lựa chọn là hậu tố (suffix) kết quả các bạn có được là theo bác Hoàng chỉ dạy là cadviet 66, cadviet 67 ... Nhớ lưu ý rằng có kí tự cách giữa chữ cadviet và số.

Dùng find trong edit để thay thế 'cadviet ' nhớ là từ cadviet+1 phím cách thì mới đúng và thay thế bằng từ '%%' khi đó chuỗi kí tự cadviet 66,cadviet 67 sẽ thành %%66,%%67... và nó sẽ tự động chuyển thành a,b,c thôi

mình đã làm như những gì hướng dẫn,nhưng vẫn không thay %% thành A,B,C..... XIN CHỈ GIÁO THÊM , THANKS !!

(Có nhầm lẫn trong hình số 4 việc có và không có khoảng trắng nha các bạn, sorry!)

19093186.jpg

79222546.jpg

 

90942998.jpg

 

h4a.jpg

 

h4b.jpg

xin chú ý cho bạn một điều là theo mình thì việc đánh chữ tự động bằng lệnh tcount chỉ có tác dụng với dtext mà vô hiệu với mtext, bạn hãy thử làm lại với dtext nhé, chúc bạn thành công

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

Chính xác là chỉ làm được với dtext ko được với mtext.

Thanks các Pro mình đã làm được.Lisp này rất tiện khi liệt kê bảng nguyên vật liệu/

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


×