Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
NguyenNgocSon

Lisp Xác Định Vị Trí Của Polyline

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

Em có bài toán sau nhờ các bác cho ý kiến giúp

Có 1 đường polyine chuẩn và các đường Polyline kín đã được tạo bằng boundary

Giờ em muốn kiểm tra xem các Polyline trên nằm trên hoặc dưới đường chuẩn thì đổi màu hoặc chuyển thành lớp khác

Trân trọng !48467_vi_tri.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

Em có bài toán sau nhờ các bác cho ý kiến giúp

Có 1 đường polyine chuẩn và các đường Polyline kín đã được tạo bằng boundary

Giờ em muốn kiểm tra xem các Polyline trên nằm trên hoặc dưới đường chuẩn thì đổi màu hoặc chuyển thành lớp khác

Trân trọng !48467_vi_tri.png

Hề hề hề,

Bài toán này không khó nếu như bạn chắc chắn các polyline kín này đều không bị chia cắt thành 2 phần bởi đượng pline chuẩn.

Khi đó bạn có thể tạo vòng lặp kiểm tra mỗi một polyline kín thông qua các đỉnh của nó. Nếu có bất cứ đỉnh nào có tọa độ y lớn hơn tọa độ điểm giao của đường Yline đi qua đỉnh đó với pline chuẩn thì polyline kín đó nằm trên và ngược lại.

 

Lưu ý rằng pline chuẩn là pline hở và không tự giao cắt nhau.

  • 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

Bác có thể code lisp rõ hơn về vấn đề này không ?

Cám ơn !

Hề hề hề,

Bạn có thể gửi bản vẽ lên không để có thể biết chính xác các polyline của bạn là loại gì....

  • 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

Gọi x0, x1, ...xn là hoành độ các giao điểm của 2 pline

Ứng với mỗi đoạn xi - xi+1 vẽ 1 xline thẳng đứng

Xét tung độ giao điểm của xline với 2 pline

  • 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

Cám ơn các bác quan tâm.

File đính kèmhttp://www.cadviet.com/upfiles/5/48467_vi_tri.dwg

Hề hề hề,

Bạn thử lisp dưới đây và lưu ý rằng nó chỉ đúng khi các polyline kín phải nằm hoàn toàn trên hoặc hoàn toàn dưới polyline chuẩn và thỏa các điều kiện như mình đã nói ở bài trước.

Nếu chưa đúng ý thì bạn có thể tự xem và sửa tiếp và bổ sung những điều bạn cần.

http://www.cadviet.com/upfiles/5/5194_xacdinhtrenduoi.lsp

 

Theo mình bạn nên thay (= a 0) bằng hàm (equal .....) sẽ tốt hơn bởi quá trình vẽ có thể có những sai số nhỏ mà mắt thường không nhận thấy được.

(defun c:xdtd (/ plk plc pls a ln)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq plk (car (entsel "\n Chon pline kin"))
          plc (car (entsel "\n Chon pline chuan"))
          pls (acet-geom-vertex-list plk) 
          a 0 )
(while (and (= a 0) (setq p (car pls)))
    (command "xline" "v" p "")
    (setq ln (entlast)
              p1 (car (acet-geom-intersectwith ln plc 0))
             a (- (cadr p) (cadr p1))
             pls (cdr pls)  )
   (command "erase" ln "")
)
(if (> a 0)
    (alert "\n Polyline kin nam tren polyline chuan")
    (alert "\n Polyline kin nam duoi polyline chuan")
)
(setvar "osmode" oldos)
(princ)
)
  • 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

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

Đăng nhập để thực hiện theo  

×