Jump to content
InfoFile
Tác giả: ramborock
Bài viết gốc: 201941
Tên lệnh: newblock
Lisp tạo block

Mình có đoạn lisp sau:


Vấn đề: khi tạo block có name block trùng tên block đã tồn tại thì cad bắt mình định nghĩa lại. Có cách nào đè hay thay thế tên block mới lên tên block cũ có cùng tên hay ko? Và dùng lisp này cho cả file cũ (có chứa block) lẫn file mới chưa có cái block đó.

Filename: 201941_newblock.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 10657
Tên lệnh: test
xin giúp tôi file autolisp tính khối lượng san nền
Xin trả lời bạn về chương trình như sau:
1. Việc quét quanh trọng tâm để tìm 3 điểm tuy có tốt hơn nhưng lisp lại phức tạp hơn rất nhiều. Hơn nữa, mã lệnh lisp trên tôi viết đã lâu, bây giờ đọc lại cũng chẳng còn nhớ nữa. Việc nâng cấp như vậy rất khó.
2. Giống 1.
3. Để kiểm tra lisp có làm sót hay không, trước khi bạn chạy lisp, hãy cho tất cả các giá trị về rỗng...
>>
Xin trả lời bạn về chương trình như sau:
1. Việc quét quanh trọng tâm để tìm 3 điểm tuy có tốt hơn nhưng lisp lại phức tạp hơn rất nhiều. Hơn nữa, mã lệnh lisp trên tôi viết đã lâu, bây giờ đọc lại cũng chẳng còn nhớ nữa. Việc nâng cấp như vậy rất khó.
2. Giống 1.
3. Để kiểm tra lisp có làm sót hay không, trước khi bạn chạy lisp, hãy cho tất cả các giá trị về rỗng (như file mẫu của tôi). Nếu sót chỗ nào thì chỗ đó không hiện số (vì hiện giá trị cũ là rỗng).

Trả lời kiến thức lisp:
1. Để đọc được attribute bằng lisp, bạn cần lấy được entname của attribute đó thông qua entname của block (INSERT). muốn lấy entame của attribute thứ n (n=1,2,3,4...) từ ename của block, mã lệnh như sau:

<<

Filename: 10657_test.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202163
Tên lệnh: ha
Lisp sắp xếp đối tượng theo đường cong
Lisp sắp xếp các đối tượng dọc theo Curve. Đã test thấy OK. Bạn test lại giùm nhé.

Filename: 202163_ha.lsp
Tác giả: q288
Bài viết gốc: 60350
Tên lệnh: ckt
Viết Lisp theo yêu cầu
Nhân tiện mình cũng bổ sung chèn ký tự cho cả DIM nữa.
Lệnh này khi hỏi chèn đầu hay cuối, nếu đầu thì gõ "d" , còn nếu cuối thì enter cũng chạy đc.

Filename: 60350_ckt.lsp
Tác giả: gia_bach
Bài viết gốc: 63966
Tên lệnh: test
Viết Lisp theo yêu cầu

Chào Phiphi
Bạn chạy thử LISP này :

Filename: 63966_test.lsp
Tác giả: gia_bach
Bài viết gốc: 65418
Tên lệnh: svp
Viết Lisp theo yêu cầu

Chào ph168xd
Bạn có thể dùng lệnh Overkill của Express Tools để đưa các pline thẳng hàng nhau thành 1 pline .
Nhớ chọn Option : PLINEs, OVERLAP, END to END

đây là LISP Nhập tỷ lệ Standard Scale của khung viewport bên layout, do không có thời gian nhờ bạn chạy và kiểm tra dùm.

Filename: 65418_svp.lsp
Tác giả: amateurday
Bài viết gốc: 202169
Tên lệnh: ha
Lisp sắp xếp đối tượng theo đường cong
OK rồi bác. Thanks bác nhiều!!!
Thiếu 1 dòng (vl-load-com), em bổ sung luôn.

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=64524
;Doan Van Ha - CADViet.com - Ngay 06/6/2012
;Muc dich: sap xep cac doi tuong doc theo curve.
(defun C:HA( / z ent pt pg ptc pdh cur d1 dh d2 p lst)
(vl-load-com)
(command "undo" "be") (setq osm (getvar...
>>
OK rồi bác. Thanks bác nhiều!!!
Thiếu 1 dòng (vl-load-com), em bổ sung luôn.

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=64524
;Doan Van Ha - CADViet.com - Ngay 06/6/2012
;Muc dich: sap xep cac doi tuong doc theo curve.
(defun C:HA( / z ent pt pg ptc pdh cur d1 dh d2 p lst)
(vl-load-com)
(command "undo" "be") (setq osm (getvar "osmode"))
(setq z 1)
(while
(and
(setq ent (car (entsel (strcat "\nChon doi tuong thu " (itoa z) ": "))))
(setq pt (getpoint (strcat "\nChon diem goc cua doi tuong thu " (itoa z) ": "))))
(if (= z 1) (setq pg pt))
(setq lst (cons (list ent pt (distance pg pt)) lst))
(setq z (1+ z)))
(setq lst (reverse lst))
(setq ptc (getpoint "\nChon diem dat cua doi tuong thu 1 tren Curve: "))
(setq pdh (getpoint ptc "\nChon 1 diem tren Curve de xac dinh huong: "))
(setq cur (car (nentselp ptc)))
(setq d1 (vlax-curve-getDistAtPoint cur ptc))
(setq dh (vlax-curve-getDistAtPoint cur pdh))
(setvar "osmode" 0)
(foreach n lst
(if (> dh d1)
(setq d2 (+ d1 (caddr n)))
(setq d2 (- d1 (caddr n))))
(setq p (vlax-curve-getPointAtDist cur d2))
(command "move" (car n) "" (cadr n) p)
(command "rotate" (car n) "" p (/ (* 180 (angle '(0 0 0) (vlax-curve-getFirstDeriv cur (vlax-curve-getParamAtPoint cur p)))) pi)))
(command "undo" "end") (setvar "osmode" osm) (princ))

<<

Filename: 202169_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 202232
Tên lệnh: mrd
Lisp sắp xếp đối tượng theo đường cong

Hề hề hề,
Tiện thể bạn test thử cái củ chuối này xem có chát không nhé:

Filename: 202232_mrd.lsp
Tác giả: Tue_NV
Bài viết gốc: 66741
Tên lệnh: gt
Viết Lisp theo yêu cầu

Bạn chạy thử Lisp này nhé :

Filename: 66741_gt.lsp
Tác giả: q288
Bài viết gốc: 66758
Tên lệnh: ist
Viết Lisp theo yêu cầu


Chắc text của bạn là mtext tiếng Việt pko? cho nên nó mới xảy ra hiện tượng như vậy, mình sửa lại như sau, bây giờ thì nó move text về pline chứ ko tạo text mới.

Filename: 66758_ist.lsp
Tác giả: gia_bach
Bài viết gốc: 66778
Tên lệnh: t2a
Viết Lisp theo yêu cầu

Chào Phiphi
Bạn chạy thử Lisp chuyển Text sang Attributes
điểm hạn chế : các điểm căn lề của Text không giữ nguyên vị trí ban đầu.

Filename: 66778_t2a.lsp
Tác giả: Tue_NV
Bài viết gốc: 66834
Tên lệnh: ttoa
Viết Lisp theo yêu cầu

Lisp ttoa mà Tue_NV viết cho Phi phi dựa trên tiêu chí WYSIWYG
Các bạn chạy thử xem và cho mình biết ý kiến nhé :


@conghoan :
Lisp Vét bùn theo ý của bạn đã thực hiện xong. Bạn test thử nhé :
Tên lệnh VBUN
Đây : http://www.cadviet.com/upfiles/VBUN.vlx

@Xuantran : Lisp này đã có. Bạn tìm kiếm thử nhé

Filename: 66834_ttoa.lsp
Tác giả: ssg
Bài viết gốc: 21992
Tên lệnh: mtf
Giúp tôi: Ghi tên file vào bản vẽ


Đây bạn, tên lệnh MTF (Modified Time and Filename). Nhưng bạn nên rút kinh nghiệm, lần sau có nêu yêu cầu thì nêu luôn 1 thể, từ nội dung đến hình thức trình bày.

Filename: 21992_mtf.lsp
Tác giả: ketxu
Bài viết gốc: 202410
Tên lệnh: itext
Viết lisp xử lý số liệu từ .txt vào trong cad

Chúc bạn thành công.

(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
...
>>
Chúc bạn thành công.

(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
(vla-put-rotation obj (* pi 0.5))
)
(defun mLstPnt (p lstDisX lstVal)
(mapcar '(lambda(y z)(mtext y z blk *tH*))
lstVal
(cons p (mapcar '(lambda(x)(setq p (cons (+ (car p) x) (cdr p)))) lstDisX))
)
)

(setq fn (open fn "r"))
(while (setq rl (read-line fn))
(setq i 1 j 0
p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")")))
lstDisX
(reverse
(repeat (1- (length lstVal))
(setq lstDis (cons (getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) ":")) lstDis))
)
)
)
(mLstPnt p lstDisX lstVal)
(setq lstDis '())
)
(close fn)
)
)
)

<<

Filename: 202410_itext.lsp
Tác giả: ketxu
Bài viết gốc: 202439
Tên lệnh: itext
Viết lisp xử lý số liệu từ .txt vào trong cad
Sau khi pick điểm đặt dòng, nếu đánh sai khoảng cách thì Undo lại


(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj...
>>
Sau khi pick điểm đặt dòng, nếu đánh sai khoảng cách thì Undo lại


(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
(vla-put-rotation obj (* pi 0.5))
)
(defun mLstPnt (p lstDisX lstVal)
(mapcar '(lambda(y z)(mtext y z blk *tH*))
lstVal
(cons p (mapcar '(lambda(x)(setq p (cons (+ (car p) x) (cdr p)))) lstDisX))
)
)

(setq fn (open fn "r") j 0)
(or tmpDis (setq tmpDis 1))
(while (setq rl (read-line fn))
(setq i 1 )
(setq p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")"))))
(while (< i (1+ (length lstVal)))
(initget "u")
(setq tmpDis (cond ((getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) " <" (vl-princ-to-string tmpDis) ">:")))(tmpDis)))
(cond
((or (= tmpDis "u")(= tmpdis "U"))(setq i (- i 2)))
(T (setq lstDisX (cons tmpDis lstDisX)))
)
)
(mLstPnt p (reverse lstDisX) lstVal)
(setq lstDis '())
)
(close fn)
)
)
)

<<

Filename: 202439_itext.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 202447
Tên lệnh: sldb
Lisp lấy các thông số của đối tượng line, polyline, circle .....

Hề hề hề,
Bạn thử cái này xem nhé. mình mới làm cho LWpolyline kín còn circle thì phải có bước chuyển nó thành lwpolyline nữa. Nếu bạn ưng thì mình sẽ là nốt phần circle.

Chúc bạn vui.

Filename: 202447_sldb.lsp
Tác giả: tomboy
Bài viết gốc: 70886
Tên lệnh: chc
Viết Lisp theo yêu cầu

phải ý bạn như thế này không, chạy thử đi nhé! lệnh CHC tức là change color

Filename: 70886_chc.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 202475
Tên lệnh: nht
chuyển text các cao độ trong Autocad sang file dạng *.txt

Hề hề hề,
Bạn dùng thử cái này xem đã đúng ý bạn chưa nhé. Vì mình chưa biết cách đọc dữ liệu từ file xls nên mới viết cho việc đọc dữ liệu từ file txt. nếu bạn có thể chuyển file xls về file csv thì có thể dùng được lisp này với điều kiện thay chuỗi txt trong dòng (setq fn (getfiled "Select Data File" "" "txt" 0) bằng chuỗi csv.

Chúc bạn vui.

Filename: 202475_nht.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 202506
Tên lệnh: nht
Lisp chèn giá trị vào S : m2

Hề hề hề,
Đúng như bác Ketxu đã góp ý. Việc pick điểm sẽ khó chính xác và tốt hơn là nên dùng phương án thay thế text có sẵn. Tuy nhiên vì là yêu cầu của bạn mà mình cũng không hiểu rõ lắm về chuyên môn của bạn nên mình cứ theo ý bạn mà mần ra cái ni. Lisp này sử dụng các thuộc tính của text y chang cái bản vẽ mà bạn post. Do vậy nếu với các bản vẽ mà text có các thuộc...
>>

Hề hề hề,
Đúng như bác Ketxu đã góp ý. Việc pick điểm sẽ khó chính xác và tốt hơn là nên dùng phương án thay thế text có sẵn. Tuy nhiên vì là yêu cầu của bạn mà mình cũng không hiểu rõ lắm về chuyên môn của bạn nên mình cứ theo ý bạn mà mần ra cái ni. Lisp này sử dụng các thuộc tính của text y chang cái bản vẽ mà bạn post. Do vậy nếu với các bản vẽ mà text có các thuộc tính như layer, chiều cao chữ, font chữ, độ rộng ký tự ... của text khác với bản vẽ này sẽ có thể có trục trặc. bạn lưu ý điều này để có thể chỉnh lisp theo yêu cầu của bạn.
Hãy dùng thử và cho biết ý kiến nếu cần chỉnh sửa thêm cái chi.

Chúc bạn vui.
<<

Filename: 202506_nht.lsp
Tác giả: vantuan18nd
Bài viết gốc: 202454
Tên lệnh: itext
Viết lisp xử lý số liệu từ .txt vào trong cad
Các bác chỉnh sửa giúp em theo cách này với
- mình chỉ cần nhập khoảng cách giữa H1-H2, H2-H3,....
- sau đó tự động phun các cột đó vào CAD ( bỏ qua bước nhập điểm đặt dòng text thứ 1, 2...)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=64582&pid=202432&st=20&#entry202432

(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn...
>>
Các bác chỉnh sửa giúp em theo cách này với
- mình chỉ cần nhập khoảng cách giữa H1-H2, H2-H3,....
- sau đó tự động phun các cột đó vào CAD ( bỏ qua bước nhập điểm đặt dòng text thứ 1, 2...)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=64582&pid=202432&st=20&#entry202432

(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
(vla-put-rotation obj (* pi 0.5))
)
(defun mLstPnt (p lstDisX lstVal)
(mapcar '(lambda(y z)(mtext y z blk *tH*))
lstVal
(cons p (mapcar '(lambda(x)(setq p (cons (+ (car p) x) (cdr p)))) lstDisX))
)
)

(setq fn (open fn "r") j 0)
(or tmpDis (setq tmpDis 1))
(while (setq rl (read-line fn))
(setq i 1 )
(setq p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")"))))
(while (< i (1+ (length lstVal)))
(initget "u")
(setq tmpDis (cond ((getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) " <" (vl-princ-to-string tmpDis) ">:")))(tmpDis)))
(cond
((or (= tmpDis "u")(= tmpdis "U"))(setq i (- i 2)))
(T (setq lstDisX (cons tmpDis lstDisX)))
)
)
(mLstPnt p (reverse lstDisX) lstVal)
(setq lstDis '())
)
(close fn)
)
)
)


<<

Filename: 202454_itext.lsp

Trang 93/330

93