Jump to content
InfoFile
Tác giả: TRUNGNGAMY
Bài viết gốc: 203570
Tên lệnh: hatg2
Lisp phân nhỏ tập hợp chọn bằng cách chia ô

Bài toán của mình đưa ra hoàn toàn dựa vào chủ đề này. Mình chỉ đưa một VD để các bác thấy tác dụng của việc chia ô mà thôi. Thực ra bài toán rất đơn giản, trước khi thực hiện việc tìm giao điểm, các bác hãy chia nhỏ tập hợp chọn theo cách của bác Thai đã viết, sau đó lần lượt đưa từng tập hợp nhỏ này vào tìm giao, sẽ có đc kq nhanh kg ngờ. Nói đến đây thì các bác đã...
>>

Bài toán của mình đưa ra hoàn toàn dựa vào chủ đề này. Mình chỉ đưa một VD để các bác thấy tác dụng của việc chia ô mà thôi. Thực ra bài toán rất đơn giản, trước khi thực hiện việc tìm giao điểm, các bác hãy chia nhỏ tập hợp chọn theo cách của bác Thai đã viết, sau đó lần lượt đưa từng tập hợp nhỏ này vào tìm giao, sẽ có đc kq nhanh kg ngờ. Nói đến đây thì các bác đã rõ rồi, tuy nhiên mình cũng nhờ bác Ha lồng cái hàm loại bỏ điểm trùng ra vì mình cũng kg rành các hàm vl và vla lắm. Sau đây sd code cua bác Ha và hàm chia ô của bác Thai

Mình còn nhiều thứ ứng dụng PP chia ô này, tuy nhiên cũng phải nhờ các bác giúp một tay.
Cám ơn các bác cho có những CT rất hay và nhớ ủng hộ những giải thuật tuyệt vời cho chủ đề này nhé.
@ bác Ha : về số lượng điểm giao bác đưa ra ở trên có lẽ chưa cx đâu, nó ít hơn nhiều, để mình test bằng PP khác rồi sẽ bàn tiếp. Vì đcx hàm tìm giao của Lisp mình cũng chưa biết cx cỡ nào nhưng do bv của mình thực chất các line đính vào nhau nên rất dễ kiểm tra.

P/s : Đã test bằng PP "nghiệp vụ", trên bv có 878 điểm giao. Nếu sd code cũ test 1 lần kg chia ô thấy có 880 point đc tạo (như vậy số liệu bác Ha đưa ra ở trên là khá cx), nếu sd PP chia ô dù chia 20dt hay 100dt trong 1 ô đều có 876 point đc tạo, như vậy có 2 vị trí thuộc dạng khó hiểu. Sẽ tìm hiểu sau.

@ bác Thai : Kg hiểu sao cái code chia ô của bác nếu cho số đối tượng nhỏ quá (thử 1 hay 2) nó báo lỗi kỳ lạ lắm rồi kg thoát ra đc. Trên bv lớn cho 20 nó cũng bị lỗi. Bác xem lại giúp nhé.

@ Ket : Bạn thông cảm, tuy cái tên tiêu đề mình đặt hơi hẹp, nhưng những vđ mình nếu ra đều liên quan đến việc chia ô. Tuy nhiên, do cảm nhận của mình về vđ này khác các bạn nên các bạn chưa thấy liên quan lắm. Phần mình cảm thấy rất có nhiều ứng dụng hay quanh việc chia ô nhưng vì còn nhiều ý tưởng chưa thành nên các bạn chưa thấy những ứng dụng hay của nó. Tuy nhiên, nó có trở thành một đề tài bổ ích cho anh em Cadviet hay kg còn nhờ vào các bạn.
Hay Ketxu sửa giúp tiêu đề thành " Lisp phân nhỏ tập hợp chọn bằng cách chia ô và các vấn đề liên quan". Cám ơn bạn
<<

Filename: 203570_hatg2.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 203704
Tên lệnh: test
offset tự động
Thử cái này, dựa vào lisp của anh Ketxu. Có vài khiếm khuyết nhé (như đã phân tích ở trên).

Filename: 203704_test.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 203738
Tên lệnh: ha
Truy tìm điểm giao cắt với Spline

Nộp bài cho bạn đây!

Filename: 203738_ha.lsp
Tác giả: TRUNGNGAMY
Bài viết gốc: 203756
Tên lệnh: hatg2
Lisp phân nhỏ tập hợp chọn bằng cách chia ô

Cám ơn Thiep. Chạy trên máy của mình, kết quả như sau :
- của Thiep : " Mat thoi gian la: 0.672 giay de tao duoc 879 points"
- của Ha kết hợp PP chia ô : " Mat thoi gian la: 0.578 giay de tao duoc 880 points"
- cua Ha nguyên gốc : " Mat thoi gian la: 13.906 giay de tao duoc 880 points"
- của một bạn kết hợp PP chia ô : " Mat thoi gian la: 1.203 giay de tao duoc 876 points"
Nói...
>>

Cám ơn Thiep. Chạy trên máy của mình, kết quả như sau :
- của Thiep : " Mat thoi gian la: 0.672 giay de tao duoc 879 points"
- của Ha kết hợp PP chia ô : " Mat thoi gian la: 0.578 giay de tao duoc 880 points"
- cua Ha nguyên gốc : " Mat thoi gian la: 13.906 giay de tao duoc 880 points"
- của một bạn kết hợp PP chia ô : " Mat thoi gian la: 1.203 giay de tao duoc 876 points"
Nói chung của Thiep và của bác Ha có kết hợp PP chia ô chạy nhanh nhất và số lượng điểm như nhau. Những PP khác chậm hơn nhưng có số lượng điểm hơi khác. Có thể do hàm tìm giao của Cad cũng kg ổn định.
Đây là code của bác Ha kết hợp PP chia ô của bác Thái.

<<

Filename: 203756_hatg2.lsp
Tác giả: TRUNGNGAMY
Bài viết gốc: 203849
Tên lệnh: tentpoint
Lisp phân nhỏ tập hợp chọn bằng cách chia ô
@ Thiep : Thực ra mình cần thuật toán cắt nhau, tức 2 đt cắt nhau chứ kg gối đầu vào nhau. Nếu 2 đt gối đầu vào nhau thì dùng thuật toán khác sẽ nhanh hơn. VD :

Sau khi chạy thì : " Mat thoi gian la: 0.328 giay de tao duoc 871 points"
@ bác Ha : bác thay dòng 20 ở dòng này thành 50
(setq lis (select-c (getvar "extmin") (getvar "extmax") 20 '((0 . "LINE"))))
tức 1 ô...
>>
@ Thiep : Thực ra mình cần thuật toán cắt nhau, tức 2 đt cắt nhau chứ kg gối đầu vào nhau. Nếu 2 đt gối đầu vào nhau thì dùng thuật toán khác sẽ nhanh hơn. VD :

Sau khi chạy thì : " Mat thoi gian la: 0.328 giay de tao duoc 871 points"
@ bác Ha : bác thay dòng 20 ở dòng này thành 50
(setq lis (select-c (getvar "extmin") (getvar "extmax") 20 '((0 . "LINE"))))
tức 1 ô có 20 đt thành 1 ô có 50 đt
<<

Filename: 203849_tentpoint.lsp
Tác giả: quansla
Bài viết gốc: 203707
Tên lệnh: chh
có cách nào chuyển autocad 2011 về giao diện cũ
(defun c:chh (/ ENT1)


(SETVAR "CMDECHO" 0)
(setq Ent1 (entsel "\nSelect hatch: "))
(command "-bhatch")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(command "._matchprop" Ent1 "_L" "")
(SETVAR "CMDECHO" 1)
(princ)
)

bạn có thể thử list này để copy mẫu hatch qua đối tượng khác
Sao trước em...
>>
(defun c:chh (/ ENT1)


(SETVAR "CMDECHO" 0)
(setq Ent1 (entsel "\nSelect hatch: "))
(command "-bhatch")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(command "._matchprop" Ent1 "_L" "")
(SETVAR "CMDECHO" 1)
(princ)
)

bạn có thể thử list này để copy mẫu hatch qua đối tượng khác
Sao trước em tự viết là được mà giờ lại phải nhấp biểu tượng CODE vậy mọi người(hix vẫn không chuyển qua thẻ code được., huhu)
<<

Filename: 203707_chh.lsp
Tác giả: Tue_NV
Bài viết gốc: 203996
Tên lệnh: plw
Lisp thay phím

Đây bạn :

Filename: 203996_plw.lsp
Tác giả: hochoaivandot
Bài viết gốc: 203994
Tên lệnh: plw
[Hỏi ngu] Lisp thay phím



(defun C:plw() (command "pline" pause "W" pause "" ))

Filename: 203994_plw.lsp
Tác giả: gia_bach
Bài viết gốc: 204134
Tên lệnh: backatt
Backwards hàng loạt Attribute block ?


Ừ thì nhanh gọn lẹ.
(defun c:BackAtt (/ e ss i obj)
(if (setq i -1 ss (ssget (list '(0 . "INSERT") (cons 66 1))) )
(while (setq e (ssname ss (setq i (1+ i))))
(foreach att (vlax-invoke (vlax-Ename->Vla-Object e) 'GetAttributes)
(if (= (vlax-get-property att'Backward) :vlax-false)
(vlax-put-property att 'Backward :vlax-true) ) ) ) )
(princ))

Filename: 204134_backatt.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 204226
Tên lệnh: eapr
(yêu cầu) lips thực hiện n% khối lượng công việc

Hề hề hề,
Vì bạn không gửi file lên nên mình đoán mò đối tượng của bạn là các đối tượng Acad_proxy_entity và làm thử cái lisp này. bạn hãy test thử xem nó có đạt yêu cầu bạn đặt ra không nhé. Lisp sẽ xóa bớt các đối tượng acad_proxy-entity trong vùng chọn trùng nhau cho tới khi số đối tượng acad_proxy_entity trong vùng chọn còn lại nhỏ hơn hiệu số của số đối tượng ban...
>>

Hề hề hề,
Vì bạn không gửi file lên nên mình đoán mò đối tượng của bạn là các đối tượng Acad_proxy_entity và làm thử cái lisp này. bạn hãy test thử xem nó có đạt yêu cầu bạn đặt ra không nhé. Lisp sẽ xóa bớt các đối tượng acad_proxy-entity trong vùng chọn trùng nhau cho tới khi số đối tượng acad_proxy_entity trong vùng chọn còn lại nhỏ hơn hiệu số của số đối tượng ban đầu trừ đi số đối tượng tính theo phần trăm mà bạn cần xóa. Li1sp sẽ dừng lại khi không còn các đối tượng acad_proxy_entity trùng nhau trong vùng chọn bởi lúc này không biết bạn muốn chọn thằng nào và bỏ thằng nào????

Chúc bạn vui và hy vọng lisp thỏa mãn yêu cầu của bạn.
<<

Filename: 204226_eapr.lsp
Tác giả: Tue_NV
Bài viết gốc: 139195
Tên lệnh: glt
Cho em hỏi về TOLERANCE!
Anh oi! Nếu cái đó ko chỉnh sửa được thì bây giờ mình chỉnh sửa như vậy được ko? Em chỉ muốn lấy giá trị CỠ VAN vào giữa Text P1-001 thôi, bỏ cái Quận, phường, địa chỉ (Vì nó ảnh hưởng đến Font nên sợ ko dc) cụ thể bây giờ chỉ cần như vầy thôi:
P1.10.001 còn các cái khác em dùng LISP thêm bớt text em làm thủ công cũng dc anh ơi!
Nhờ anh giúp dùm em với!
Thân chào anh!
>>
Anh oi! Nếu cái đó ko chỉnh sửa được thì bây giờ mình chỉnh sửa như vậy được ko? Em chỉ muốn lấy giá trị CỠ VAN vào giữa Text P1-001 thôi, bỏ cái Quận, phường, địa chỉ (Vì nó ảnh hưởng đến Font nên sợ ko dc) cụ thể bây giờ chỉ cần như vầy thôi:
P1.10.001 còn các cái khác em dùng LISP thêm bớt text em làm thủ công cũng dc anh ơi!
Nhờ anh giúp dùm em với!
Thân chào anh!
....
Truongthanh sử dụng thử cái này :

<<

Filename: 139195_glt.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 204362
Tên lệnh: doimau colorxref colorxl colorxrefl
Lisp doi mau

Hề hề hề,
Xin lỗi vì bạn phải đợi lâu. Số là mình hơi dốt về các hàm vla- và vlax- nên phải mót thêm của các bác Ketxu, ĐoanVanHa mới hiểu được cái lisp của bạn gửi để chỉnh sửa nó theo yêu cầu của bạn.
Mình đã chỉnh sửa nó bằng cách bổ sung thêm hàm con changeallobjectcolor1 dựa trên cái hàm con cũ của bạn là changeallobjectcolor.
Như vậy khi chạy lisp sẽ hỏi bạn...
>>

Hề hề hề,
Xin lỗi vì bạn phải đợi lâu. Số là mình hơi dốt về các hàm vla- và vlax- nên phải mót thêm của các bác Ketxu, ĐoanVanHa mới hiểu được cái lisp của bạn gửi để chỉnh sửa nó theo yêu cầu của bạn.
Mình đã chỉnh sửa nó bằng cách bổ sung thêm hàm con changeallobjectcolor1 dựa trên cái hàm con cũ của bạn là changeallobjectcolor.
Như vậy khi chạy lisp sẽ hỏi bạn có muốn đổi màu toàn bộ bản vẽ hay không?? Nếu bạn trả lời y thì lisp sẽ chạy hàm con changeallobjectcolor và đổi màu toàn bộ bản vẽ. Còn nếu bạn trả lời n hay nhấn phím enter thì lisp sẽ yêu cầu bạn chọn các đối tượng cần đổi màu và chỉ đổi màu các đối tượng này bằng cách chạy hàm con changeallobjectcolor1.
Bạn hãy test thử và cho ý kiến nhé.


Bạn nhớ cám ơn các bác Ketxu và DoanVanHa vì có các bác ấy mình mới sửa được cái lisp này. Hy vọng bạn sẽ hài lòng với nó.
Chúc bạn vui.
PS: file lisp gốc bạn gửi bị sai cú pháp, bạn phải sửa lại cho đúng nhé. Sai ở chỗ tên hàm (defun c:doi mau (...) Phải sửa lại thành (defun c:doimau (....) nó mới chạy được (chú ý không có khoảng trắng giữa các ký tự của tên hàm tức là giữa doi và mau)
<<

Filename: 204362_doimau_colorxref_colorxl_colorxrefl.lsp
Tác giả: cuong49x5
Bài viết gốc: 11261
Tên lệnh: ddselect ddgrips gifin pcxin tiffin ddemodes ddrmodes hpconfig oceconfig cconfig gotourl zz ze za zd zp cd th nl li k uk oo oi io cx ht ut 1 2 4 3 5 6 7 8 9 10 ad dk nc vs
Xin sửa dùm lisp xoay text theo một đường chuẩn
Xin mọi ngưới sửa dùm lisp này !Em đã sử dụng nhưng hình như nó bị thiếu cái gì đó trong phần lập trình thì phải nên kết quả ra không như mong muốn!(Em nghĩ kết quả của việc dùng lisp này là làm cho text xoay song song với đường chuẩn đã chọn)

Do không biết gì về autolisp nên em cứ cóp hết .Cái lisp mà em muốn sửa có tên là :Xt .Nó có tác dụng xoay text theo một đưòng chuẩn !Xin...
>>
Xin mọi ngưới sửa dùm lisp này !Em đã sử dụng nhưng hình như nó bị thiếu cái gì đó trong phần lập trình thì phải nên kết quả ra không như mong muốn!(Em nghĩ kết quả của việc dùng lisp này là làm cho text xoay song song với đường chuẩn đã chọn)

Do không biết gì về autolisp nên em cứ cóp hết .Cái lisp mà em muốn sửa có tên là :Xt .Nó có tác dụng xoay text theo một đưòng chuẩn !Xin cảm ơn mọi ngưòi !
<<

Filename: 11261_ddselect_ddgrips_gifin_pcxin_tiffin_ddemodes_ddrmodes_hpconfig_oceconfig_cconfig_gotourl_zz_ze_za_zd_zp_cd_th_nl_li_k_uk_oo_oi_io_cx_ht_ut_1_2_4_3_5_6_7_8_9_10_ad_dk_nc_vs.lsp
Tác giả: gia_bach
Bài viết gốc: 43388
Tên lệnh: changetext changetext
Lisp đổi Text được chọn có chiều cao Height=0.2 và Width factor = 3 ????


Bạn dùng thử LISP này :
Không biết bạn có gõ nhầm không? thực tế tui thấy bản vẽ ít dùng text có Width factor = 3

Filename: 43388_changetext_changetext.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 204490
Tên lệnh: ddt
Nhờ giúp Lisp tính diện tích và lập bảng

Hề hề hề,
Mình giúp bạn lần này đưa vấn đề bạn hỏi về cùng topic gốc. Lần sau bạn nên rút kinh nghiệm để diễ đàn đỡ rối rắm.
Bạn dùng thử cái này xem đã ưng ý chưa nhé.

Chúc bạn vui......

Filename: 204490_ddt.lsp
Tác giả: pt_minh
Bài viết gốc: 118914
Tên lệnh: tlset utl tlc tlf tl settl atc
Lisp rải taluy trên đường cong
Thêm cho anh em lisp ve taluy của tedi mình vừa tìm thấy trong máy mình, chắc là tuổi của nó cũng được tròn chục rui.

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

Từ Lisp ghi kích thước vạt góc giúp cho truongthanh -> Tue_NV chỉnh lại 1 chút cho phù hợp với yêu cầu của bạn vansulich
vansulich hãy thử code này nhé :

@Truongthanh : Nhìn file của bạn -> Tue_NV vẫn không hiểu kết quả mà bạn muốn. Có lẽ mình không thuộc vào chuyên ngành của bạn. Có lẽ là vậy. Nhưng dù sao, bạn muốn người khác giúp cho bạn thì ít ra bạn phải nói rõ hơn cái...
>>

Từ Lisp ghi kích thước vạt góc giúp cho truongthanh -> Tue_NV chỉnh lại 1 chút cho phù hợp với yêu cầu của bạn vansulich
vansulich hãy thử code này nhé :

@Truongthanh : Nhìn file của bạn -> Tue_NV vẫn không hiểu kết quả mà bạn muốn. Có lẽ mình không thuộc vào chuyên ngành của bạn. Có lẽ là vậy. Nhưng dù sao, bạn muốn người khác giúp cho bạn thì ít ra bạn phải nói rõ hơn cái kết quả bạn muốn chứ? Bạn muốn tính diện tích phần nào? Diện tích giải toả nhà nằm giữa phần ranh giới giữa đường hiện trạng và đường quy hoạch chăng? Mong bạn nói rõ ràng nhé.
<<

Filename: 93515_gktvg.lsp
Tác giả: Tue_NV
Bài viết gốc: 70625
Tên lệnh: gktvg
Viết Lisp theo yêu cầu

Chào bạn 't031285
Bạn không cần khen đâu, chỉ cần bạn đóng góp thật nhiều cho diễn đàn CADVIET thì quý lắm rồi.
Và theo Tue_NV thì bạn không nên post bài kiểu như vầy. Muốn cảm ơn ai thì bạn chỉ cần tick Thanks ở dưới là được rồi.
THANKS

Filename: 70625_gktvg.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 204765
Tên lệnh: ha
Lisp vẽ giao điểm hai tiếp tuyến
Đây bạn!

Filename: 204765_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 204760
Tên lệnh: vtl1
Lisp rải taluy trên đường cong

Hề hề hề,
1/- Đã sửa
2/- Đã sửa
3/- Đã sửa
4/- Đã sửa
5/- Đã sửa.
6.1/- Không sửa. Nếu bạn muốn vậy hãy nhét lisp này vào file vlx.
6.2 a/- Đã sửa
6.2 b/- Không sửa vì lisp này sử dụng vẽ nét taluy vuông góc với đường nối hai điểm chân taluy chứ không phải vuông góc với đường rải ta luy. Nếu bạn muốn vậy thì cần làm lisp theo giải thuật...
>>

Hề hề hề,
1/- Đã sửa
2/- Đã sửa
3/- Đã sửa
4/- Đã sửa
5/- Đã sửa.
6.1/- Không sửa. Nếu bạn muốn vậy hãy nhét lisp này vào file vlx.
6.2 a/- Đã sửa
6.2 b/- Không sửa vì lisp này sử dụng vẽ nét taluy vuông góc với đường nối hai điểm chân taluy chứ không phải vuông góc với đường rải ta luy. Nếu bạn muốn vậy thì cần làm lisp theo giải thuật khác.
Nếu mình đoán không sai thì lisp này là của bác Duy. Mạn phép bác chỉnh sửa một chút cho bạn SoftvnBin xài thử

Đây là cái đã sửa, bạn dùng thử nhé và cho ý kiến để mình hoàn thiện thêm.


Hề hề hề,
Cách dùng lisp này vẫn u như kỵ, chỉ lưu ý khi lisp yêu cầu nhập tên block, nếu bạn không muốn tạo block thì chỉ cần nhấn enter để bỏ qua.
Chúc bạn vui.
<<

Filename: 204760_vtl1.lsp

Trang 96/330

96