Đến nội dung


Hình ảnh
- - - - -

[Hỏi] CODE đọc dữ liệu đường 2D POLYLINE


  • Please log in to reply
6 replies to this topic

#1 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 03 April 2012 - 07:23 AM

Chào các bác !
Bác nào cho em xin đoạn mã đọc dữ liệu đường 2D POLYLINE
Đường mà (assoc 0 data ) = (0 . "POLYLINE") đấy ạ, không phải (0 . "LWPOLYLINE") đâu
E nhớ trên 4r cũng có rồi nhưng mà dùng các hàm khi chạy (vl-load-com)
E muốn đọc nó bằng LISP thuần túy, đồng thời cũng xác định luôn vị trí các đoạn cong trên đường này
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 April 2012 - 08:19 AM

Chào các bác !
Bác nào cho em xin đoạn mã đọc dữ liệu đường 2D POLYLINE
Đường mà (assoc 0 data ) = (0 . "POLYLINE") đấy ạ, không phải (0 . "LWPOLYLINE") đâu
E nhớ trên 4r cũng có rồi nhưng mà dùng các hàm khi chạy (vl-load-com)
E muốn đọc nó bằng LISP thuần túy, đồng thời cũng xác định luôn vị trí các đoạn cong trên đường này

Khái niệm "đọc" dữ liệu hơi khó hiểu tí.
Bạn dùng đoạn code này để chọn 1 đối tượng POLYLINE xem có đúng ý bạn không?
(entget (car (entsel "\nChon POLYLINE: ")))
  • 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.


#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 03 April 2012 - 08:24 AM

Chào các bác !
Bác nào cho em xin đoạn mã đọc dữ liệu đường 2D POLYLINE
Đường mà (assoc 0 data ) = (0 . "POLYLINE") đấy ạ, không phải (0 . "LWPOLYLINE") đâu
E nhớ trên 4r cũng có rồi nhưng mà dùng các hàm khi chạy (vl-load-com)
E muốn đọc nó bằng LISP thuần túy, đồng thời cũng xác định luôn vị trí các đoạn cong trên đường này

Code này đọc dữ liệu 2Dpolyline, xác định tọa độ đỉnh của Polyline này :
Quick code :


(defun c:gvert(/ e lst)
(setq e (car(entsel "\nChon Polyline 2D")))
(while (/= (cdr(assoc 0 (entget (setq e (entnext e))))) "SEQEND")
(setq lst (append lst (list (cdr(assoc 10 (entget e))))))
)
(alert (vl-princ-to-string lst))
(princ "\n")
lst
)

  • 1

#4 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 03 April 2012 - 09:13 AM

Thanks bác, giờ thì e đã hiểu
Vậy còn đoạn cong trên đường này thì sao bác
  • 0

#5 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 03 April 2012 - 02:38 PM

Thanks bác, giờ thì e đã hiểu
Vậy còn đoạn cong trên đường này thì sao bác

Hề hề hề,
Với mỗi dỉnh của polyline, bạn check mã DXF 42 của nó, nếu giá trị của nó khác 0 thì đoạn polyline kế tiếp đỉnh đó có độ cong. và độ cong này chính là gia trị của mã dxf 42.
Khái niệm về độ cong này bạn có thể tham khảo thêm trên diễn đàn hay trong help của CAd.
Chúc bạn vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#6 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 03 April 2012 - 06:25 PM

Thanks bác, giờ thì e đã hiểu
Vậy còn đoạn cong trên đường này thì sao bác

Hề hề hề,
Đoạn lisp này mình viết vội để giúp bạn xác định các polyline có đoạn cong hay không và các đoạn cong này nằm ở phân đoạn nào trên polyline với bán kinh cong bằng bao nhiêu??
Bạn hãy test thử xem nhé. Do viết vội nên mình chưa khử biến và chưa check hết các trường hợp. Bạn có thể dựa vào đó để tự hoàn thiện nó nhé.
 

(defun c:xdr ()
(setq en (car (entsel "\n chon Polyline"))
elst (entget en)
selst (list) )
(if (= (cdr (assoc 0 elst)) "POLYLINE")
(progn
(setq en1 (entnext en)
i 1)
(while (/= (cdr (assoc 0 (entget en1))) "SEQEND")
(setq elst1 (entget en1))
(if (/= (setq bul (cdr (assoc 42 elst1))) 0)
(progn
(setq p1 (cdr (assoc 10 elst1))
p2 (cdr (assoc 10 (entget (entnext en1))))
l (distance p1 p2)
R (/ l 2 (sin (* 2 (atan bul))) )
selst (append selst (list (list i R)))
)
)
)
(setq i (1+ i)
en1 (entnext en1)
)
)
)
)
(if (= (cdr (assoc 0 elst)) "LWPOLYLINE")
(progn
(setq i 0)
(setq plst (list))
(foreach cod elst
(if (= (car cod) 10)
(setq plst (append plst (list (cdr cod))))
)
)
(foreach code elst
(if (= (car code) 42)
(progn
(setq i (1+ i))
(if (/= (setq bul (cdr code)) 0)
(progn
(setq p1 (nth (1- i) plst)
p2 (nth i plst)
l (distance p1 p2)
R (/ l 2 (sin (* 2 (atan bul))) )
)
(setq selst (append selst (list (list i R))))
)
)
)
)
)
)
)


(if selst
(foreach sec selst
(alert (strcat "\n Phan doan " (rtos (car sec) 2 0) " cong voi ban kinh cong là: " (rtos (cadr sec) 2 2)))
)
(alert "\n Polyline khong co phan doan cong")
)

(princ)
)
Chúc bạn vui và nếu có gì chưa hài lòng hãy post lên để mình hiệu chỉnh lại lisp nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 11 April 2012 - 08:39 AM

Đoạn cong e có search trên google nó có 1 khái niệm về cái số Bulge gì gì đó & e đã tính toán cũng như chuyển đổi ra tất cả các thông số của đoạn cong đó được rồi.
Cảm ơn các bác nhiều nhiều.
  • 0