Jump to content
InfoFile
Tác giả: Tue_NV
Bài viết gốc: 53580
Tên lệnh: sam sduong
Viết Lisp theo yêu cầu

Bạn dùng thử Code này xem :

Chúc thành công :cry:

Filename: 53580_sam_sduong.lsp
Tác giả: Tue_NV
Bài viết gốc: 53705
Tên lệnh: xscale xsc
Cần giúp về Lisp Scale 1 chiều !


Đây là đoạn Code Scale 1 chiều, Tue_NV đã cải tiến lại với lựa chọn thêm tham số R giống như Scale 2 chiều. Các bạn sử dụng và cho biết ý kiến thêm để Tue_NV hoàn thiện nhé.
Cảm ơn các bạn

Filename: 53705_xscale_xsc.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 53447
Tên lệnh: gb
Tác giả: bemove
Bài viết gốc: 5352
Tên lệnh: s2p
Lisp tăng số đường gấp khúc của polyline (spl--pl)
Đây là lisp convert Spline thành Pline

Filename: 5352_s2p.lsp
Tác giả: Tue_NV
Bài viết gốc: 53406
Tên lệnh: are
lisp tính diện tích 1 hình vẽ kín mà mình chỉ cần pick


Đây là đoạn Code tính diện tích của hình đa giác kín bị khoét n lỗ rỗng ở giữa. Số lỗ rỗng n bị khoét do user nhập vào. Nếu không có lỗ rỗng thì n =0
Số n lỗ rỗng và đa giác ngoài được tạo bởi lệnh boundary tạm thời Tue_NV chưa tìm được cách nào để có thể đếm được đối tượng được sinh ra bởi lệnh boundary.
Mình chỉ biết một cách là dùng ssget với lựa chọn...
>>

Đây là đoạn Code tính diện tích của hình đa giác kín bị khoét n lỗ rỗng ở giữa. Số lỗ rỗng n bị khoét do user nhập vào. Nếu không có lỗ rỗng thì n =0
Số n lỗ rỗng và đa giác ngoài được tạo bởi lệnh boundary tạm thời Tue_NV chưa tìm được cách nào để có thể đếm được đối tượng được sinh ra bởi lệnh boundary.
Mình chỉ biết một cách là dùng ssget với lựa chọn là all trước khi tạo đa tuyến bằng lệnh boundary. Và là dùng ssget với lựa chọn là all sau khi tạo đa tuyến bằng lệnh boundary. Sau đó dùng hàm sslength đếm số đối tượng sau khi tạo (boundary) trừ đi số đối tượng trước khi tạo (boundary) thì ra được số đối tượng đa tuyến tạo bởi boundary.

Đây là đoạn Code :

Các bác có biết tìm số đối tượng được sinh ra bởi lẹnh Boundary thì xin trợ giúp cho Tue_NV ở đây :
http://www.cadviet.com/forum/index.php?sho...amp;#entry53407
<<

Filename: 53406_are.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52821
Tên lệnh: n2t
nhập 2 text

Chào bạn thangkho,
Của bạn đây, nhưng bạn lưu ý những điều bác tdvn đã post. Mình đã chạy thử với cái bản vẽ của bạn post thì OK, nhưng với các bản vẽ mà người làm nhập text cao độ không theo quy luật như bản vẽ bạn post là thua đấy. Vì mình còn non nên chưa xử lý được tình trạng như bác tdvn đã nêu. Mình sẽ nghiên cứu thêm, nếu tìm ra phương pháp khả dĩ sẽ trao đổi...
>>

Chào bạn thangkho,
Của bạn đây, nhưng bạn lưu ý những điều bác tdvn đã post. Mình đã chạy thử với cái bản vẽ của bạn post thì OK, nhưng với các bản vẽ mà người làm nhập text cao độ không theo quy luật như bản vẽ bạn post là thua đấy. Vì mình còn non nên chưa xử lý được tình trạng như bác tdvn đã nêu. Mình sẽ nghiên cứu thêm, nếu tìm ra phương pháp khả dĩ sẽ trao đổi với bạn sau.
Cái lisp này chạy hết bản vẽ của bạn mất chừng 1phút hơn, Mình vẫn dựa trên suy luận cũ và chỉ bổ sung phần chọn điểm đặt text mà thôi. Để làm điều này mình dựa trên các điểm mốc trên lớp TEXTCAODOCOC của bạn có cùng tọa độ y với các text cao độ trên lớp TEXTCAODOMIA. Do vậy nếu như với các bản vẽ khác mà người vẽ không làm đúng quy luật này thì chắc lisp này cũng thua luôn. Do mình không phải dân đo dạc bản đồ nên không hiểu nhiều về công việc của bạn, chỉ tự suy luận từ bản vẽ bạn post để làm lisp thôi nên có thể chưa đúng ý bạn lắm. Bạn có thể tham khảo và dựa vào cái lisp của mình để cải tạo cho phù hợp với yêu cầu của bạn. Nếu có chỗ nào chưa hiểu thì hãy post lên ình sẽ giải thích rõ vì sao mình làm vậy.
Rất mong bạn sử dụng được chút nào cái lisp của mình.


Chúc bạn vui.
<<

Filename: 52821_n2t.lsp
Tác giả: conghoa
Bài viết gốc: 5295
Tên lệnh: 1d 1h 1b 1t
Gom đối tượng cùng loại vào 1 layer

Khi vẽ bản vẽ một số động tác chúng ta phải lặp đi lặp lại ví dụ: dim, viết text, hatch, tạo block...
Vì nhiều thứ như vậy nên có thể chúng ta sẽ quên đi là đang dim ở layer nào, viết text ở layer nào, hatch ở layer nào ...

Mình có một số đoạn lisp sau (cũng chẳng nhớ là lấy của ai để cảm ơn, nhưng thấy hay nên share cùng các bạn)!

Công dụng lisp rất đơn giản...
>>
Khi vẽ bản vẽ một số động tác chúng ta phải lặp đi lặp lại ví dụ: dim, viết text, hatch, tạo block...
Vì nhiều thứ như vậy nên có thể chúng ta sẽ quên đi là đang dim ở layer nào, viết text ở layer nào, hatch ở layer nào ...

Mình có một số đoạn lisp sau (cũng chẳng nhớ là lấy của ai để cảm ơn, nhưng thấy hay nên share cùng các bạn)!

Công dụng lisp rất đơn giản nhưng hiệu quả là: gom toàn bộ: text hoặc dim hoặc hatch hoặc block vào 1 layer riêng (tuỳ bạn quy định)
Ví dụ: nét dim của bạn hiện tại đang ở rất nhiều layer khác nhau, bạn dùng lệnh 1d thì nó sẽ gom toàm bộ dim thành 1 layer NetDim...
:unsure:



Chúc các bạn đỡ mệt vì đỡ phải dùng lệnh Ma :unsure:
<<

Filename: 5295_1d_1h_1b_1t.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52623
Tên lệnh: n2t
nhập 2 text

Chào bạn thangkho,
Đây là cái lisp mình sửa lại dựa theo gợi ý của bác Duy và cái bản vẽ thực tế mà bạn gửi. Mình dựa vào cái đặc thù của các text cao độ nằm riêng trong lớp textcaodomia để phân loại nó ra và nối chúng lại theo cái lisp của bác Tue_nv.
Bạn hãy thử xem có đạt yêu cầu của bạn không nhé.
Thú thực là mình đã thử rồi và lisp chạy mất khoảng 30 giây...
>>

Chào bạn thangkho,
Đây là cái lisp mình sửa lại dựa theo gợi ý của bác Duy và cái bản vẽ thực tế mà bạn gửi. Mình dựa vào cái đặc thù của các text cao độ nằm riêng trong lớp textcaodomia để phân loại nó ra và nối chúng lại theo cái lisp của bác Tue_nv.
Bạn hãy thử xem có đạt yêu cầu của bạn không nhé.
Thú thực là mình đã thử rồi và lisp chạy mất khoảng 30 giây thì xong bản vẽ của bạn. Kiểm tra thử một vài khu vực thì thấy ngon phết, nhưng kiểm tra toàn bộ thì chưa có thời gian, mong bạn thông cảm.


Nếu có gì chưa được bạn hãy cho mình biết để mình tìm cách hoàn thiện nhé. Thanks
<<

Filename: 52623_n2t.lsp
Tác giả: ssg
Bài viết gốc: 5278
Tên lệnh: jre
Viết Lisp theo yêu cầu




Lệnh JRE (joint rectangle)

Filename: 5278_jre.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 5282
Tên lệnh: t2v
Chuyển mã từ ABC sang VNI

Tôi đã chạy thử lisp trên file này và không hề phát sinh lỗi.

Chỉ có điều lisp không chuyển đổi được font text, lý do là: Text trong bản vẽ được viết theo mã TCVN số chứ không phải theo mã TCVN thông thường (Vbao edit nó thì sẽ thấy). Chính vì vậy mà chương trình không nhận ra. Ví dụ: chữ 'ô' thay vì phải viết theo mã TCVN là '«' thì bản vẽ trên lại viết là '%%171'. Chính vì...
>>

Tôi đã chạy thử lisp trên file này và không hề phát sinh lỗi.

Chỉ có điều lisp không chuyển đổi được font text, lý do là: Text trong bản vẽ được viết theo mã TCVN số chứ không phải theo mã TCVN thông thường (Vbao edit nó thì sẽ thấy). Chính vì vậy mà chương trình không nhận ra. Ví dụ: chữ 'ô' thay vì phải viết theo mã TCVN là '«' thì bản vẽ trên lại viết là '%%171'. Chính vì vậy, mặc dù ACAD sẽ hiển thị được theo font TCVN nhưng lisp không thể nhận ra.

Đoạn mã dưới đây đã được chỉnh sửa để đáp ứng được yêu cầu cụ thể trong file đính kèm của Vbao. Vbao thử dùng xem sao nhé, lệnh vẫn thế:

<<

Filename: 5282_t2v.lsp
Tác giả: Tue_NV
Bài viết gốc: 52494
Tên lệnh: n2t
nhập 2 text

Bạn sử dụng Lisp này xem.
Lisp yêu cầu :
Chọn Text 1
Chọn Text 2
Sau đó nối theo yêu cầu của bạn

Chúc bạn thành công :undecided:

Filename: 52494_n2t.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52534
Tên lệnh: n2t
nhập 2 text

Chào bạn thangkho,
Bạn thử cái líp này xem có được không. Lisp này mình dựa trên lisp của bác Tue_NV và dựa trên suy luận rằng hai con số của bạn phải được nhập liên tiếp nhau vì nó thể hiện cao độ của điểm nhập. Nhưng do trên bản vẽ của bạn có những text không phải là các con số như vậy nên mình yêu cầu khi chạy lisp bạn phải chọn các đối tượng bằng cửa sổ qua hai...
>>

Chào bạn thangkho,
Bạn thử cái líp này xem có được không. Lisp này mình dựa trên lisp của bác Tue_NV và dựa trên suy luận rằng hai con số của bạn phải được nhập liên tiếp nhau vì nó thể hiện cao độ của điểm nhập. Nhưng do trên bản vẽ của bạn có những text không phải là các con số như vậy nên mình yêu cầu khi chạy lisp bạn phải chọn các đối tượng bằng cửa sổ qua hai điểm của đường chéo hình chữ nhật mà bạn sẽ nhập vào. Điều này giúp bạn loại bỏ các chữ không cần nối mà chỉ chọn các đối tượng là các cặp số cần nối thôi. Như vậy bạn có thể chọn một lần nhiều cặp số như vậy miễn là cái cửa sổ của bạn phải chứa toàn các cặp số định nối mà không có thêm bất cứ đối tượng ngoại lai nào. Tuy lisp này chưa hẳn đã đúng ý bạn nhưng nó có thể giúp bạn giảm bớt số lần chạy lisp để có thể hoàn thành toàn bộ các cặp số cần nối của bạn.


Để tăng hiệu quả của lisp này bạn có thể đổi các text ngoại lai sang lớp khác với lớp của các cặp số cần nối (hiện tại nó là lớp "nen") và bổ sung một filter list '(8. "nen") vào trong hàm SSget là bạn sẽ có thể chơi một lần toàn bộ các cặp số có trên bản vẽ hiện hành của bạn.

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

Filename: 52534_n2t.lsp
Tác giả: ssg
Bài viết gốc: 52188
Tên lệnh: scc chd xy cl l1 ll lto
Tiện ích nhỏ về kích thước và đo đạc
1- Vài tiện ích nhỏ, hy vọng có ích cho một số bạn thường phải xử lý Dim và Measure:



2- Có vấn đề gì về sử dụng, các bạn phản hồi để ssg sửa

3- Cần bổ sung thêm những tiện ích gì thuộc dạng này không?

Filename: 52188_scc_chd_xy_cl_l1_ll_lto.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52202
Tên lệnh: toado
Cần nhờ viết list về kích thước

Chào bạn Ui_troi_2005,
Bạn xài thử thằng này coi sao:


Hy vọng bạn hài lòng.

Filename: 52202_toado.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52103
Tên lệnh: ao
Viết Lisp theo yêu cầu

Chào bạn nguyenkhoadung98,
Lisp này mình đã sửa lại theo ý bạn. Bạn dùng thử nhé và hy vọng sẽ OK.

Filename: 52103_ao.lsp
Tác giả: BKXD98
Bài viết gốc: 5215
Tên lệnh: zone
Xin lisp / vba xác định chiều dài của nhiều đường polyline
Xin cảm ơn các bác !

Qua đây, tôi mới biết thêm là lệnh "lengthen" có chức năng là xác định chiều dài 1 đối tượng và biến "PERIMETER" lưu giá trị này, còn vba thì quá đơn giản (do tôi vội quá nên nhờ vả mà ko chịu đọc help).

Tôi cũng đã search trên google tìm được đoạn code này trên 1 forum của nước ngoài, chức năng là xác định tổng chiều dài / diện...
>>
Xin cảm ơn các bác !

Qua đây, tôi mới biết thêm là lệnh "lengthen" có chức năng là xác định chiều dài 1 đối tượng và biến "PERIMETER" lưu giá trị này, còn vba thì quá đơn giản (do tôi vội quá nên nhờ vả mà ko chịu đọc help).

Tôi cũng đã search trên google tìm được đoạn code này trên 1 forum của nước ngoài, chức năng là xác định tổng chiều dài / diện tích của các đường polyline thuộc 1 layer

<<

Filename: 5215_zone.lsp
Tác giả: ssg
Bài viết gốc: 52014
Tên lệnh: scc
Scale tất cả trên bẻn vẽ

Bạn dùng tạm lisp này xem thử có ổn không.
Lưu ý: mỗi lần chạy lệnh SCC, các đối tượng được chọn phải có cùng 1 kiểu dimstyle


Filename: 52014_scc.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52059
Tên lệnh: ao
Viết Lisp theo yêu cầu

Chào bạn nguyenkhoadung98,
Bạn dùng thử đoạn lisp này nhé. Nếu bạn thấy có gì chưa phù hợp hãy post lên để cùng trao đổi.

Bạn lưu ý một số điểm về đoạn líp này như sau:
1/- Mình chưa viết phần check lại đối tượng chọn xem có đúng là text hay không nên khi lisp yêu cầu bạn chọn text thì bạn phải chọn đúng đối tượng là text, còn nếu bạn chọn đối tượng lá...
>>

Chào bạn nguyenkhoadung98,
Bạn dùng thử đoạn lisp này nhé. Nếu bạn thấy có gì chưa phù hợp hãy post lên để cùng trao đổi.

Bạn lưu ý một số điểm về đoạn líp này như sau:
1/- Mình chưa viết phần check lại đối tượng chọn xem có đúng là text hay không nên khi lisp yêu cầu bạn chọn text thì bạn phải chọn đúng đối tượng là text, còn nếu bạn chọn đối tượng lá Mtext thì mã DXF của nó sẽ khác và kết quả lisp sẽ chạy sai.
2/- Mình mới viết phần chọn đường chuẩn là các line và các arc. Nếu bạn chọn đường chuẩn là các polyline, Mline, Lwpolyline thì lisp sẽ cho kết quả sai. Lẽ ra cần có việc kiểm tra xem đối tượng được chọn làm đường chuẩn có phải là line hay arc không nhưng mình lười chưa làm.
3/- Với đường chuẩn là cung tròn, mình luôn đặt text nằm bên ngoài cung (khoảng cách từ tâm cung tròn tới text lớn hơn bàn kính). Muốn nó nằm vào trong thì khi nhập khoảng cách bạn nhập một số âm.
4/- Với đường chuẩn là line, mình luôn đặt text nằm trên đường chuẩn. Muốn nó nằm dưới bạn cũng nhập khoảng cách là số âm.
5/- Lisp này cho bạn chỉnh mỗi lần một đối tượng text, nếu muốn chỉnh nhiều text thì cần cải tạo thêm một chút là được.
6/- Khi bạn chọn đường chuẩn cần lưu ý đặt điểm chọn trên đối tượng sao cho tương ứng với vị trí mà bạn muốn text vào. Cái này là do mình tiết kiệm thao tác khỏi phải chọn lại cái điểm đặt text sau khi chọn đường chuẩn thôi mà. Nếu bạn thấy không phù hợp thì mình sẽ sửa lại.
7/- Mình chỉ thay đổi điểm đặt và góc xoay của text nên các thuộc tính khác của nó vẫn giữ nguyên như nó vốn có. Do vậy cái thuộc tính Justify của text có thể làm cho bạn thấy text không song song với đường chuẩn cung tròn, nhất là khi chiều cao text lớn mà bán kính cung tròn lại nhỏ.

Với các đường chuẩn là polyline hay Spline thì việc lấy tiếp tuyến của nó phức tạp hơn khá nhiều do mã DXF của nó khá lôi thôi. Mình cũng đang thử nghiệm việc này nên chưa thể đưa vào cái lisp này được, mong bạn thông cảm.

Chúc bạn khỏe và vui.
<<

Filename: 52059_ao.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 52073
Tên lệnh: ao
Viết Lisp theo yêu cầu

Chào bác tdvn,
Rất cám ơn sự gợi ý của bác, và đây là cái kết quả từ sự gợi ý này. Quả thật là với cách suy luận này thì hoàn toàn không phụ thuộc vào loại đường chuẩn và bài toán trở nên đơn giản hơn rất nhiều. Hy vọng rằng điều này sẽ đáp ứng được yêu cầu của bạn nguyenkhoadung98.


@nguyenkhoadung98: Nếu bạn có nhu cầu hiệu chỉnh nhiều text trong...
>>

Chào bác tdvn,
Rất cám ơn sự gợi ý của bác, và đây là cái kết quả từ sự gợi ý này. Quả thật là với cách suy luận này thì hoàn toàn không phụ thuộc vào loại đường chuẩn và bài toán trở nên đơn giản hơn rất nhiều. Hy vọng rằng điều này sẽ đáp ứng được yêu cầu của bạn nguyenkhoadung98.


@nguyenkhoadung98: Nếu bạn có nhu cầu hiệu chỉnh nhiều text trong một lần chạy lisp thì hãy post lên nhé, mình sẽ bổ sung. Lưu ý khi chọn điểm xác định phía đặt text cần phải chọn sao cho nó tương ứng với vị trí sẽ đặt text sau khi căn chỉnh.
<<

Filename: 52073_ao.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 5188
Tên lệnh: chuyenlayer
Chuyển layer.


Bạn dùng lệnh laytrans của AutoCAD: http://www.cadviet.com/content/view/41/34/.

Nếu bạn đang sử dụng ACAD đời thấp, không có lệnh laytrans thì dùng lisp dưới đây, lệnh là CHUYENLAYER:

Filename: 5188_chuyenlayer.lsp

Trang 15/330

15