Jump to content
InfoFile
Tác giả: nguyentuyen6
Bài viết gốc: 108528
Tên lệnh: xbl
Viết lisp theo yêu cầu [phần 2]


Mình chọc ngoáy linh tinh cũng đc cái líp này. Bạn dùng thử xem nhé:

Filename: 108528_xbl.lsp
Tác giả: phamngoctukts
Bài viết gốc: 109175
Tên lệnh: vetuong vt vc
Viết lisp theo yêu cầu [phần 2]

Mình dùng vẫn bình thường mà.
http://www.cadviet.com/upfiles/3/vt.jpg
Bạn up file lưới trục của bạn lên đây mình xem thử thế nào.
bạn dùng lại thử code này xem mình có sửa đôi chút về layer. Nét trục không nhất thiết phải là nét _tim.

Filename: 109175_vetuong_vt_vc.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 106337
Tên lệnh: ctxt
Làm sao dể tự động kết nối 1 bản vẽ text sang 2(nhiều) bản vẽ khác

Chào bạn nbdngo,
Việc cắt chuỗi này thực ra rất đơn giản. Chỉ là dùng các hàm xử lý chuỗi mà thôi. Bạn có thể sử dụng đoạn lisp sau:

Sau khi chạy lisp bạn sẽ có chuỗi đầu là ch1 và chuỗi sau là ch2.

Filename: 106337_ctxt.lsp
Tác giả: gia_bach
Bài viết gốc: 73658
Tên lệnh: addvtx
Viết lisp theo yêu cầu [phần 2]

Về giá trị bulge
The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list.
A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex.
A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.
giá trị bulge là tang của 1/4 góc chắn phần tử (segment).
- Nếu bulge >0 : cung tròn theo...
>>

Về giá trị bulge
The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list.
A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex.
A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.
giá trị bulge là tang của 1/4 góc chắn phần tử (segment).
- Nếu bulge >0 : cung tròn theo ngược chiều kim đồng hồ, ngược lại cùng chiều kim đồng hồ.
- Nếu bulge = 0 : phần tử là đuờng thẳng
- Nếu bulge = 1 : phần tử là đuờng tròn

Gửi bạn Lisp thêm các đỉnh tại các vị trí giao nhau giữa đuờng LWPOLYLINE với tất cả các đối tuợng khác cắt qua nó (bao gồm : LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE).
Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

<<

Filename: 73658_addvtx.lsp
Tác giả: phamngoctukts
Bài viết gốc: 119313
Tên lệnh: ntext
Viết lisp theo yêu cầu [phần 2]


Của bạn đây. Chúc bạn làm việc hiệu quả.

Filename: 119313_ntext.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202607
Tên lệnh: ha
lisp lọc điểm có cao độ Z

Lisp lọc các điểm có cao độ nằm trong đoạn

Filename: 202607_ha.lsp
Tác giả: gia_bach
Bài viết gốc: 74356
Tên lệnh: arear
Viết lisp theo yêu cầu [phần 2]

Bạn chạy thử Lisp tính diện tích các region

Filename: 74356_arear.lsp
Tác giả: thiep
Bài viết gốc: 75371
Tên lệnh: chatt
Viết lisp theo yêu cầu [phần 2]


Chào MANHHUNGXDA,
Lisp changeattrib.lsp, Thiep đã có hộp thoại.
@ Gia_bach, Vì đỡ mất thời gian tạo hộp thoại, Thiep đã lấy hộp thoại của bác Gia_bach, file ATTI.dcl giữ nguyên, và vì vậy phải lấy 1 số mã điều khiển hộp thoại luôn. Cảm ơn Gia_bach rất nhiều.

@MANHHUNGXDA,
- Hôm qua thấy MANHHUNGXDA post bài: Lisp CHANGE-ATTRIB.LSP thêm hộp thoại, bây giờ lại không thấy bài...
>>

Chào MANHHUNGXDA,
Lisp changeattrib.lsp, Thiep đã có hộp thoại.
@ Gia_bach, Vì đỡ mất thời gian tạo hộp thoại, Thiep đã lấy hộp thoại của bác Gia_bach, file ATTI.dcl giữ nguyên, và vì vậy phải lấy 1 số mã điều khiển hộp thoại luôn. Cảm ơn Gia_bach rất nhiều.

@MANHHUNGXDA,
- Hôm qua thấy MANHHUNGXDA post bài: Lisp CHANGE-ATTRIB.LSP thêm hộp thoại, bây giờ lại không thấy bài post nữa, phải chăng mình có thể xóa bài mình đã post được? lâu nay thiep không biết có thể xóa được!
- Về thuật toán tính khối lượng san nền, trong lisp sannen dùng thuật toán phương pháp khối, có nghĩa là cộng thể tích các khối trụ lại. Thuật toán này, yêu cầu trắc đạc phải đo diện tích san nền với điểm đo theo 1 mạng lưới ô vuông.
Thiep xin đề xuất 1 thuật toán tính khối lượng san nền khác, bằng phương pháp mặt cắt song song, Thuật toán này, yêu cầu trắc đạc đo diện tích san nền với điểm đo theo 1 mạng lưới tự do đủ yêu cầu đo vẽ địa hình của quy phạm đo vẽ, sau đó vẽ các đường bình độ, lập các mắt cắt địa hình song song, tính diện tích mặt cắt, tính thể tích từng cặp mặt cắt song song gần nhất, cộng các thể tích này lại. Đây là kiểu tính thể tích của 1 hình thể 3 D theo kiểu tích phân thể tích.
<<

Filename: 75371_chatt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202639
Tên lệnh: ha
Lisp Ghép Text Cần Giúp Đỡ
Lisp ghép từng cặp 2 text (dạng số) rời thành 1 text, thêm dấu chấm thập phân.

Filename: 202639_ha.lsp
Tác giả: tien2005
Bài viết gốc: 201570
Tên lệnh: test
Đổi tên của layout


minhf xin phép sửa lại code cua ketxu theo yeu cầu của Bạn

(defun C:test (/ item *doc* pre after fin rep nam)
;Ketxu
(vl-load-com)
(command "_.undo" "be")
(setq pre (getstring "\nTien to can them vao : ")
after (getstring "\nHau to can them vao : ")
fin (getstring T "\nChuoi can thay the : ")
rep (getstring T "\nChuoi thay the : ")
*doc*...
>>

minhf xin phép sửa lại code cua ketxu theo yeu cầu của Bạn

(defun C:test (/ item *doc* pre after fin rep nam)
;Ketxu
(vl-load-com)
(command "_.undo" "be")
(setq pre (getstring "\nTien to can them vao : ")
after (getstring "\nHau to can them vao : ")
fin (getstring T "\nChuoi can thay the : ")
rep (getstring T "\nChuoi thay the : ")
*doc* (vla-get-layouts(vla-get-activedocument (vlax-get-acad-object)))
)
(foreach lay(layoutlist)
(setq nam (vla-get-name (vla-item *doc* lay)))
(while (vl-string-search fin nam)
(setq nam (vl-string-subst rep fin nam))
)
(vla-put-name (setq item (vla-item *doc* lay)) (strcat pre nam after));(strcat pre (vla-get-name item) after))
)
(command "_.undo" "end")
(princ)
)


@ketxu: Bạn có thể giúp mình thêm đoạn code lấy các layout theo thứ tự được không, việc này có thể thay đổi toàn bộ tên các layout mà không phụ thuộc vào các tên cũ nhưng vẫn đảm bảo tính thứ tự của các layout. Các hàm VLA muốn tìm hiểu thêm thì tìm ở đâu để biết các ứng dụng và cú pháp lệnh, mong Bạn giúp
<<

Filename: 201570_test.lsp
Tác giả: Chiron
Bài viết gốc: 202650
Tên lệnh: tg
[Nhờ chỉnh sửa]Lisp tính tổng độ dài đoạn thẳng.

Hi vọng đúng cái bạn cần.


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=763
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
>>

Hi vọng đúng cái bạn cần.


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=763
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
pt1 pt2
)
)
)
)
(setq tot_len (+ tot_len mline_len))
(ssdel e_name ss)
)

(defun C:tg (/ tot_len ss e_name e_record e_type txtpnt txtht)
(setq tot_len 0.0)
(setq ss (ssget))
(if (null ss)
(exit)
)
(while (> (sslength ss) 0)
(setq e_name (ssname ss 0))
(setq e_record (entget e_name))
(setq e_type (cdr (assoc '0 e_record)))
(cond ((wcmatch e_type
"LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE"
)
(command "lengthen" e_name "")
(setq tot_len (+ tot_len (getvar "PERIMETER")))
(ssdel e_name ss)
)
((wcmatch e_type "MLINE") (add_mline))
(e_type (ssdel e_name ss))
)
)
(setq txtpnt (getpoint "\nSpecify start point of text."))
(setq txtht
(getdist (strcat "\nSpecify height <"
(rtos (getvar "textsize") 2 2)
">: "
)
)
)
(if (null txtht)
(setq txtht (getvar "textsize"))
)
(command "text"
"m"
txtpnt
txtht
0
(strcat (rtos (/ tot_len 1000) 2 2) "m")
)
(princ)
)


<<

Filename: 202650_tg.lsp
Tác giả: ketxu
Bài viết gốc: 202652
Tên lệnh: gt
Lisp Ghép Text Cần Giúp Đỡ
Hoặc dùng 1 lisp ketxu viết lâu lâu rồi xem có còn hợp với bạn không ^^
Link gốc : http://www.google.com.vn/url?sa=t&rct=j&q=n%E1%BB%91i%20text%20chu%E1%BB%97i%20ketxu%20lisp&source=web&cd=1&ved=0CFUQrAIoAjAA&url=http%3A%2F%2Fwww.cadviet.com%2Fforum%2Findex.php%3Fshowtopic%3D53491&ei=_3rVT9eCF6u4iAeFubiMAw&usg=AFQjCNFtmVh6HMhSFUdbqmbaQeLEK4AYYQ&cad=rja

(defun c:gt (/)
(defun ST:Ss->ListEnt (ss / n e l)
...
>>
Hoặc dùng 1 lisp ketxu viết lâu lâu rồi xem có còn hợp với bạn không ^^
Link gốc : http://www.google.com.vn/url?sa=t&rct=j&q=n%E1%BB%91i%20text%20chu%E1%BB%97i%20ketxu%20lisp&source=web&cd=1&ved=0CFUQrAIoAjAA&url=http%3A%2F%2Fwww.cadviet.com%2Fforum%2Findex.php%3Fshowtopic%3D53491&ei=_3rVT9eCF6u4iAeFubiMAw&usg=AFQjCNFtmVh6HMhSFUdbqmbaQeLEK4AYYQ&cad=rja

(defun c:gt (/)
(defun ST:Ss->ListEnt (ss / n e l)
(setq n (sslength ss))
(while (setq e (ssname ss (setq n (1- n))))
(setq l (cons e l))
)
)
(defun ST:List-Split (old n / a lsttmp new)
(setq i 0 a (length old))
(while (< i a)
(repeat n (setq lsttmp (append lsttmp (list (car old))) old (cdr old)))
(setq new (append new (list (vl-remove nil lsttmp)))
i (+ i n)
lsttmp '())
)
new)
(defun dxf (code en)(cdr(assoc code (entget en))))
(defun chdxf (code val en) (entmod (subst (cons code val) (assoc code (entget en)) (entget en))))
(Setq ss (ST:Ss->ListEnt (ssget (list (cons 0 "TEXT,MTEXT"))))
lstEname (vl-sort lstEname '(lambda (x y)(< (car (dxf 10 x))(car (dxf 10 y)))(> (cadr (dxf 10 x))(cadr (dxf 10 y)))))
lstEname (ST:List-Split lstEname 2)
)
(foreach lst lstEname
(setq lst (vl-sort lst '(lambda (x y)(< (car (dxf 10 x))(car (dxf 10 y))))))
(vla-put-alignment (setq 1st (vlax-ename->vla-object (car lst))) 0)
(chdxf 1 (strcat (dxf 1 (car lst)) "." (dxf 1 (last lst))) (car lst))
(entdel (last lst))
)
)

<<

Filename: 202652_gt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202780
Tên lệnh: ha
Ứng dụng hàm Grread để chia diện tích
Bác SSG đã có lisp “chia đất” rất hay.
Hàm Grread có nhiều ứng dụng sinh động. Lisp dưới đây là 1 ví dụ: sử dụng hàm Grread để chia diện tích các hình kín ra các phần với tỉ lệ xác định (tương tự lisp “chia đất”).
Ngoài ra, bạn có thể tìm hiểu thêm các hiệu ứng động thú vị của hàm Grread tại đây:
http://xaydungit.vn/...3%BA-v%E1%BB%8B
>>
Bác SSG đã có lisp “chia đất” rất hay.
Hàm Grread có nhiều ứng dụng sinh động. Lisp dưới đây là 1 ví dụ: sử dụng hàm Grread để chia diện tích các hình kín ra các phần với tỉ lệ xác định (tương tự lisp “chia đất”).
Ngoài ra, bạn có thể tìm hiểu thêm các hiệu ứng động thú vị của hàm Grread tại đây:
http://xaydungit.vn/...3%BA-v%E1%BB%8B
http://i1105.photobucket.com/albums/h357/VanHa1/Chia_dien_tich.gif

<<

Filename: 202780_ha.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202800
Tên lệnh: ha
Xin lisp xuất toàn bộ text trong bản vẽ vào file text
Lisp xuất toàn bộ Text/Mtext trên bản vẽ ra file txt cùng tên với bản vẽ.

Filename: 202800_ha.lsp
Tác giả: akay_arch
Bài viết gốc: 202890
Tên lệnh: tdn
Nhờ các cao thủ sửa hộ lisp thống kê tọa độ theo ý muốn
@CD2K44: Bạn hình như vẫn chưa hiểu ý mình, ý mình ví dụ là: một điểm trong file cad của mình có tọa độ khi list kiểm tra là "X=582027.2825 Y=2187655.3823" nhưng mình muốn ghi ra trên bản vẽ là "X=2187655.3823 Y=582027.2825". Bạn xem giúp mình được không.
@ Doan Van Ha: Code của lisp gốc là:

Bạn xem giúp mình với. Cám ơn nhiều.

Filename: 202890_tdn.lsp
Tác giả: gia_bach
Bài viết gốc: 202939
Tên lệnh: bt 10
Lisp ghi bước thép với khoảng cách thép đều nhau

Thêm 1 phương án :

(defun C:bt(/ ctc ss)
(or *ctc* (setq *ctc* 200))
(initget 6)
(setq ctc (getint (strcat"\nNhap buoc thep <" (itoa *ctc*) ">:")) )
(if ctc (setq *ctc* ctc))
(if (setq ss (ssget"_:L" (list (cons 0 "DIMENSION")) ))
(progn
(command "_.undo" "_begin")
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
>>

Thêm 1 phương án :

(defun C:bt(/ ctc ss)
(or *ctc* (setq *ctc* 200))
(initget 6)
(setq ctc (getint (strcat"\nNhap buoc thep <" (itoa *ctc*) ">:")) )
(if ctc (setq *ctc* ctc))
(if (setq ss (ssget"_:L" (list (cons 0 "DIMENSION")) ))
(progn
(command "_.undo" "_begin")
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(vla-put-TextOverride (vlax-ename->vla-object ent)
(strcat (itoa (fix(/ (cdr (assoc 42 (entget ent))) *ctc*)))
"x" (itoa *ctc*) "=<>")) )
(command "_.undo" "_end") (princ) )))
(defun C:10(/ num ss)
(if (setq ss (ssget"_:L"))
(progn
(command "_.undo" "_begin")
(or *num* (setq *num* 15))
(initget 4)
(setq num (getint (strcat"\nNhap color <" (itoa *num*) ">:")) )
(while (not (if num (<= num 256)T) )
(princ "\nGia tri <=256.")
(setq num (getint (strcat"\nNhap color <" (itoa *num*) ">:")) ))
(if num (setq *num* num))
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(vla-put-Color (vlax-ename->vla-object ent)*num* ) )
(command "_.undo" "_end") (princ) )))

<<

Filename: 202939_bt_10.lsp
Tác giả: Tue_NV
Bài viết gốc: 55589
Tên lệnh: gfi
Sửa nhanh kích thước đường thẳng thành chữ Ø mà không phải viết %%C

password của nó là : www.cadviet.com
Tuy nhiên cách thức hoạt động của nó giống như lệnh Ded. Lệnh Ded có thể thêm tiền tố lẫn hậu tố.
Về cách của bạn ghi kích thưóc 12 thì Ø300.80 là do trong nhãn Altnate Units -> Multiplier alt units bạn để số khác 1.
Hãy nhập giá trị bằng 1 trong Multiplier alt units -> bạn sẽ có kết quả là 12 .
Tuy nhiên, đây không phải là kết quả bạn...
>>

password của nó là : www.cadviet.com
Tuy nhiên cách thức hoạt động của nó giống như lệnh Ded. Lệnh Ded có thể thêm tiền tố lẫn hậu tố.
Về cách của bạn ghi kích thưóc 12 thì Ø300.80 là do trong nhãn Altnate Units -> Multiplier alt units bạn để số khác 1.
Hãy nhập giá trị bằng 1 trong Multiplier alt units -> bạn sẽ có kết quả là 12 .
Tuy nhiên, đây không phải là kết quả bạn mong muốn. Cái mong muốn của bạn là Ø12 thôi phải không?
Rất tiếc, CAD không thể làm được chuyện đó được bạn ạ.

Cách nhanh nhất là bạn sử dụng lệnh Ded(dimedit).
Bạn có thể chọn trước DimStyle bằng quickselect hoặc Filter rồi dùng Ded(Dimedit) để điền tiền tố

Hoặc nhanh hơn là khi vừa ghi kích thước xong, sẽ tự động nhập luôn giá trị Ø trước kích thước. Đây là ý của bạn phải không?
Vậy thì bạn sử dụng đoạn Code này. Khi yêu cầu nhập điểm đầu, điểm cuối và đường chân kích thước (giống dimlinear) thì Lisp tự động điền luôn tiền tố Ø trước kích thước

Hẳn bạn đã biết sử dụng Code
Chúc thành công :cheers:
<<

Filename: 55589_gfi.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 202994
Tên lệnh: ha
Lisp kiểm tra xem 1 Curve nhỏ có thể đặt vào trong Curve lớn hay không?
Xuất phát từ yêu cầu tại topic "Lisp phân nhỏ tập hợp chọn bằng cách chia ô", tôi hoàn thiện cho trường hợp tổng quát để lập topic này.
Lisp có chức năng:
- Kiểm tra xem 1 Curve kín (lớn) có thể chứa được Curve kín (nhỏ) hay không.
- Khái niệm "chứa" được hiểu là: Curve nhỏ nằm trong Curve lớn; Curve lớn không cắt Curve nhỏ; Curve nhỏ không chứa hoặc cắt bất...
>>
Xuất phát từ yêu cầu tại topic "Lisp phân nhỏ tập hợp chọn bằng cách chia ô", tôi hoàn thiện cho trường hợp tổng quát để lập topic này.
Lisp có chức năng:
- Kiểm tra xem 1 Curve kín (lớn) có thể chứa được Curve kín (nhỏ) hay không.
- Khái niệm "chứa" được hiểu là: Curve nhỏ nằm trong Curve lớn; Curve lớn không cắt Curve nhỏ; Curve nhỏ không chứa hoặc cắt bất cứ đối tượng nào trong Curve lớn.
- Kết quả trả về: các vị trí có thể đặt Curve nhỏ (nếu có).
- Lisp này phù hợp để tìm các vị trí trên mặt bằng nhằm có thể bố trí 1 công trình nào đó.
Chú ý đọc thêm các hướng dẫn sử dụng trong lisp.

<<

Filename: 202994_ha.lsp
Tác giả: phamngoctukts
Bài viết gốc: 114750
Tên lệnh: arspl
ARrray theo kiểu MEasure (DIVide)

Của bạn đây. Mình mới làm cho bạn theo trục x. Bạn xem có đúng ý bạn không nhé.

Filename: 114750_arspl.lsp
Tác giả: phamngoctukts
Bài viết gốc: 114808
Tên lệnh: arspl
ARrray theo kiểu MEasure (DIVide)

Bạn dùng thử code này xong cho ý kiến nhé

Filename: 114808_arspl.lsp

Trang 94/330

94