Chuyển đến nội dung
Diễn đàn CADViet
limfx

Boundaries Multiple within Selection

Các bài được khuyến nghị

 

Em có tham khảo một lisp tạo nhiều Boundaries giữa các đối tượng giao nhau. Nhưng có một vấn đề là nó hoạt động rất chậm. Các anh chị có thể giúp làm cho nó hoạt động nhanh được không? Em cảm ơn mọi sự giúp đỡ!

boundary.png

boundary (BMS).LSP

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chậm là do nó chia bound ra lưới 50x50=2500 ô để pick lần lượt cho command "Boundary".

Muốn nhanh chắc phải  splitCurver bởi các giao điểm ra  rồi tạo region từ tập đó.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ} trướ}c, cuongtk2 đã nói:

Chậm là do nó chia bound ra lưới 50x50=2500 ô để pick lần lượt cho command "Boundary".

Muốn nhanh chắc phải  splitCurver bởi các giao điểm ra  rồi tạo region từ tập đó.

Anh có thể hướng dẫn chi tiết thêm ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn không muốn dùng lệnh boundary thì có thể thay bằng lệnh Reg

Trước đấy cần break các đường line, arc.. Thành các đoạn nhỏ như thế này. 

image.thumb.png.a25db04e630533bf51019f920c43ef33.png

Sau đó thay bằng lệnh (command "region" ss "") thì sẽ được.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 12/8/2023 tại 11:16, cuongtk2 đã nói:

Chậm là do nó chia bound ra lưới 50x50=2500 ô để pick lần lượt cho command "Boundary".

 Muốn nhanh chắc phải  splitCurver bởi các giao điểm ra  rồi tạo region từ tập đó.

Khi tạo boundary bằng region. Luôn có 1 region bao toàn bộ các region con.

bác làm thế nào để xoá region 1 mà không xoá region 2 vậy. chia sẻ em chút thuật toán nghiên cứu với

image.thumb.png.dfdc1f35a44dd2397c7cf1a112127124.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
2 giờ trước, tannguyen291 đã nói:

Khi tạo boundary bằng region. Luôn có 1 region bao toàn bộ các region con.

bác làm thế nào để xoá region 1 mà không xoá region 2 vậy. chia sẻ em chút thuật toán nghiên cứu với

 

Hai câu này không nằm trong 1 ngữ cảnh nên anh không trả lời nổi.

1. Nếu chỉ lấy region bao ngoài region con thì chỉ cần xác định cái diện tích lớn nhất

2. Vấn đề xoá rg1 hay rg2, bởi không bao lồng nên khó có tiêu chí để xoá. Vì vậy lúc thao tác tránh tạo ra rg2.

Vấn đề tạo boundary với n đường (curve) thuật toán như sau:

image.thumb.png.47ca6d5f9746587648339eb4940ba311.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
17 giờ trước, cuongtk2 đã nói:

Hai câu này không nằm trong 1 ngữ cảnh nên anh không trả lời nổi.

1. Nếu chỉ lấy region bao ngoài region con thì chỉ cần xác định cái diện tích lớn nhất

 2. Vấn đề xoá rg1 hay rg2, bởi không bao lồng nên khó có tiêu chí để xoá. Vì vậy lúc thao tác tránh tạo ra rg2.

 Vấn đề tạo boundary với n đường (curve) thuật toán như sau:

 

Nhìn code của bác chuyên nghiệp vãi chầy. Em tự học lisp nên viết nhìn xoàng khiếp. 

Sao lại k nằm trong 1 ngữ cảnh ạ?

Tối qua em vọc vạch union toàn bộ region rồi explode ra các region con (list 1). so sánh toàn bộ region cũ (list 0) với nhau nếu 2 đối tượng area, centroid bằng nhau thì tiếp tục so sánh với các region khác xem có bao lồng không bằng cách union 2 đối tượng và so sánh diện tích tổng trước và sau khi union. Cách làm này tuy hiệu quả nhưng thời gian chạy khá lâu Vì phải so sánh rất nhiều lần. 

Bài test này không có quá nhiều đối tượng!

Process Trim in 1.204 seconds!
Process Region in 0.437 seconds!
Process Sort in 0.891 seconds!
Delete overlaps in 0.953 seconds!

All time: 3.485 seconds!

giphy.gif

file test: da1.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 13/10/2023 tại 10:04, tannguyen291 đã nói:

Nhìn code của bác chuyên nghiệp vãi chầy. Em tự học lisp nên viết nhìn xoàng khiếp. 

Sao lại k nằm trong 1 ngữ cảnh ạ?

Tối qua em vọc vạch union toàn bộ region rồi explode ra các region con (list 1). so sánh toàn bộ region cũ (list 0) với nhau nếu 2 đối tượng area, centroid bằng nhau thì tiếp tục so sánh với các region khác xem có bao lồng không bằng cách union 2 đối tượng và so sánh diện tích tổng trước và sau khi union. Cách làm này tuy hiệu quả nhưng thời gian chạy khá lâu Vì phải so sánh rất nhiều lần. 

Bài test này không có quá nhiều đối tượng!

Process Trim in 1.204 seconds!
Process Region in 0.437 seconds!
Process Sort in 0.891 seconds!
Delete overlaps in 0.953 seconds!

All time: 3.485 seconds!

giphy.gif

file test: da1.dwg

Anh có thể cho em xin lại lisp này được ko ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
39 phút trước, minhtuan57hk đã nói:

Anh có thể cho em xin lại lisp này được ko ạ!

Có một vài lý do mình chưa chia sẻ lisp. tuy nhiên bạn có thể tải về lisp của @limfx phía trên. chạy không nhanh nhưng rất hiệu quả. 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn có thể cho mình xem hình cụ thể bài toán bạn đang cần. Đừng đưa hình minh hoạ như 2 cái poly giao nhau mà bạn đã đưa nhé!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
15 giờ trước, DuongTrungHuy đã nói:

Bạn có thể cho mình xem hình cụ thể bài toán bạn đang cần. Đừng đưa hình minh hoạ như 2 cái poly giao nhau mà bạn đã đưa nhé!

Mình đang có các nét đường ống hình chữ nhật là các đường line giao nhau về hình học thì đúng nhưng quản lý rất bất tiện, mình muốn tạo đường bao xung quanh để quản lý, chỉnh sửa dễ hơn. Mình gửi file test nhờ anh xem giúp ạ!

Test bo.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×