Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
--NK--

[Yêu Cầu] Lisp lọc đối tượng đường thẳng song song

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

--NK--    2

Chào mọi người!

 

Mình có 1 Hình Thang, sau khi chọn đối tượng bằng hàm SSget.

Muốn lọc 2 đường thẳng song song vào 1 danh sách và 2 đường còn lại vào một danh sách.

Nghĩ hoài mà ko ra cái điều kiện và cú pháp.

Mọi người giúp mình với. T-T

Xin cảm ơn!!!

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
hiepttr    523

Tại bạn nghĩ nhiều quá chăng ?!

đk chỉ là so sánh angle của các cạnh

đại loại:

(equal (angle "02 đỉnh thuộc cạnh thứ nhất") (angle "02 đỉnh thuộc cạnh thứ hai") 1e-10)

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
phamthanhbinh    3.123

Tại bạn nghĩ nhiều quá chăng ?!

đk chỉ là so sánh angle của các cạnh

đại loại:

(equal (angle "02 đỉnh thuộc cạnh thứ nhất") (angle "02 đỉnh thuộc cạnh thứ hai") 1e-10)

Hề hề hề,

Vấn đề còn ở chỗ đối tượng hình thang này là một polyline hay chỉ là các line nữa bác Hieptr ơi.

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
--NK--    2

Tại bạn nghĩ nhiều quá chăng ?!

đk chỉ là so sánh angle của các cạnh

đại loại:

(equal (angle "02 đỉnh thuộc cạnh thứ nhất") (angle "02 đỉnh thuộc cạnh thứ hai") 1e-10)

Nếu lấy góc của 2 đường thẳng để so sánh thì có 1 trường hợp là 2 đường thẳng song song nhưng hướng của cặp số 10 và 11 của 2 đường thẳng ngược nhau nên vẫn ra Nil.

Mình đã thử suy nghĩ về giao điểm, nhưng suy nghĩ tối qua. Lần quần ko ra được, phần thì ko có thời gian.

Cho mình hỏi trong dk bạn gợi ý có “1e-10” là gì, mình ko hiểu. Bạn có thể giải thích 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
hiepttr    523

@bác Bình:

Em viết:

(equal (angle "02 đỉnh thuộc cạnh thứ nhất") (angle "02 đỉnh thuộc cạnh thứ hai") 1e-10)

thì có liên quan gì đến line hay polyline ?!

Khi NK hỏi vậy, em đoán NK cũng đã vọc đc tí chút rồi bác Bình ah !

 

@NK:

>>> để kiểm tra song song cho cả 2 đk khi 2 cạnh cùng phương ngược chiều (hoặc cùng chiều) thì so sánh hiệu 2 góc với 0 hoặc với pi

Chú ý: nên dùng equal.

1e-10 trong VD trên là tham số fuzz (bạn đọc help hàm equal nhé !) tạm dịch nôm na là sai số của phép so sánh,

equal trả lại kết quả T khi sai khác giữa 2 đối số <fuzz.

  • 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
Tot77    501

Bạn thử cái này.

 

(defun c:test (/ ss coroi a ang tm)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget))))
coroi nil
rt nil)
  (while (and ss (not coroi))
    (setq a (car ss)
 ang (angle (dxf 10 a) (dxf 11 a))
 ss (cdr ss))
    (if (setq tm (vl-remove-if-not '(lambda (x) (or (= ang (angle (dxf 10 x) (dxf 11 x)))
                   (= ang (angle (dxf 11 x) (dxf 10 x))))) ss))
      (setq rt (list a (car tm))
   coroi t)
    )
  )
  (if rt (sssetfirst nil (ssadd (last rt) (ssadd (car rt)))))
)
  • 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
Tot77    501

Ý kiến với Tot77 tí:

1). Đã set cục bộ rồi thì còn set nil làm chi? Chắc do không để ý?

2). Dùng hàm = thì rất phiêu.

1) Cẩn tắc vô ưu.

2) Tuyệt đối song song, k có vụ "gần" song song.

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
Doan Van Ha    2.680

1) Cẩn tắc vô ưu.

2) Tuyệt đối song song, k có vụ "gần" song song.

2). Sẽ có lúc Tot77 ngộ ra cái "gần" ấy! Nói chi đâu xa: Tot77 thử rectang 1 hình, xoay đi 1 tí, rồi kiểm tra xem nó có = hay phải equal?

Nếu Tot77 vẫn bảo lưu thì sẽ không ý kiến nữa, bởi đây là "kinh nghiệm xương máu" nên góp ý thế thôi.

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
--NK--    2

Cảm ơn mọi người đã giúp đỡ.

Cảm ơn bạn Tott77, Hiepttr.^^

Hình thang này ko chỉ là 4 đt thôi, ko phải một khối.

Mình dùng lisp của bạn Tott77 theo yêu cầu của mình là ok.

Nhưng có 1 vấn đề là hình thang đặng nghiêng thì lisp ko chay được như bạn D.V.Ha nói.

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
Tot77    501

"Kinh nghiệm xương máu" của bác Ha cũng hay đấy, vậy bạn thay hàm = bằng equal cho chắc ăn, sai số tùy bạn cho.

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
Doan Van Ha    2.680

"Kinh nghiệm xương máu" của bác Ha cũng hay đấy, vậy bạn thay hàm = bằng equal cho chắc ăn, sai số tùy bạn cho.

Trích dẫn dưới đây chưa phải là câu trả lời cho bạn ư?

Cảm ơn mọi người đã giúp đỡ.

Cảm ơn bạn Tott77, Hiepttr.^^

Hình thang này ko chỉ là 4 đt thôi, ko phải một khối.

Mình dùng lisp của bạn Tott77 theo yêu cầu của mình là ok.

Nhưng có 1 vấn đề là hình thang đặng nghiêng thì lisp ko chay được như bạn D.V.Ha nói.

- Tự nhiên tôi lại nhớ đến những nhận xét của ndtnv và của ketxu.

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  

×