Jump to content
InfoFile
Tác giả: Doan Van Ha
Bài viết gốc: 191727
Tên lệnh: ha
đổi font cad

Bạn dùng cái này xem có được không?

Filename: 191727_ha.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 191735
Tên lệnh: ha
Trim Leader?


Câu 1

Câu 2: chưa rõ câu hỏi

Filename: 191735_ha.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 191735
Tên lệnh: dhh
Trim Leader?

Câu 1

Câu 2: chưa rõ câu hỏi
P/S(17h05-27-02-2012): đã sửa

Filename: 191735_dhh.lsp
Tác giả: Tue_NV
Bài viết gốc: 52499
Tên lệnh: pt
Viết Lisp theo yêu cầu


Một đường tròn khi vẽ phải có tâm và bán kính.
Bạn sử dụng đoạn Lisp này nhé :

Hy vọng bạn hài lòng.
Chúc thành công nhé. :undecided:

Filename: 52499_pt.lsp
Tác giả: ssg
Bài viết gốc: 41008
Tên lệnh: vdt1 vdt2 vdt3
Viết Lisp theo yêu cầu

Ssg có vài góp ý với bạn:

1. Trước hết, bạn phải có 1 cuốn sách về Lisp, đọc và làm theo các bài ví dụ cơ bản của họ. Qua đó, chiêm nghiệm lại phần lý thuyết đã đọc được.

2. Tên lệnh lisp bạn có thể đặt tuỳ ý, nhưng không nên trùng tên với 1 trong các lệnh tắt tiêu chuẩn của AutoCAD. Bạn dùng tên "dt" trùng với lệnh tắt "dtext". Sau khi bạn load lisp, lệnh...
>>

Ssg có vài góp ý với bạn:

1. Trước hết, bạn phải có 1 cuốn sách về Lisp, đọc và làm theo các bài ví dụ cơ bản của họ. Qua đó, chiêm nghiệm lại phần lý thuyết đã đọc được.

2. Tên lệnh lisp bạn có thể đặt tuỳ ý, nhưng không nên trùng tên với 1 trong các lệnh tắt tiêu chuẩn của AutoCAD. Bạn dùng tên "dt" trùng với lệnh tắt "dtext". Sau khi bạn load lisp, lệnh tắt "dt" cho "dtext" sẽ không còn hiệu lực.

3. Để có được cùng kết quả như nhau, có nhiều cách viết chương trình khác nhau, tuỳ thói quen và phong cách riêng từng người. Tuy nhiên, điều quan trọng trước tiên là phải đúng cú pháp. Chương trình rất đơn giản và ngắn nhưng bạn sai cú pháp hơi bị nhiều!

4. Bạn tham khảo vài đoạn code sau. Chúng đều cho kết quả như nhau (có hơi khác một chút ở VDT3):


5. Tham khảo thêm ở đây:
http://www.cadviet.com/forum/index.php?sho...t=0&start=0

và nhiều chỗ khác nữa trên diễn đàn...
<<

Filename: 41008_vdt1_vdt2_vdt3.lsp
Tác giả: ketxu
Bài viết gốc: 191776
Tên lệnh: test
Trim Leader?

Theo ý bạn OP mô tả thì nó tầm tầm như thế này :

(defun c:test ()(command "dimstyle" "r" (cdr (assoc 3 (entget (ssname (ssget ":S" (list (cons 0 "DIMENSION"))) 0))))))

Filename: 191776_test.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 2300
Tên lệnh: check
Thống kê tấm ốp.
Viết từ hôm trước mà quên chưa up lên cho Vbao.
Lệnh CHECK, sẽ tìm kiếm những cặp text lân cận nhau (khoảng cách bé hơn Lmax) và có độ dốc lớn hơn cho phép (imax) rồi hiển thị nó trên màn hình bằng các nét màu đỏ.


Filename: 2300_check.lsp
Tác giả: ketxu
Bài viết gốc: 191888
Tên lệnh: ldp
Nhờ chỉnh sửa: Lisp trim leader
Mình về muộn, quick code và còn nhiều vấn đề, bạn dùng tạm, lúc khác sửa sau :


(defun c:ldp (/ LM:mAssoc p lst ss lstSS new ld duoi)
;Free lisp from Cadviet @Ketxu
(defun LM:mAssoc ( key lst / pair )
(if (setq pair (assoc key lst))
(cons (cdr pair) (LM:mAssoc key (cdr (member pair lst))))
)
)
(and (setq ld (ssget ":S" '((0 . "*LEADER")))
ld (ssname ld 0)
duoi (last...
>>
Mình về muộn, quick code và còn nhiều vấn đề, bạn dùng tạm, lúc khác sửa sau :


(defun c:ldp (/ LM:mAssoc p lst ss lstSS new ld duoi)
;Free lisp from Cadviet @Ketxu
(defun LM:mAssoc ( key lst / pair )
(if (setq pair (assoc key lst))
(cons (cdr pair) (LM:mAssoc key (cdr (member pair lst))))
)
)
(and (setq ld (ssget ":S" '((0 . "*LEADER")))
ld (ssname ld 0)
duoi (last (LM:mAssoc 10(entget ld)))
p (getpoint "\nDiem dat chung :")
new ld
)
(while (and (setq ss (ssget "c" duoi duoi '((0 . "*LEADER")))) (= (sslength ss) 2))
(setq lstSS (cons (setq new (car (vl-remove new (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))) lstSS)
duoi (last (LM:mAssoc 10 (entget new)))
)
)

(foreach subLd (cons ld lstSS)
(entmod (subst (cons 10 p) (cons 10 (last (LM:mAssoc 10 (setq lst (entget subLd))))) lst))
)
))

<<

Filename: 191888_ldp.lsp
Tác giả: Tue_NV
Bài viết gốc: 49413
Tên lệnh: toh
Viết Lisp theo yêu cầu

Cảm ơn bạn. Không nhất thiết phải post bài để bày tỏ cảm ơn như thế này
Tick thanks nhiều nhiều là OK. :cheers:

Filename: 49413_toh.lsp
Tác giả: duy782006
Bài viết gốc: 192012
Tên lệnh: poc
: Lisp chèn đối tượng theo lý trình
Theo mình thì cái lisp này của bác ssg dùng linh hoạt cho mọi trường hợp rất chi là ok đấy.
(defun C:POC( / c p1 oldos ph k d1 dh p2) ;;;Point On Curve
(vl-load-com)
(setq
c (car (entsel "\nChon curve:"))
p1 (getpoint "\nDiem chuan tren curve:")
oldos (getvar "osmode")
)
(entmake (list (cons 0 "POINT") (cons 10 p1)))
(setvar "osmode" 512)
(setvar...
>>
Theo mình thì cái lisp này của bác ssg dùng linh hoạt cho mọi trường hợp rất chi là ok đấy.
(defun C:POC( / c p1 oldos ph k d1 dh p2) ;;;Point On Curve
(vl-load-com)
(setq
c (car (entsel "\nChon curve:"))
p1 (getpoint "\nDiem chuan tren curve:")
oldos (getvar "osmode")
)
(entmake (list (cons 0 "POINT") (cons 10 p1)))
(setvar "osmode" 512)
(setvar "pdmode" 34)
(setq
ph (getpoint p1 "\nDiem dinh huong tren curve:")
k (getreal "\nKhoang cach:")
d1 (vlax-curve-getDistAtPoint c p1)
dh (vlax-curve-getDistAtPoint c ph)
)
(if (> dh d1) (setq d2 (+ d1 k)) (setq d2 (- d1 k)))
(setq p2 (vlax-curve-getPointAtDist c d2))
(entmake (list (cons 0 "POINT") (cons 10 p2)))
(setvar "osmode" oldos)
(princ)
)

Theo mình thì cái lisp này của bác ssg dùng linh hoạt cho mọi trường hợp rất chi là ok đấy.
(defun C:POC( / c p1 oldos ph k d1 dh p2) ;;;Point On Curve
(vl-load-com)
(setq
c (car (entsel "\nChon curve:"))
p1 (getpoint "\nDiem chuan tren curve:")
oldos (getvar "osmode")
)
(entmake (list (cons 0 "POINT") (cons 10 p1)))
(setvar "osmode" 512)
(setvar "pdmode" 34)
(setq
ph (getpoint p1 "\nDiem dinh huong tren curve:")
k (getreal "\nKhoang cach:")
d1 (vlax-curve-getDistAtPoint c p1)
dh (vlax-curve-getDistAtPoint c ph)
)
(if (> dh d1) (setq d2 (+ d1 k)) (setq d2 (- d1 k)))
(setq p2 (vlax-curve-getPointAtDist c d2))
(entmake (list (cons 0 "POINT") (cons 10 p2)))
(setvar "osmode" oldos)
(princ)
)

<<

Filename: 192012_poc.lsp
Tác giả: ssg
Bài viết gốc: 22245
Tên lệnh: lb
Viết Lisp theo yêu cầu

Lisp đã sửa:



Vài điểm lưu ý:
1) Bạn nên viết code thật rõ ràng bằng cách chia nhỏ nó ra thành các functions con. Nếu viết tiếp, bạn cũng nên tách các dòng code điều khiển dialog ra 1 function riêng.
2) Trong dcl, key "accept" chỉ nên dành riêng cho OK. Cái này AutoCAD đã định nghĩa rồi. Mình đã đổi nó thành "see"
3) Muốn chương trình làm việc gì khi user bấm vào...
>>

Lisp đã sửa:



Vài điểm lưu ý:
1) Bạn nên viết code thật rõ ràng bằng cách chia nhỏ nó ra thành các functions con. Nếu viết tiếp, bạn cũng nên tách các dòng code điều khiển dialog ra 1 function riêng.
2) Trong dcl, key "accept" chỉ nên dành riêng cho OK. Cái này AutoCAD đã định nghĩa rồi. Mình đã đổi nó thành "see"
3) Muốn chương trình làm việc gì khi user bấm vào nút "See", bạn cứ tống hết chúng vào function "tralb". Khi đó, dòng code điều khiển cho nút "See" chỉ thế này thôi: (action_tile "see" "(tralb)")
4) Done_dialog sẽ đóng dialog lại -> chỉ được phép hiện diện ở "close" thôi. Lỗi lần trước của bạn là ở chỗ này.
5) Bạn dùng font gì (cho các cung) mà trên máy mình không hiển thị được. Không rõ qua mấy lần save chúng có thay đổi không. Nếu bị thay đổi, bạn sửa lại nhé.
6) Mình không rành cách tính toán Lỗ Ban, nhưng qua các công thức tính của bạn, mình đã dùng hàm rem để thay thế. Rem là phép chia lấy phần dư. Ví dụ: (rem 12.34 5) -> return 2.34
<<

Filename: 22245_lb.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 50011
Tên lệnh: dm
Viết Lisp theo yêu cầu


Chào bạn dacphuong,
Bạn dùng thử đoạn code sau đây xem sao:

Đoạn code này chỉ cho bạn ghi kích thước cho các đường line và nó tự chọn vị trí đặt đường kích thước . Trong trường hợp bản vẽ có quá nhiều đường line cần ghi kích thước bạn cần phải xác định điểm đặt đường kích thước cho phù hợp với yêu cầu của bạn. Bạn có thể chạy lisp rồi sau đó...
>>


Chào bạn dacphuong,
Bạn dùng thử đoạn code sau đây xem sao:

Đoạn code này chỉ cho bạn ghi kích thước cho các đường line và nó tự chọn vị trí đặt đường kích thước . Trong trường hợp bản vẽ có quá nhiều đường line cần ghi kích thước bạn cần phải xác định điểm đặt đường kích thước cho phù hợp với yêu cầu của bạn. Bạn có thể chạy lisp rồi sau đó move các đường kích thước về vị trí bạn muốn. Vì không rõ yêu cầu của bạn nên mình viết tạm đoạn code náy, bạn dùng thử và có thể tự điều chỉnh theo ý bạn. Nếu bạn cần bổ sung điều gì thì hãy post nói rõ hơn nhé.
<<

Filename: 50011_dm.lsp
Tác giả: nataca
Bài viết gốc: 50027
Tên lệnh: mexy
Viết Lisp theo yêu cầu

Mình sửa lại đây:

Cái này chắc là ngon rồi.

Filename: 50027_mexy.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 51733
Tên lệnh: gocdoc
Viết Lisp theo yêu cầu


Chào các bác Tue_nv, Tdvn, Sucuph.
Đây là cái lisp mình đã sửa theo ý bác Tue_nv.
Mọi người sử dụng thử và góp ý thêm nha.

Các bác lưu ý giùm trường hợp đường thẳng đứng Xđầu bằng Xcuối. Khi đó không rõ trong chuyên môn thì gọi đó là độ dốc gì? Hiện tại mình cứ để giá trị text là kết quả của biến dodoc, nhưng nó không nhất quán được do biến này...
>>


Chào các bác Tue_nv, Tdvn, Sucuph.
Đây là cái lisp mình đã sửa theo ý bác Tue_nv.
Mọi người sử dụng thử và góp ý thêm nha.

Các bác lưu ý giùm trường hợp đường thẳng đứng Xđầu bằng Xcuối. Khi đó không rõ trong chuyên môn thì gọi đó là độ dốc gì? Hiện tại mình cứ để giá trị text là kết quả của biến dodoc, nhưng nó không nhất quán được do biến này dựa trên hàm tang là không xác định khi góc là bội lẻ của pi/2. Vậy nên nếu có thuật ngữ chuyên môn chỉ cái độ dốc oái oăm này thì các bác nhập béng nó vào trong nội dung text thể hiện là OK.
Ý mình như vậy, các bác cho thêm ý kiến nhé vì mình là dân cơ khí nên chịu mấy cái thuật ngữ chuyên ngành xây dựng cầu đường này.
Chúc các bác khỏe và vui.
<<

Filename: 51733_gocdoc.lsp
Tác giả: ketxu
Bài viết gốc: 192066
Tên lệnh: lt
: Lisp chèn đối tượng theo lý trình

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=62370&hl=&fromsearch=1
(defun c:lt(/ lst lt pt curve txtsiz msp i)
(grtext -1 "Free from Cadviet @Ketxu")
(command "undo" "be")
(vl-load-com)
(mapcar 'set '(curve pt) (nentselp "\nPick start point:"))
(setq isFirst (< (distance (vlax-curve-getStartPoint curve) pt)(distance...
>>

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=62370&hl=&fromsearch=1
(defun c:lt(/ lst lt pt curve txtsiz msp i)
(grtext -1 "Free from Cadviet @Ketxu")
(command "undo" "be")
(vl-load-com)
(mapcar 'set '(curve pt) (nentselp "\nPick start point:"))
(setq isFirst (< (distance (vlax-curve-getStartPoint curve) pt)(distance (vlax-curve-getEndPoint curve) pt)) i 0
ln (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve ))
)
(while (and (setq lt (getreal (strcat "\nNhap ly trinh diem thu " (itoa (setq i (1+ i))) " : "))) (< lt ln))
(entmake
(list (cons 0 "CIRCLE")
(cons 10 (vlax-curve-getPointAtDist curve (if isFirst lt (- ln lt))))
(cons 40 0.1) ;Kich thuoc vong tron
)
)
(setq lst (cons (cons i lt) lst))
)
(setq pt (getpoint "\nDiem dat bang thong ke:")
txtsiz (* (getvar "dimtxt")(getvar "dimscale"))
msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(foreach e (reverse lst)
(vla-addtext msp (itoa (car e)) (vlax-3d-point pt) txtsiz)
(vla-addtext msp (rtos (cdr e) 2 2) (vlax-3d-point (polar pt 0 (* 5 txtsiz))) txtsiz )
(setq pt (polar pt (/ pi -2) (* 1.5 txtsiz)))
)
(command "undo" "en")
)


<<

Filename: 192066_lt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 192052
Tên lệnh: ha1 ha2
Tác giả: ketxu
Bài viết gốc: 192061
Tên lệnh: ist
Nhờ viết lisp chèn text số lượng lớn vào tâm đối tượng.
Hoặc 2 lệnh trong 1 :

(defun c:ist(/ tmp ins)
(grtext -1 "Free from Cadviet @Ketxu")
(vl-load-com)
(command "undo" "be")
(prompt "\nSelect template Text :")
(setq tmp (vlax-ename->vla-object (ssname (ssget ":S" (list (cons 0 "*TEXT"))) 0))
ins (vlax-3d-point (vlax-get tmp 'InsertionPoint))
)
(prompt "\nSelect all entity to insert text :")
(ssget (list...
>>
Hoặc 2 lệnh trong 1 :

(defun c:ist(/ tmp ins)
(grtext -1 "Free from Cadviet @Ketxu")
(vl-load-com)
(command "undo" "be")
(prompt "\nSelect template Text :")
(setq tmp (vlax-ename->vla-object (ssname (ssget ":S" (list (cons 0 "*TEXT"))) 0))
ins (vlax-3d-point (vlax-get tmp 'InsertionPoint))
)
(prompt "\nSelect all entity to insert text :")
(ssget (list (cons 0 "*LINE")))
(vlax-for item (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-move
(vla-copy tmp)
ins
(vlax-3d-point
((lambda(x / p1 p2)
(vla-getboundingbox x 'p1 'p2)
(mapcar '(lambda (a B) (* 0.5 (+ a B)))
(vlax-safearray->list p1) (vlax-safearray->list p2))
) item)
)
)
(vla-put-TextString
(vlax-ename->vla-object (entlast))
(rtos
(cond ((= (vla-get-ObjectName item) "AcDbLine")(vla-get-Length item))
((zerop (vla-get-Area item))(vla-get-Length item))
(T (vla-get-Area item))
)
2 0)
)
)
(command "undo" "en")
)

<<

Filename: 192061_ist.lsp
Tác giả: Thaistreetz
Bài viết gốc: 192155
Tên lệnh: ytc
Lisp lập bảng các thông số kỹ thuật của đường cong tròn (Dùng cho giao thông)
Mình viết tạm cho bạn thế này thôi. ngại viết code lập bảng lắm.
Khi dùng, lệnh sẽ in những gì bạn cần ra cửa sổ command. bạn copy 1 phát từ đây ra rồi paste vào bản vẽ là cũng ngon lành như lập bảng.

Filename: 192155_ytc.lsp
Tác giả: ketxu
Bài viết gốc: 121140
Tên lệnh: c
cách chọn đối tượng vừa được copy ra ?
Bạn lại không đọc kỹ bài của mình rồi , thậm chí chưa dùng thử :wub: Có phần hơi buồn :undecided:

Đoạn code

chính là dùng để chọn lại các đối tượng vừa sinh ra trong lệnh copy đã...
>>
Bạn lại không đọc kỹ bài của mình rồi , thậm chí chưa dùng thử :wub: Có phần hơi buồn :undecided:

Đoạn code

chính là dùng để chọn lại các đối tượng vừa sinh ra trong lệnh copy đã được mark vào tập ss.Sau khi kết thúc lệnh copy (c) thì các đối tượng vừa được sinh ra đã nằm trong tập enlasts rồi đấy,nên thực hiện 1 lệnh sau đó bằng tham số p hoàn toàn được.Nhớ ở đây là lệnh copy mình đang để là C.Nếu bạn dùng lệnh copy nguyên thủy của CAD thì chịu thôi :))
<<

Filename: 121140_c.lsp
Tác giả: Tue_NV
Bài viết gốc: 192094
Tên lệnh: test
Nhờ viết lisp chèn text số lượng lớn vào tâm đối tượng.
Trong tr­ường hợp này nên dùng FIELD

Filename: 192094_test.lsp

Trang 79/330

79