Jump to content
InfoFile
Tác giả: aliosa
Bài viết gốc: 85149
Tên lệnh: tag
Viết lisp theo yêu cầu [phần 2]
Xin nhờ các bạn chỉnh giúp mình lisp sau:
Minh đang viết một lisp để lấy các giá trị TAG của ATT trong block.
Nội dung:

Nhưng khi chạy thì em thấy có gì đó không ổn. Vậy nhờ các bạn chỉnh lại giúp mình !

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


Chào bạn aliosa,
Cái lisp của bạn mình chưa hiểu hết nên không dám chỉnh sửa gì cả. Bạn thử xài cái lisp này xem có thỏa mãn yêu cầu của bạn không nhé. Nếu có gì chưa ổn hãy post lên diễn đàn và mọi người sẽ xem và sửa chữa lại bạn nhé.
http://www.cadviet.com/upfiles/2/laythuoctinhblock.lsp

Chúc bạn vui.

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


Bạn xem đoạn lisp sau đây, mình đã bổ sung theo yêu cầu của bạn. Không biết đã đúng chưa, bạn chạy thử nhé.

Có thể kết quả in ra là thừa so với yêu cầu của bạn, nếu vậy những cái thừa bạn có thể lược bớt nhé. Chỉ cần xóa dòng code (princ "các kết quả thừa đi") bạn ạ
Ví dụ bạn muốn bỏ cái list của các giá trị thuộc tính thì bạn xóa dòng code (princ...
>>

Bạn xem đoạn lisp sau đây, mình đã bổ sung theo yêu cầu của bạn. Không biết đã đúng chưa, bạn chạy thử nhé.

Có thể kết quả in ra là thừa so với yêu cầu của bạn, nếu vậy những cái thừa bạn có thể lược bớt nhé. Chỉ cần xóa dòng code (princ "các kết quả thừa đi") bạn ạ
Ví dụ bạn muốn bỏ cái list của các giá trị thuộc tính thì bạn xóa dòng code (princ attvallst).
Trong đoạn lisp trên thực ra bạn có thể đưa các lệnh in kết quả ra sau vòng lặp while vì có thể chả cần in chúng ra giữa chừng khi chưa chạy xong làm chi. Tuy nhiên nếu để như vậy thì khi bạn chạy debug sẽ dễ phát hiện lỗi hơn.
Lisp này là mình mót được của cụ Jeffy Sanders rồi sửa lại tí chút thôi mà.
Chúc bạn vui.
<<

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

Lisp này Tue_NV đã từng viết cho truongthanh rồi. Chỉ cần sửa lại 1 chút là được.
Thử nhé :


@svba : Dữ liệu input mình định nhập theo cách nào?
Nhìn vào file .dwg mà svba đã upload có thể hiểu được ý định của em. Nhưng nhìn hình thứ 3 bên phải thì mấy cái hình phức tạp được vẽ như thế nào?
Svba có thể nói rõ hơn về cái dữ liệu Input được không?

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

Chào svba1608
Anh thấy Polyline đó bo góc chứ không phải vát góc. Hai khái niệm vát góc và bo góc đó khác nhau.

Lisp sửa lại cho em đây :
Command: dstt
Chon ky tu can them phia truoc : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Chon ky tu can them phia sau : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Nhap so bat dau < 2.00 > : 1
gia so < + / -...
>>

Chào svba1608
Anh thấy Polyline đó bo góc chứ không phải vát góc. Hai khái niệm vát góc và bo góc đó khác nhau.

Lisp sửa lại cho em đây :
Command: dstt
Chon ky tu can them phia truoc : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Chon ky tu can them phia sau : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Nhap so bat dau < 2.00 > : 1
gia so < + / - > : < 1.00 > : 2

So chu so thap phan : 2

Chon so can thay doi :
Chon so can thay doi :

<<

Filename: 88037_dstt.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 88639
Tên lệnh: lbd
Viết lisp theo yêu cầu [phần 2]


Svba dùng lisp LBD (Lập Bản Đồ), chương trình sẽ yêu cầu Svba pick chọn 3 điểm. 2 điểm đầu (p1, p2) để xác định miền chữ nhật chứa bản đồ, điểm thứ 3 (p3) là tọa độ để chèn bảng. Các vấn đề còn lại lisp sẽ tự hiểu, giám thị không cần giải thích gì thêm :cheers: .
>>


Svba dùng lisp LBD (Lập Bản Đồ), chương trình sẽ yêu cầu Svba pick chọn 3 điểm. 2 điểm đầu (p1, p2) để xác định miền chữ nhật chứa bản đồ, điểm thứ 3 (p3) là tọa độ để chèn bảng. Các vấn đề còn lại lisp sẽ tự hiểu, giám thị không cần giải thích gì thêm :cheers: .
http://www.cadviet.com/upfiles/2/hdsd.png



Lưu ý:
- Trong lúc lisp chạy Svba đừng nhấn Esc, hãy kiên nhẫn chờ lisp chạy hết, tránh lỗi.
- Trong bảng kết quả, chữ __err___ là cell có chữ nhưng lisp không tính được diện tích, Svba phải tính lại bằng tay. chữ ____ nghĩa là miếng đất đó không có mảnh theo cell (ví dụ thiếu mảnh e thì tại cell e sẽ là ____).
- Sau khi lisp chạy xong, Svba dùng lệnh Line để kẻ lại bảng theo text đã có.
<<

Filename: 88639_lbd.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 88702
Tên lệnh: lbd
Viết lisp theo yêu cầu [phần 2]

Sorry,

Lisp dưới đây sẽ khắc phục nhược điểm trên (lỗi xảy ra do layer hiện hành là sttkhu):


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

Chào Svba1608,
Hy vọng rằng cái này đúng ý bạn
http://www.cadviet.com/upfiles/2/svba.lsp

Lệnh chạy lisp là gkc. Khi chạy lisp, mỗi khi bạn trả lời "y" và nhấn enter, lisp sẽ dừng để bạn pick hai điểm theo ý bạn và lisp sẽ ghi kích thước này vào bảng, khi muốn dừng bạn trả lời "n" và nhấn enter khi lisp hỏi hoặc chỉ cần nhấn enter.
Chúc bạn vui.

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


Chào bác Tue_nv và bạn svba1608,
Ý 1 và 2 của bác, mình nhất trí, song có điều sau khi nhập khoảng cách lại phải đặt chế độ osnap về 0.
Ý 3 của bác mình chưa hiểu rõ, nếu là để thực hiện yêu cầu cho phép hai kiểu nhập khoảng cách khác nhau nhừ bạn svba đề nghị thì theo mình có thể dùng hàm điều kiện if sẽ hay hơn bác ạ.
Gửi bác và bạn SVBA1608 cái lisp mình đã sửa...
>>

Chào bác Tue_nv và bạn svba1608,
Ý 1 và 2 của bác, mình nhất trí, song có điều sau khi nhập khoảng cách lại phải đặt chế độ osnap về 0.
Ý 3 của bác mình chưa hiểu rõ, nếu là để thực hiện yêu cầu cho phép hai kiểu nhập khoảng cách khác nhau nhừ bạn svba đề nghị thì theo mình có thể dùng hàm điều kiện if sẽ hay hơn bác ạ.
Gửi bác và bạn SVBA1608 cái lisp mình đã sửa theo ý như trên. Mong rằng nó giúp ích được cho bạn SVBA1608.

Cách dùng tương tự lisp trước nhưng lưu ý khi lisp hỏi kiểu nhập khoảng cách, "1" là kiểu nhập bằng pick hai điểm, "2" là kiểu nhập bằng cách chọn đối tượng.
Do chỉ có hai kiểu nhập nên nếu chọn kiểu 2 bạn có thể nhấn enter ngay khi lisp hỏi mà không cần thiết phải nhập ký tự 2. Nhưng nếu muốn nhập kiểu 1 thì bắt buộc phải nhập ký tự 1 trước khi nhấn enter.
Chúc mọi người luôn mạnh giỏi và yêu đời.
@ SVBA1608: Cái lisp ghi diện tích vào ngay trong bản vẽ mình vẫn chưa gỡ được vì không hiểu tại sao nó lại cho kết quả khác với khi lập bảng. Mong bạn thông cảm. Hy vọng diễn đàn sẽ có người gỡ giúp cái xơ to tổ bố này. Hề hề hề, đau răng quá.....
<<

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

Sorry svba, Thiep đã xóa 3 dòng khi đã hoàn chỉnh bây giờ thì chép lại cho svba đây:

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

Check thử cho svba đây :
http://www.cadviet.com/upfiles/2/a_4_1.dwg
Khi sử dụng Lisp của bác Thiep thì các đường nối 2 điểm nút phải cắt qua Text Nút, nếu không cắt thì không thử được.
Hơn nữa -> để Lisp chạy đúng chiều mũi tên (từ điểm nút này đến điểm nút kia) thì nút đầu phải trùng với Startpoint; nút cuối phải trùng với Endpoint.

Lisp sau sẽ giúp svba KTRA những...
>>

Check thử cho svba đây :
http://www.cadviet.com/upfiles/2/a_4_1.dwg
Khi sử dụng Lisp của bác Thiep thì các đường nối 2 điểm nút phải cắt qua Text Nút, nếu không cắt thì không thử được.
Hơn nữa -> để Lisp chạy đúng chiều mũi tên (từ điểm nút này đến điểm nút kia) thì nút đầu phải trùng với Startpoint; nút cuối phải trùng với Endpoint.

Lisp sau sẽ giúp svba KTRA những đường PLINE nối điểm nút, Nếu PLINE nối điểm đầu và điểm cuối có 2 TEXT thuộc LAYER sttkhu thì đúng, ngược lại đó là những PLINE chưa đúng, đồng thời LISP sẽ đánh point điểm đầu của PLINE màu xanh, PLINE điểm cuối màu đỏ để svba dễ dàng kiểm tra.
svba thử nhé :

PS : Nếu em đã lỡ đánh số thứ tự điểm nút không cùng chiều với mũi tên thì có thể sử dụng Lisp đổi chiều PLINE của bác Hoành đã viết trên diễn đàn mình.
Chúc thành công :D
<<

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

Chào svba, A Thiep thấy có sự khác nhau về câu hỏi: lisp của anh hỏi: "Chon do cao text <20> :"
Còn lisp svba chạy thì hỏi: "Chon do cao text : " là sao vậy sao kà!
Thôi thì svba tạm thử lại lisp svb.lsp này xem. Nên nhớ cài Express tool nhé

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

Chào bạn Sucuph,
Bạn xài thử lisp này xem sao nhé. Mình chạy thử với LWPOLYLINE thì Ok, nhưng chưa thử với POLYLINE.


Nếu có gì chưa ổn hãy post lên nhé. Hề hề hề

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

Chào svba1608, Lisp này sẽ giúp cho svba1608 thêm mũi tên tạo dốc nước chảy. Tuy nhiên để cho lisp chạy 1 cách đầy đủ không bỏ sót thì các đường bao "ranh thửa" phải là đường kín (closed). Để biết 1 pline có closed hay không hãy pick chúng và xem cửa sổ property tại mục closed nó báo YES hay NO nếu NO thì chỉnh lại YES. Ngoài ra, vì chiễu mũi tên sẽ hướng từ điểm dóng của text ra đến...
>>

Chào svba1608, Lisp này sẽ giúp cho svba1608 thêm mũi tên tạo dốc nước chảy. Tuy nhiên để cho lisp chạy 1 cách đầy đủ không bỏ sót thì các đường bao "ranh thửa" phải là đường kín (closed). Để biết 1 pline có closed hay không hãy pick chúng và xem cửa sổ property tại mục closed nó báo YES hay NO nếu NO thì chỉnh lại YES. Ngoài ra, vì chiễu mũi tên sẽ hướng từ điểm dóng của text ra đến điểm gần nhất của pline đường bao, nên các text A, B, C, D.. phải nằm gần đường ống hơn.

<<

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

Hề hề hê,
Mình chạy thử rồi, nó đây nè bạn:
Kết quả chạy:
http://www.cadviet.com/upfiles/2/lb2.jpg
http://www.cadviet.com/upfiles/2/lb2.jpg
Còn đây là cái lisp đã sửa nè:


Hề hề hề, bạn xem xem có giống cái bạn đã sửa không hỉ????

Filename: 90346_lb2.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 90849
Tên lệnh: imf
Viết lisp theo yêu cầu [phần 2]

Vừa post xong thì nghĩ lại, thấy cũng không phức tạp lắm.

Phiphi thử lisp cải tiến dưới đây


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

Chào TRUNGNGAMY, Lisp sẽ đưa ra 1 list các ename các đối tượng chứa trong block. Bạn tiếp tục khai thác nhé:

Filename: 91939_exp.lsp
Tác giả: gia_bach
Bài viết gốc: 95949
Tên lệnh: tag link
viết lisp thống kê bản vẽ

Gửi Tue_NV Lisp tạo Link field thuộc tính đầu tiên của Block Att

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

Bạn chạy thử Lisp này :
Xuất tất cả tên các Layer có trong bản vẽ ra một file Text.

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

Sony hãy thử với đoạn code này.
Đây là Lisp nội suy cao độ Z của 1 điểm P khi biết P1(x1,y1,z1) và P2(x2,y2,z2) với z1 và z2 nhập từ bàn phím và điều kiện P phải nằm trên P1P2 (P có thể nằm trong hoặc nằm ngoài đoạn P1P2

Filename: 100057_noisuy.lsp

Trang 66/330

66