Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
13 replies to this topic

#1 --NK--

--NK--

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 20 November 2014 - 04:29 PM

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!!!


  • 0

#2 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 20 November 2014 - 06:07 PM

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)


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#3 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 2014 - 07:11 PM

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.


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

#4 --NK--

--NK--

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 20 November 2014 - 09:05 PM

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?


  • 0

#5 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 21 November 2014 - 08:13 AM

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


  • 1

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 November 2014 - 08:37 AM

2pi nữa hiepttr? >> so sánh sin của góc.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 21 November 2014 - 08:39 AM

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)))))
)

  • 1

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 November 2014 - 08:46 AM

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


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 21 November 2014 - 08:53 AM

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


  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 November 2014 - 08:59 AM

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.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 November 2014 - 09:04 AM

Đề bài chưa rõ ràng thì viết chỉ tốn thời gian thôi ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#12 --NK--

--NK--

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 21 November 2014 - 02:00 PM

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.


  • 0

#13 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 21 November 2014 - 02:16 PM

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


  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 November 2014 - 10:25 PM

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


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.