Jump to content
InfoFile
Tác giả: Doan Van Ha
Bài viết gốc: 186686
Tên lệnh: ha
Lisp dim các block không thẳng hàng!
Thử cái này xem. Có gì y/c sẽ sửa lại. Code nhanh nên thông cảm.

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

Chào nguyenh001, sau khi bạn viết mã lisp để copy các đối tượng xong, bạn dùng mã lisp sau đây để chọn lại các đối tượng vừa được copy:
(setq sscopy (ssget "_P"))

Filename: 83889_thangcap.lsp
Tác giả: ketxu
Bài viết gốc: 186691
Tên lệnh: test
Tự động dim Block


- Tạo Dim giữa các Block trùng tên.
- Đi theo đường ngắn nhất tính từ Block đầu tiên

Filename: 186691_test.lsp
Tác giả: thanhduan2407
Bài viết gốc: 186720
Tên lệnh: cvt3d
Xin lisp chuyển từ Text 2d sang 3d và ngược lại

Ngồi rảnh mò mẫm lại mấy cái lisp cũ và mò lại topic có trong diễn đàn thấy có nhưng không có ai trả lời nên mạo muội gửi cho bạn. Những ai cần dùng thì ô sờ kê.
Lisp chuyển text 2D sang 3D. Còn ngược lại thì dùng lệnh flattend của Cad.
(defun Diemchuan (ent)
(setq Ma10 (cdr (assoc 10 (entget ent))))
(setq Ma11 (cdr (assoc 11 (entget ent))))
(setq X11 (car Ma11))
(setq Ma71 (cdr...
>>
Ngồi rảnh mò mẫm lại mấy cái lisp cũ và mò lại topic có trong diễn đàn thấy có nhưng không có ai trả lời nên mạo muội gửi cho bạn. Những ai cần dùng thì ô sờ kê.
Lisp chuyển text 2D sang 3D. Còn ngược lại thì dùng lệnh flattend của Cad.
(defun Diemchuan (ent)
(setq Ma10 (cdr (assoc 10 (entget ent))))
(setq Ma11 (cdr (assoc 11 (entget ent))))
(setq X11 (car Ma11))
(setq Ma71 (cdr (assoc 71 (entget ent))))
(setq Ma72 (cdr (assoc 72 (entget ent))))
(if (or (and (= Ma71 0) (= Ma72 0) (= X11 0))
(and (= Ma71 0) (= Ma72 3) )
(and (= Ma71 0) (= Ma72 5) )
)
Ma10
Ma11
)

(defun C:CVT3D (/ ss Z_value temp koord)
(command "undo" "be")
(command "osnap" "off")
(setq ss (ssget (list (cons 0 "TEXT"))))
(setq ss (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss))))
(foreach item ss
(setq temp (entget item))
(setq Tdo (Diemchuan item ))
(setq Caodo (cdr (assoc 1 temp))
h (cdr (assoc 40 temp))
Pnt (list (car Tdo)
(cadr Tdo)
(atof caodo)
)
)
(entdel item)
;;; (command "text" Pnt h 0 Caodo)
;;; (command "text" "J" "MC" Pnt h 0 Caodo)
(entmake (list (cons 0 "TEXT") (cons 1 Caodo) (cons 10 Pnt) (cons 40 h)))
)
(command "undo" "end")
(princ)

)


)

P/s: Ngồi thử từng kiểu justify nên làm theo cách ấy. Ai có ý kiến thì xin chỉ giáo. :mellow:
<<

Filename: 186720_cvt3d.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 186732
Tên lệnh: dimblk
Lisp dim các block không thẳng hàng!
<p></p>
<p>Hề hề hề,</p>
<p>Nếu đã có đường dẫn thì bạn thử dùng cái này coi có ổn kho6ngf nhé.</p>
<p></div>
<div>Chúc bạn vui.</div>

Filename: 186732_dimblk.lsp
Tác giả: thanhduan2407
Bài viết gốc: 146693
Tên lệnh: innhanh
Lisp in nhiều bản vẽ trong model mà chỉ cần 1 layout

Lisp ứng dụng với các bản vẽ có cùng một khổ giấy, cùng tỷ lệ và kích thước giống nhau.
Sau đây là hướng dẫn sử dụng lisp.
Giả sử ta có rất nhiều bản vẽ (Giả sử in A4, tỷ lệ 1:1)
http://www.cadviet.com/upfiles/3/1_45.jpg
Copy 1 khung trống ra ngoài và dùng polyline (layer ko in) để nối các điểm góc trái dưới khung in (như hình vẽ).
Vào trong Page Setup Manager … để cài...
>>
Lisp ứng dụng với các bản vẽ có cùng một khổ giấy, cùng tỷ lệ và kích thước giống nhau.
Sau đây là hướng dẫn sử dụng lisp.
Giả sử ta có rất nhiều bản vẽ (Giả sử in A4, tỷ lệ 1:1)
http://www.cadviet.com/upfiles/3/1_45.jpg
Copy 1 khung trống ra ngoài và dùng polyline (layer ko in) để nối các điểm góc trái dưới khung in (như hình vẽ).
Vào trong Page Setup Manager … để cài đặt các thông số máy in hay khổ giấy như: chọn máy in (factory), tỷ lệ 1:1, khổ giấy A4, lực nét, màu sắc….
http://www.cadviet.com/upfiles/3/2a.jpg
http://www.cadviet.com/upfiles/3/2_23.jpg
Vào trong layout, xóa cái cửa số liên kết với model đó.Vào trong Model copy 1 khung cho sang layout và đặt cho nó chuẩn đẹp.http://www.cadviet.com/upfiles/3/3_16.jpg
(P/s: Không nên scale khung lại, sẽ bị sai đó. Nên tạo khung nhỏ hơn với khổ giấy 1 chút. Scale sẽ biến dạng. Đã phát hiện ra sai chỗ đó nên thành thật xin lỗi mọi người)
Dùng lệnh Mview để tạo một cửa sổ mới vừa khít với cái khung vừa copy sang
http://www.cadviet.com/upfiles/3/4_7.jpg
Chui vào trong cửa sổ layout bằng cách gõ lệnh MSPACE và zoom vừa khít với với cửa sổ Mview. Hoặc dùng đoạn lisp sau để zoom cái khung đầu tiên vừa khít.

Dùng lệnh “innhanh”, lúc này lệnh nhảy vào cửa sổ layout. Bạn chú ý ko được zoom to thu nhỏ nó mà chỉ kích chọn vào Polyline đó. (Mẹo: Để cái khung ngoài cùng nó ở dưới để trong bản vẽ đầu tiên có polyline hiển thị để ko phải zoom, zoom là sai). Bây giờ bạn chỉ cần ra máy in ngồi chờ bản vẽ thôi. Trên đây mình nói thì dài dòng nhưng trên thực tế ko có gì phức tạp lắm. Vì thời gian có hạn nên sau này mình cải tiến thêm vào số hiệu bản vẽ (Lisp của các bác Cadviet trên diễn đàn, nếu ai chỉnh sửa ngay thì giúp mình cải tiến luôn nhé). Để tiện thực hiện mình sẽ post video lên đây để các bạn xem. Cám ơn các bạn đã chú ý đọc.
P/s: http://www.cadviet.c...iles/3/hdsd.doc
Link Video:
http://www.4shared.c...NN/Cadviet.html
<<

Filename: 146693_innhanh.lsp
Tác giả: Thaistreetz
Bài viết gốc: 186937
Tên lệnh: ars
thiết lập danh sách tỷ lệ vẽ mặc định (ScaleList)

Khi vẽ với nhiều tỷ lệ trên 1 bản vẽ, sau 1 thời gian danh sách tỷ lệ vẽ dầy lên, điều này khiến cho cad chậm đi 1 chút. vẽ có cảm giác ì ì. khi đó chúng ta thường dùng lệnh ScaleListEdit rồi reset danh sách tỷ lệ lại theo mặc định của cad. tuy nhiên danh sách này cung cấp rất nhiều tỷ lệ mà chúng ta không dùng đến.
Vì không có cách chi để can thiệp vào danh sách mặc định này để...
>>
Khi vẽ với nhiều tỷ lệ trên 1 bản vẽ, sau 1 thời gian danh sách tỷ lệ vẽ dầy lên, điều này khiến cho cad chậm đi 1 chút. vẽ có cảm giác ì ì. khi đó chúng ta thường dùng lệnh ScaleListEdit rồi reset danh sách tỷ lệ lại theo mặc định của cad. tuy nhiên danh sách này cung cấp rất nhiều tỷ lệ mà chúng ta không dùng đến.
Vì không có cách chi để can thiệp vào danh sách mặc định này để thay đổi nó nên mình viết lisp này để thiết lập lại danh sách tỷ lệ theo nhu cầu của người dùng.
(defun c:ars (/ dic lst en)
(setq lst '("1:1" "1:10" "1:15" "1:20" "1:25" "1:50" "1:75" "1:100" "1:200" "1:500" "1:1000"))
(if (setq dic (dictsearch(namedobjdict) "ACAD_SCALELIST"))
(foreach x dic
(if (and (= 350 (car x)) (not (member (cdr (assoc 300 (entget (setq en (cdr x))))) lst))) (entdel en))))
(princ))
(c:ars)
- Các bạn chỉ việc add lisp này vào startup suite là mỗi lần mở bản vẽ, cad sẽ thiết lập danh sách các tỷ lệ vẽ thường dùng cho bạn. lâu lâu muốn reset lại danh sách cho nhẹ bản vẽ thì gõ lệnh ARS.
- Tùy theo nhu cầu, người dùng có thể tự chỉnh sửa danh sách tỷ lệ trong code trên cho phù hợp.
PS: Chỉ dùng cho các bản cad 2008 trở lên (tất nhiên là thế rồi :D)
<<

Filename: 186937_ars.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 187164
Tên lệnh: ha
Lisp offset nhiều đường tròn

Tôi cũng đang nghi bạn scale circle có R<=15 thành circle có R=10. Còn nếu muốn offset thì thử cái này xem!

Filename: 187164_ha.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 187167
Tên lệnh: ha
Lisp offset nhiều đường tròn

Biết mà! Đây bạn!
P/S: đã sửa lỗi do sơ ý quên hàm (vl-load-com)

Filename: 187167_ha.lsp
Tác giả: phamngoctukts
Bài viết gốc: 110306
Tên lệnh: 5
Nhờ các Bác chỉ hộ dùm

bạn load đoạn code sau khi muốn bật tắt ortho bằng phím 5

Filename: 110306_5.lsp
Tác giả: Tue_NV
Bài viết gốc: 122434
Tên lệnh: sd
Viết lisp theo yêu cầu [phần 2]

Của bạn đây :

Filename: 122434_sd.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 39878
Tên lệnh: cbl1
insert block theo khoảng cách cho trước và nằm giữa hai điểm

Lệnh là CBL1 dưới đây giống CBL ngoại trừ trường hợp khi khoảng cách giữa 2 điểm không chẵn với khoảng cách giữa hai block thì chương trình sẽ trừ khoảng trống hai bên bằng nhau:

Filename: 39878_cbl1.lsp
Tác giả: hdg2318
Bài viết gốc: 106386
Tên lệnh: tichso
Viết lisp theo yêu cầu [phần 2]

hề hề, làm gì mà bác nóng tính thế. em up cái hình lên đây, hy vọng biểu đạt được ý nguyện của mình
http://www.cadviet.com/upfiles/3/untitled_1.png
thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng...
>>

hề hề, làm gì mà bác nóng tính thế. em up cái hình lên đây, hy vọng biểu đạt được ý nguyện của mình
http://www.cadviet.com/upfiles/3/untitled_1.png
thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng hiểu sao lúc được lúc không, lúc lại cho ra KQ ko đúng)
nếu tích số nhận xong là số nguyên, nó không có ".0"


<<

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

Tiếp tục phát triển ý của bạn mình đã làm được thế này rồi. Chú ý nét tim phải là layer _tim.
http://www.cadviet.com/upfiles/3/tuong.jpg
Còn việc fillet các cạnh ngoài cùng mình đang chưa biết làm thế nào (chỗ vòng tròn đỏ). Bạn nào có thể chí giúp mình vấn đề này không?

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

Hề hề hề,
Mạn phép bác phamngoctukts, sửa giùm bạn hdt4151 cái lisp bác đã viết để bạn ấy đỡ tủi.
Bạn hdt4151 ơi, mình làm cái này chưa hẳn đã đúng với cái cấu trúc bạn quy định như hình như nó cũng ra kết quả như bạn mong muốn, bạn xài thử coi sao:


Chúc bạn vui.

@Bác phmangoctukts: Bác rào dậu lisp kỹ thế, đóng cái thằng (defun c:tdd .....)) những...
>>

Hề hề hề,
Mạn phép bác phamngoctukts, sửa giùm bạn hdt4151 cái lisp bác đã viết để bạn ấy đỡ tủi.
Bạn hdt4151 ơi, mình làm cái này chưa hẳn đã đúng với cái cấu trúc bạn quy định như hình như nó cũng ra kết quả như bạn mong muốn, bạn xài thử coi sao:


Chúc bạn vui.

@Bác phmangoctukts: Bác rào dậu lisp kỹ thế, đóng cái thằng (defun c:tdd .....)) những hai lượt cơ ạ.... Hề hề hề......
@hdt4151: Cái vụ chuyển hệ tọa độ thì bạn tự làm lấy nhé. Nó dựa trên nguyên tắc lấy tọa độ tương đối thôi mà. Bạn chịu khó suy nghĩ một tí là ra thôi. Làm nó không khó nhưng mình thấy nên để bạn tự suy nghĩ thì tốt hơn. Hề hề hề.....

Bài viết được sửa bởi Phạm Thanh Bình ngày 3/10/2010.
<<

Filename: 110556_tdd.lsp
Tác giả: vantuan18nd
Bài viết gốc: 187383
Tên lệnh: tl3
Đo khoảng cách hai điểm và ghi kết quả ra nơi minh chọn
Mình có nhờ Anh Vo Quang Tue ( hay Võ Quang Tuệ gì gì đấy :mellow: ) làm cho Lisp đo khoảng cách rất hay như sau
-chọn điểm thứ nhất
-chọn điểm thứ hai
-Kết quả thay cho một số có sẵn

(defun C:TL3( / ss L te p1 p2)

(while (and (setq p1 (getpoint "\n Chon diem thu nhat :"))
>>
Mình có nhờ Anh Vo Quang Tue ( hay Võ Quang Tuệ gì gì đấy :mellow: ) làm cho Lisp đo khoảng cách rất hay như sau
-chọn điểm thứ nhất
-chọn điểm thứ hai
-Kết quả thay cho một số có sẵn

(defun C:TL3( / ss L te p1 p2)

(while (and (setq p1 (getpoint "\n Chon diem thu nhat :"))
(setq p2 (getpoint p1 "\n Chon diem thu hai :"))
)
(setq L (distance p1 p2))


(setq te (entget(car(entsel"\n Chon Text de gan ket qua :")))
te (subst (cons 1 (rtos L 2 2)) (assoc 1 te) te))
(entmod te)
)
)




-> Enter để kết thúc lệnh

- Bây giờ mình muốn kết quả tìm được phải ghi ra nơi mình chọn, không phải là thay cho một số có sẵn như trước.

Nhờ mọi người sửa giúp.
<<

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

Bạn thử cái này nhé. Vùng cắt là hình chữ nhật khi nhập khoảng cách thì hình chữ nhật sẽ rộng thêm ra còn mạch định là hình chữ nhật bao ngoài thửa đất (khi khoảng cách bằng 0). Làm như vậy để trách trưởng hợp khi bạn nhập kích thước hình chữ nhật nhỏ hơn thửa đất thì lisp chạy bị lỗi.

Filename: 121440_cthua.lsp
Tác giả: Tue_NV
Bài viết gốc: 187411
Tên lệnh: tl3
Tác giả: vantuan18nd
Bài viết gốc: 187401
Tên lệnh: 12
Tính cao độ một điểm bất kỳ khi có cao độ cho trước

Cụ thể là cũng đã tìm ra được một cái Lisp tương tự như thế. Nhưng không giống trường hợp của mình.
Cái Lisp tìm được nó thế này cơ :


(defun c:12 ( / pt p1 p01 p02 ent ecopy elev elev1 offset etype txth)
(setvar "osmode" 1)
(command "ucs" "w")
(setq pt (getpoint "\nPick reference point: ")
ent (entget(car(entsel "\nSelect elevation text:...
>>

Cụ thể là cũng đã tìm ra được một cái Lisp tương tự như thế. Nhưng không giống trường hợp của mình.
Cái Lisp tìm được nó thế này cơ :


(defun c:12 ( / pt p1 p01 p02 ent ecopy elev elev1 offset etype txth)
(setvar "osmode" 1)
(command "ucs" "w")
(setq pt (getpoint "\nPick reference point: ")
ent (entget(car(entsel "\nSelect elevation text: ")))
etype (cdr(assoc 0 ent))
txth (cdr(assoc 40 ent))
)
(if (/= etype "TEXT") (progn
(princ "\nThe elevation selection must be a TEXT entity")
(exit))
(setq elev (atof(cdr(assoc 1 ent))))
)
(command "layer" "m" "UNSUITABLE" "")
(while (setq p1(getpoint "\nPick offset point"))
(setq elev1 (+ elev (- (cadr p1) (cadr pt)))
offset (abs(- (car p1) (car pt)))
p01 (polar p1 (* 3.0 (/ pi 2)) txth)
p01 (polar p01 pi (* 0.9 txth))
p02 (polar p01 0 (* 1.6 txth))
ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "" (rtos elev1 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p01) (cadr p01) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(setq ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "" (rtos offset 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p02) (cadr p02) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(princ "\nPress ESC or SPACE bar to cancel")
)
(end_task)
)


-chọn điểm đã biết cao độ
-click chọn giá trị đã biết đó
-Chọn điểm cần tìm cao độ
Kết quả này khi tìm được nó ghi luôn tại điểm mình chọn
Bây giờ ý mình thế này:
- Sau khi chọn điểm cần tìm cao độ, kết quả sẽ ghi ra nơi mình muốn ghi
Mình cũng đã tìm nhiêu rùi, không được nên mới lập topic. Thông cảm nha :mellow:
<<

Filename: 187401_12.lsp
Tác giả: Tue_NV
Bài viết gốc: 187391
Tên lệnh: tl3
Đo khoảng cách hai điểm và ghi kết quả ra nơi minh chọn

Tue_NV là nick của Võ Quang Tuệ. Võ Quang Tuệ lập ra nick Tue_NV .. hề hề
Yêu cầu của bạn đây :

Bạn chú ý : Text trong trường hợp mà bạn pick chọn lấy theo Style hiện hành
Tue_NV đã lập ra 2 trường hợp :
Bạn thích pick vào Text thì gõ T
thích chọn điểm chèn cho Text thì pick chọn điểm chèn cho Text

Đúng ý rồi nhé

Filename: 187391_tl3.lsp

Trang 72/301

72