Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 17 November 2015 - 01:32 PM

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


  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 17 November 2015 - 03:26 PM

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.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 17 November 2015 - 11:58 PM

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

Cám ơn !


  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 18 November 2015 - 10:01 AM

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ì....


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 18 November 2015 - 01:28 PM

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


  • 1

#6 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 19 November 2015 - 08:00 PM

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

File đính kèmhttp://www.cadviet.c...8467_vi_tri.dwg


  • 0

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 November 2015 - 12:45 PM

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

File đính kèmhttp://www.cadviet.c...8467_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.c...inhtrenduoi.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)
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.