Jump to content
InfoFile
Tác giả: q288
Bài viết gốc: 68171
Tên lệnh: kt
Viết Lisp theo yêu cầu



Máy mình ko bị lỗi đó, đó là do có sự lẫn lộn số thực số nguyên, mình sửa lại thành số thực hết.
Còn vụ pline thì do bạn nói cần gấp thì mình viết gấp, vả lại đa số trong bản vẽ của bạn là line,
dĩ nhiên nếu gồm cả pline thì ct sẽ dài hơn.
Bây giờ thì có đủ line và pline, bạn chạy thử xem.

Filename: 68171_kt.lsp
Tác giả: gia_bach
Bài viết gốc: 64868
Tên lệnh: atp
Viết Lisp theo yêu cầu


Chào xuantran15
Bạn chạy thử LISP "Add Text Pline"

Filename: 64868_atp.lsp
Tác giả: gia_bach
Bài viết gốc: 65088
Tên lệnh: atp
Viết Lisp theo yêu cầu



Filename: 65088_atp.lsp
Tác giả: Phiphi-
Bài viết gốc: 49130
Tên lệnh: get-example put-example
Kết hợp Excel-AutoLisp-AutoCAD

Các đoạn code này PP thấy trong trang http://web2.airmail.net/terrycad , ngoài ra còn có nhiều CODE khác nữa. Hope this help.

Filename: 49130_get-example_put-example.lsp
Tác giả: duy782006
Bài viết gốc: 176602
Tên lệnh: lkt
Viết lisp vẽ 1 đường Line có ghi luôn kích thước của Line đó

Xem cái này thế nào: Lệnh là LKT


(defun c:lkt ( )
(command "undo" "be")
(command "-style" "ktdt" "VNI-HELVE" "0" "1" "0" "n" "n")
(if (null dolora)(setq dolora "400"))
(Setq temp T)
(While temp
(setq a (strcat "\nD lon text hien hanh la (" dolora ") /<Diem dau tien>: "))
...
>>

Xem cái này thế nào: Lệnh là LKT


(defun c:lkt ( )
(command "undo" "be")
(command "-style" "ktdt" "VNI-HELVE" "0" "1" "0" "n" "n")
(if (null dolora)(setq dolora "400"))
(Setq temp T)
(While temp
(setq a (strcat "\nD lon text hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "d D")
(setq str (getpoint a))
(Cond
((= str "d") (setq dolora (getstring (strcat"\nDo lon text <" dolora "> :"))))
((= str "D") (setq dolora (getstring (strcat"\nDo lon text <" dolora "> :"))))
(Progn
(Setq a str)
(setq temp nil)
)
)
)

(setq b (getpoint a"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) (/ doclora 4)))

(command ".line" a b "")
(command "text" "j" "c" c doclora b (rtos daiab 2 2) "")
(command ".move" "last" "" c d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ)
)

<<

Filename: 176602_lkt.lsp
Tác giả: duy782006
Bài viết gốc: 176637
Tên lệnh: lktd
Viết lisp vẽ 1 đường Line có ghi luôn kích thước của Line đó

Xem cái này xem: lệnh là LKTD, lisp dùng dim hiện hành để đánh nhé.


(defun c:lktd ( )
(command "undo" "be")
(if (null dolora)(setq dolora "4"))
(Setq temp T)
(While temp
(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "k K")
(setq str (getpoint a))
(Cond
((= str "k") (setq...
>>

Xem cái này xem: lệnh là LKTD, lisp dùng dim hiện hành để đánh nhé.


(defun c:lktd ( )
(command "undo" "be")
(if (null dolora)(setq dolora "4"))
(Setq temp T)
(While temp
(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "k K")
(setq str (getpoint a))
(Cond
((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
(Progn
(Setq a str)
(setq temp nil)
)
)
)

(setq b (getpoint a"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

(command ".line" a b "")
(command "DIMALIGNED" a b d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ)
)

<<

Filename: 176637_lktd.lsp
Tác giả: risusu
Bài viết gốc: 176656
Tên lệnh: clt
Lisp dãn cách các text đè lên nhau với khoảng cách cho trước
Lisp này không biết đúng ý bạn không? Lệnh tắt là CLT

Filename: 176656_clt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 176786
Tên lệnh: ha
Đố vui với LISP
Mời (và nhờ) các bạn cùng tìm lỗi của bài toán sau đây:
Trong bản vẽ đính kèm có 1 cặp Spline màu đỏ và 1 cặp Line màu trắng. Với cặp màu đỏ thì chưa phát hiện ra lỗi, nhưng với cặp màu trắng thì có lỗi. Bài toán này xuất phát từ thực tế công việc, mà tôi cũng không hiểu tại sao.
Lisp y/c nhập số điểm chia, chọn đường 1 và chọn đường 2. Kết quả lisp sẽ vẽ 2 Line.
>>
Mời (và nhờ) các bạn cùng tìm lỗi của bài toán sau đây:
Trong bản vẽ đính kèm có 1 cặp Spline màu đỏ và 1 cặp Line màu trắng. Với cặp màu đỏ thì chưa phát hiện ra lỗi, nhưng với cặp màu trắng thì có lỗi. Bài toán này xuất phát từ thực tế công việc, mà tôi cũng không hiểu tại sao.
Lisp y/c nhập số điểm chia, chọn đường 1 và chọn đường 2. Kết quả lisp sẽ vẽ 2 Line.
Nhưng khi nhập n=100 và n=500 thì không lỗi, còn nhập n=300 thì lỗi.
http://www.cadviet.com/upfiles/3/do_vui_ha_1.dwg

<<

Filename: 176786_ha.lsp
Tác giả: q288
Bài viết gốc: 57376
Tên lệnh: ch3
Viết lisp chia đoạn thẳng thành 3 phần
Còn một điều nữa khi làm việc với đường cong là mình thấy hằng số acExtendBoth trong hàm ints không thích hợp, vì nó có thể cắt ở điểm giao "ảo", tức là điểm extend của đg cong. Mình xin sửa lại là acExtendNone để chỉ cắt ở điểm giao "thực". CT sửa lại như sau:

Filename: 57376_ch3.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 176833
Tên lệnh: dkctd
Lisp dãn cách các text đè lên nhau với khoảng cách cho trước

Bạn dùng thử lisp này coi đã ưng ý chưa nhé.
Thực tế khi kiểm tra bản vẽ của bạn thì thấy các Text được sắp xếp khá lộn xộn, không theo một chuẩn mực nào cả.
Mình làm cái lisp này có nhẽ chỉ nhằm thỏa mãn cai yêu cầu cụ thể riên cho cái bản vẽ bạn gửi mà thôi. trường hợp bạn áp dụng với cái bản vẽ khác thì sẽ có nhiều điều phải bàn.
Cụ thể:
Theo...
>>

Bạn dùng thử lisp này coi đã ưng ý chưa nhé.
Thực tế khi kiểm tra bản vẽ của bạn thì thấy các Text được sắp xếp khá lộn xộn, không theo một chuẩn mực nào cả.
Mình làm cái lisp này có nhẽ chỉ nhằm thỏa mãn cai yêu cầu cụ thể riên cho cái bản vẽ bạn gửi mà thôi. trường hợp bạn áp dụng với cái bản vẽ khác thì sẽ có nhiều điều phải bàn.
Cụ thể:
Theo yêu cầu là sắp xếp text theo thứ tự điểm đặt text thì chỉ có với nhóm thứ hai là đùng, còn ở nhóm 1 thì sai tòe loe. Lý do là bạn dùng việc căn chỉnh text tùm lum nên nhì trên bản vẽ thì text 400 nằm sau cùng như theo mã định hình text thì text này lại có điểm đặt trước text 300 . Tương tự text 200 sẽ có điểm đặt trước text 100.
Vì thế để cho có kết quả giống như hình kết quả mà bạn gửi lên mình phải dựa vào giá trị số của text để làm. Như vậy nếu với các text không phải giá trị số thì việc sắp xếp này sẽ là vô nghĩa.
Sau khi lisp chạy thì mình đã chuyển toàn bộ các text về dạnh canh lề là BL (bottom left). Điều này để đảm bảo cho các text trông ngay ngắn và đẹp như yêu cầu bạn đã gửi, nhưng lại làm thay đổi cấu trúc ban đầu của chúng.
Hy vọng rằng qua cái lisp này bạn sẽ hiểu và biết cách tổ chức cái bản vẽ của bạn hợp lý hơn để thuận tiện cho việc áp dụng lisp khi cần thiết, Đồng thời nó cũng tốt cho việc hoàn thiện kỹ năng CAD của bạn.
Trong trường hợp gặp khó khăn khi sử dụng cái lisp này, bạn hãy post lên kèm với bản vẽ cần dùng nó, mình sẽ xem xét và chỉnh sửa lại cho phù hợp.


Chúc bạn vui
<<

Filename: 176833_dkctd.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 177235
Tên lệnh: dkctd
Lisp dãn cách các text đè lên nhau với khoảng cách cho trước

Chào bạn NguyenngocSon,
Căn cứ vào ý kiến của bạn kết hợp với các yêu cầu của chủ thớt, mình chỉnh lại cái lisp để không cần nhập điểm , cho phép giãn các đối tượng text theo phương đứng, giãn từng nhóm text sau mỗi lần lựa chọn với khoảng cách giữa các text được người dùng nhập vô. Lisp này sẽ lấy text đứng đầu tiên bên trái làm chuẩn để căn chỉnh tất cả các text...
>>

Chào bạn NguyenngocSon,
Căn cứ vào ý kiến của bạn kết hợp với các yêu cầu của chủ thớt, mình chỉnh lại cái lisp để không cần nhập điểm , cho phép giãn các đối tượng text theo phương đứng, giãn từng nhóm text sau mỗi lần lựa chọn với khoảng cách giữa các text được người dùng nhập vô. Lisp này sẽ lấy text đứng đầu tiên bên trái làm chuẩn để căn chỉnh tất cả các text còn lại trong nhóm và chỉnh sửa định dạng căn chỉnh của tất cả các text trong nhóm về giống như text đầu tiên này. Vì vậy sẽ tránh được việc nhảy tọa độ y như ở lisp cũ.
Lisp này sắp xếp các text theo trật tự hiện hành của text trên bản vẽ, không phụ thguộc vào giá trị số của text cũng như điểm đặt của text, khắc phục được các nhược điểm của lisp trước.
Về ý kiến chỉnh 1 lần tất cả các text trùng có trên bản vẽ cũng có thể thực hiện được với điều kiện bạn phải nêu rõ cách chỉnh cho mỗi trường hợp trùng nhau. Vì như bạn biết trên bản vẽ có thể có rất nhiều text trùng nhau theo nhiều cách. Text đứng, text nằm, text xiên , text trùng text, text trùng các đối tượng khác chứa text (tỷ như block), ......
Do vậy bài toán sẽ khá phức tạp nhưng không phải không có cách giải quyết nếu như bạn có thể xác định rõ cách chỉnh cho mỗi trường hợp.
Bạn hãy dùng thử lisp này và cho ý kiến nếu thấy cần bổ sung gì thêm.


Chúc bạn vui,

@ Bạn dauquangminh: Hãy dùng thử lisp này, nó đã khắc phục được các nhược điểm mà bạn đã nêu trong bài trước. Tuy nhiên nó không chọ bạn chọn điểm đặt trứơc mà tự chọn điểm đặt theo vị trí text đầu tiên của nhóm. Nếu bạn muốn có thể so sánh hai lisp để tự sửa chỗ chọn điểm đặt này. Thực ra theo mình thì chả cần chọn nữa mà sau khi bạn chạy xong nếu thấy chưa ưng thì move một phát cả đám chúng đi theo ý bạn cũng đơn giản mà.
Hề hề hề...
<<

Filename: 177235_dkctd.lsp
Tác giả: duy782006
Bài viết gốc: 177258
Tên lệnh: plkt
Tác giả: Nguyen Hoanh
Bài viết gốc: 13436
Tên lệnh: jbt
Ghép số bị tách trong bình đồ


Lệnh JBT (Join Broken Text) dưới đây sẽ làm điều bạn muốn:

Filename: 13436_jbt.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 13456
Tên lệnh: jbt
Ghép số bị tách trong bình đồ

Là do điểm chèn nằm ở giữa text, nên không thay đổi điểm chèn thì text sẽ bị nhảy.

Nếu cho phép đổi điểm chèn và giữ tọa độ dấu chấm thì cải tiến của dưới đây sẽ làm được điều bạn muốn.
Lệnh vẫn là JBT:


Filename: 13456_jbt.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 4795
Tên lệnh: t2p
Lisp chọn 2 text cho ra 1 điểm toạ độ
Lệnh là T2P (text to point)

bạn thử dùng xem có đúng không, vì tôi đang dùng 1 máy không có ACAD và viết lisp trực tiếp trên trình duyệt không test được.

Filename: 4795_t2p.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 82294
Tên lệnh: ctc
Viết lisp theo yêu cầu [phần 2]

Hề hề hề, chào bạn Cadviet_MTV,
Sau khi làm cái lisp trước gửi bạn, thấy có điểm bất tiện là mỗi lần chỉnh chỉ chọn được một em, mà như vậy có vẻ chưa thuận lợi lắm cho bạn, mình cải tiến nó đi một tí thành cái lisp mới này, cho phép bạn :
1/- một lần sửa chọn được nhiều em với điều kiện các em phải có cùng khoảng cách thêm hay bớt và phải có cùng ký tự...
>>

Hề hề hề, chào bạn Cadviet_MTV,
Sau khi làm cái lisp trước gửi bạn, thấy có điểm bất tiện là mỗi lần chỉnh chỉ chọn được một em, mà như vậy có vẻ chưa thuận lợi lắm cho bạn, mình cải tiến nó đi một tí thành cái lisp mới này, cho phép bạn :
1/- một lần sửa chọn được nhiều em với điều kiện các em phải có cùng khoảng cách thêm hay bớt và phải có cùng ký tự đánh dấu. Muốn vậy khi lisp hỏi bạn nhập ký tự danh dấu chung bạn sẽ nhập nó vào (ở trường hợp bạn nêu ví dụ là dấu "+".)
2/- Chọn nhiều em nhưng chỉnh từng em với điều kiện chì có chung khoảng cách chỉnh sửa nhưng khác ký tự đánh dấu. Ví dụ như : 92+218.27 và 92-106.08
Khi đó khi lisp yêu cầu bạn nhập ký tư đánh dấu chung thì bạn enter để bỏ qua và lisp sẽ yêu cầu bạn nhập ký tự đánh dấu riêng.

Do không chuyên về công việc của bạn nên có thể chưa hiểu hết các yêu cầu bạn đặt ra. Mình cứ mạo muội gửi lisp này để bạn xài thử và góp ý, Nếu cần chỉnh sửa gì bạn cứ nêu lên mình tin là mọi người sẽ gỡ được bạn ạ.
Chúc bạn thành công trong công việc và cuộc sống. Hề hề hề.
Nó đây bạn ơi:

<<

Filename: 82294_ctc.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 14082
Tên lệnh: ib resetib
TẠO MỘT MENU THƯ VIỆN
Đây là mã nguồn:

file CVIB.lsp

Filename: 14082_ib_resetib.lsp
Tác giả: Tue_NV
Bài viết gốc: 48561
Tên lệnh: df
Lisp đổi Font cho text được chọn tại sao lỗi với Font .vnarial narrow !!!!!!
Đây là đoạn Code đổi font của Text sang font .vnarial narrow

Chúc thành công ^_^

Filename: 48561_df.lsp
Tác giả: phamngoctukts
Bài viết gốc: 133771
Tên lệnh: locso
Hỏi cách lấy giá trị trong text

Bạn thử cái này. Nó lọc toàn bộ số trong text được chọn

Filename: 133771_locso.lsp
Tác giả: gia_bach
Bài viết gốc: 177839
Tên lệnh: at2t
Lisp Ghép Text Cần Giúp Đỡ

Phải như thế này ko?

(defun c:at2t (/ center color data edata ent i sel ss str);All Text to Text
(defun centerSS (ss / lst_max lst_min maxpt minpt ll ur)
(vl-load-com)
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(vla-GetBoundingBox ent 'minpt 'maxpt)
(setq lst_min (cons (vlax-safearray->list minpt) lst_min)
lst_max (cons (vlax-safearray->list maxpt) lst_max) ) ...
>>

Phải như thế này ko?

(defun c:at2t (/ center color data edata ent i sel ss str);All Text to Text
(defun centerSS (ss / lst_max lst_min maxpt minpt ll ur)
(vl-load-com)
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(vla-GetBoundingBox ent 'minpt 'maxpt)
(setq lst_min (cons (vlax-safearray->list minpt) lst_min)
lst_max (cons (vlax-safearray->list maxpt) lst_max) ) )
(setq ll (list (car (vl-sort (mapcar 'car lst_min) '<))
(car (vl-sort (mapcar 'cadr lst_min) '<)) )
ur (list (last (vl-sort (mapcar 'car lst_max) '<))
(last (vl-sort (mapcar 'cadr lst_max) '<)) ) )
(mapcar '/ (mapcar '+ ll ur) '(2.0 2.0 2.0)) )
(defun Change_Str (data pt str color)
(entmake (list (cons 0 "TEXT") (assoc 8 data) (cons 10 pt)
(cons 11 pt) (assoc 7 data) (assoc 40 data)
(cons 71 0) (cons 72 1) (cons 73 2)
(cons 1 str) (cons 62 color)
(if (assoc 6 data) (assoc 6 data) '(6 . "BYLAYER") )
(if (assoc 39 data) (assoc 39 data) '(39 . 0) )
(if (assoc 370 data) (assoc 370 data) '(370 . -1) ) )) )
(defun dxf (tag obj) (cdr (assoc tag obj)))
;main
(setq ss (ssadd))
(while (setq sel (entsel "\nChon cac Text can noi voi nhau: "))
(setq ent (car sel))
(if (= (cdr (assoc 0 (entget ent))) "TEXT")
(ssadd ent ss)) )
(if (> (sslength ss) 0)
(progn
(setq i -1
str ""
center (centerSS ss)
data (entget (ssname ss 0))
color (dxf 62 data))
(while (setq ent (ssname ss (setq i (1+ i))))
(setq edata (entget ent)
str (strcat str " " (dxf 1 edata)) )
(entdel ent) )
(Change_Str data center (substr str 2) color) )
(princ "\nKhong chon duoc Text !"))
(princ))

<<

Filename: 177839_at2t.lsp

Trang 59/330

59